Linux用のSTM32を開発するためのSublime Text 3、SW4、およびSTM32CubeMXの構成

インターネットには同様の記事がたくさんありますが、実際のバリエーションを書きたいと思います。 個人的に、私は長い間バンドルで苦しめられてきました:Ubuntuはメインシステムであり、Windows 7仮想マシンでのSTM32の開発です。 先に進み、まだ理想を達成していないと言います。Keilのように、リアルタイムデバッグを作成できませんでした。 そうでなければ、すべてが非常にまともです。







注意、たくさんのテキストと写真!







私がやったこと:









取るべき手順:









Ubuntu 16.04に基づいた完全にクリーンなマシンの手順が示されていますが、場合によっては、一部のコンポーネントが既にインストールされている可能性があります。 この記事と以下では、 STM32F3DISCOVERYデバッグボードの例を示します。 LQFP100パッケージの256 KBフラッシュと48 KB RAMを備えたSTM32F303VCT6 MKに基づいています。 STM32CubeMXのおかげで、設定をMKに非常に簡単に適合させることができます。







すべての名前はbulkinでユーザーに示されます。構成中に変更することを忘れないでください。


必要なソフトウェアをプレインストールします



sudo apt install git clang cmake python-pip sudo pip install --upgrade pip
      
      





プログラムのインストールとライブラリの保存に必要なディレクトリを作成します



〜/ Programsホームディレクトリの別のフォルダーに非PPAプログラムをインストールすることを好みます。 まず、ローカルユーザーとしてインストールします。 第二に、英語の名前のフォルダは、 途中でキリル文字が気に入らないプログラムもあります。

ライブラリを/ opt / libsに保存することを好みます







なぜin / opt?

はい、 / optはオプションのアプリケーションです。 しかし、圧縮されたbtrfsを含む別のセクションに/ optをマウントしました。 すべてのマシンで、 / opt / libsにあるライブラリへのパスを構成しました。 馬鹿になり、すべてのことを規範に従って行うには( / usr / local / libおよび/ usr / local / shareを使用 )意味がわかりません。混乱するのは簡単です。







 mkdir ~/Programs sudo mkdir /opt/libs sudo chown bulkin:bulkin /opt/libs
      
      





STM32CubeMXおよびEclipseの場合、次のものが必要です。





32ビットライブラリをインストールする



 sudo apt install lib32ncurses5
      
      





Open JDK 8 JREをインストールする



 sudo apt install default-jre
      
      





STM32CubeMXをインストールする



ST自身の指示に従って行動します







STサイトから配布キットをダウンロードし(登録が必要です)、拡張子.linuxのファイルを解凍して実行します。 インストーラーが起動しない場合、32ビットライブラリがインストールされていない可能性があります。 インストールパスを/ home / bulkin / Programs / STM32CubeMXに変更して 、インストールします。







スクリーン







美しいショートカットを作成し、Dashに検索を追加します



 touch ~/.local/share/applications/CubeMX.desktop chmod ug+x ~/.local/share/applications/CubeMX.desktop nano ~/.local/share/applications/CubeMX.desktop
      
      





次の内容を貼り付けます。







 [Desktop Entry] Version=1.0 Name=CubeMX Comment=STM32 CubeMX Exec=/home/bulkin/Programs/STM32CubeMX/STM32CubeMX Icon=/home/bulkin/Programs/STM32CubeMX/help/STM32CubeMX.ico Terminal=false Type=Application Categories=Utility;Application;
      
      





これで、ダッシュのアイコンが[アプリケーション]セクションに表示されます。ダッシュでの検索は、再ログ後に機能します。







STM32CubeMXを起動し、 [ヘルプ] - > [アップデーター設定]に移動して、ライブラリを保存するパスを/ opt / libs / STM32Cube / Repository /







スクリーン







STM32F3のライブラリをインストールします。 [ ヘルプ]-> [新しいライブラリのインストール ] 開き 、[ ファミリSTM32F3のファームウェアパッケージ ] ボックスを オンにし 、[ 今すぐインストール ] クリックします。







スクリーン







Sublime Text 3をインストール



一般的に、SW4は完全に独立したIDEです。 しかし、私はST3でのコーディング、およびSW4でのコンパイルとデバッグが好きです。 ディストリビューションのST3のインストール手順はこちらです。







 wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - sudo apt install apt-transport-https echo "deb https://download.sublimetext.com/ apt/stable/" | sudo tee /etc/apt/sources.list.d/sublime-text.list sudo apt update sudo apt install sublime-text cppcheck python-configparser sudo pip install --upgrade cmake sudo pip install cmakelint sudo pip install cubemx2cmake
      
      





その後、ログインする価値があります。







Sublime Text 3のセットアップ



まず、パッケージコントロールをインストールします。

ST3を実行し、 CTRL + `を押して、コードをコマンドラインに貼り付け、ENTERを押します。







 import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedcf1dcaee' + 'ebe013ee18cced0ef93d5f746d80ef60'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
      
      





スクリーン







完全な作業のために、このようなパッケージが必要です。









メニューの設定->パッケージ制御->パッケージのインストールから必要なパッケージをインストールします







ST3を構成する



[設定]-> [設定]を開き、右半分に貼り付けます。







 { "always_show_minimap_viewport": true, "drag_text": false, "ensure_newline_at_eof_on_save": true, "fallback_encoding": "Cyrillic (Windows 1251)", "font_size": 10, "highlight_modified_tabs": true, "ignored_packages": [ "Vintage" ], "index_exclude_patterns": [ "*.log", "*.bak" ], "show_encoding": true, "translate_tabs_to_spaces": true, "trim_trailing_white_space_on_save": true }
      
      





ST3パッケージを構成する



EasyClangComplete



C99clangを設定し、 StdLibなどの基本的なライブラリでディレクトリを指定します。







[ 設定]-> [EasyClangComplete]-> [ 設定]を開き、右半分に貼り付けます。







 { "common_flags" : [ "-I/usr/include", "-I/usr/lib/clang/$clang_version/include", ], "c_flags" : [ "-std=c99" ], "clang_binary" : "clang", "verbose" : false, "use_libclang_caching": true, }
      
      





Sublimelinter





[ 設定]-> [サブリムーター]-> [ 設定]を開き、右半分に貼り付けます。







ネタバレに隠された多くのテキスト
 { "user": { "debug": false, "delay": 0.25, "error_color": "D02000", "gutter_theme": "Packages/SublimeLinter/gutter-themes/Default/Default.gutter-theme", "gutter_theme_excludes": [], "lint_mode": "load/save", "linters": { "annotations": { "@disable": false, "args": [], "errors": [ "FIXME" ], "excludes": [], "warnings": [ "NOTE", "README", "TODO", "@todo", "XXX", "WIP" ] }, "clang": { "@disable": false, "args": [], "excludes": [], "extra_flags": "", "include_dirs": [] }, "cmakelint": { "@disable": false, "args": [], "excludes": [] }, "cppcheck": { "@disable": false, "args": [], "enable": [ "warning", "style", "performance", "portability" ], "excludes": [], "std": [ "c99", "c++11" ] }, }, "mark_style": "outline", "no_column_highlights_line": false, "passive_warnings": false, "paths": { "linux": [], "osx": [], "windows": [] }, "python_paths": { "linux": [], "osx": [], "windows": [] }, "rc_search_limit": 3, "shell_timeout": 10, "show_errors_on_save": false, "show_marks_in_minimap": true, "tooltip_fontsize": "1rem", "tooltip_theme": "Packages/SublimeLinter/tooltip-themes/Default/Default.tooltip-theme", "tooltip_theme_excludes": [], "tooltips": false, "warning_color": "DDB700", "wrap_find": true } }
      
      





SublimeAStyleFormatter



書式設定は私の好みに合わせてカスタマイズされています。 すべてのアイテムの詳細な説明は、 設定-> SublimeAStyleFormatter->設定-デフォルトにあります。







環境設定-> SublimeAStyleFormatter->設定-ユーザーを開き、挿入:







 { "options_default": { "style": "google", "indent": "spaces", "indent-spaces": 4, "indent-col1-comments": true, "indent-switches": true, "indent-cases": true, "break-blocks": "default", "attach-namespaces": true, "break-blocks": "default", "add-brackets": true, "lineend": "linux" } }
      
      





STM32用のAC6システムワークベンチ(SW4STM32)をインストールする



完全なインストールプロセスは、 OpenSTM32.org Webサイトで説明されてます。







www.openstm32.orgに登録し、 インストーラーをダウンロードします。







ダウンロードフォルダーに移動して入力します







 bash install_sw4stm32_linux_64bits-latest.run
      
      





gksudoがインストールされている場合、インストーラーはグラフィカルモードで起動します。 すべてが端末にあるため、インストールしていません。







ナンセンスとの同時性として1を数回紹介します。 インストールパスを指定します。







 /home/bulkin/Programs/SystemWorkbench
      
      





再び、初めての処女のように、すべてに同意し、インストールが完了するのを待っています。







SW4検索をダッシュ​​に追加



 chmod +x "/home/bulkin/ /sw4stm32_shortcut.desktop" cp "/home/bulkin/ /sw4stm32_shortcut.desktop" ~/.local/share/applications/sw4stm32_shortcut.desktop
      
      





SW4を構成する



SW4を起動し、ワークスペースの作成に同意して、 ワークベンチをクリックします 。 最初の起動時に、ARMツールチェーンがインストールされます。







まず、便利なテーマをインストールします。 [ヘルプ]-> [新しいソフトウェアのインストール] 開き、[ 追加... ] クリックして次入力します。







 Eclipse Color Theme http://eclipse-color-theme.github.io/update/
      
      





[OK]をクリックし、[ Eclipse Color Theme ]を選択して[ 次へ ]をクリックし、すべてが完了します。







スクリーン







テーマをオンにします: ウィンドウ->設定->外観->色テーマ 。 私はモノカイが大好きで、後で好きなものを選ぶことができます。







それでは、最初のプロジェクトを立ち上げ、作業中の開発環境を確認するときが来ました。







カスタマイズされた環境と微調整の確認



繰り返しますが、 STM32F3DISCOVERYデバッグボードの例を示します。 開発環境の設定を確認するだけなので、すべてをできるだけ簡単にしています。







STM32CubeMXを実行し、メインウィンドウで[新しいプロジェクト]を選択します。 ボードセレクタータブを開きます。 ボードを選択してください:









スクリーン







ボード上の2回のクリック。







最小限のセットアップMKを作りましょう



左側のメニューで、次を有効にします。









スクリーン







[クロック設定]タブに移動します。









プロジェクト自体をセットアップする



トップメニューからプロジェクト->設定を開きます。









スクリーン







[ コードジェネレーター ]タブを開き、[ツールチェーンプロジェクト構成ファイルの参照として必要なライブラリファイルを追加する]を有効にします。







スクリーン







[ OK]をクリックすると、プロジェクトを作成する準備ができました。 トップメニューの[ソースコードの生成]をクリックします。







Sublime Text 3を確認してください



まず、CMakeList.txtを作成する必要があります。 これを行うには、プロジェクトのルートでコンソールを開き、次のように入力します。







 cubemx2cmake
      
      





コマンドラインからのコンパイルに必要なファイルは、 STM32Discovery-SW4-Test.iocから作成されます。 しかし、私たちはCMakeLists.txt.templateにのみ興味があります。 名前をCMakeLists.txtに変更します。







スクリーン







Project-> Add folder to Project ...そして、新しいプロジェクトのフォルダーを選択します。

まず、欠落しているライブラリパスをCMakeList.txtに追加する必要があります。 これは、 EasyClangCompleteが正しく機能するために必要です。 CMakeList.txtを左クリックして、変更を加えます。

set(USER_INCLUDE Inc)



追加します:







 set(STM32CUBEREPO /opt/libs/STM32Cube/Repository/STM32Cube_FW_F3_V1.9.0)
      
      





fileへの後続のすべての設定を次のように変更します







 set(USER_INCLUDE Inc) set(CMSIS_DEVICE_INCLUDE ${STM32CUBEREPO}/Drivers/CMSIS/Device/ST/STM32F3xx/Include) set(CMSIS_INCLUDE ${STM32CUBEREPO}/Drivers/CMSIS/Include) set(CMSIS_RTOS_INCLUDE ${STM32CUBEREPO}/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS) set(HAL_INCLUDE ${STM32CUBEREPO}/Drivers/STM32F3xx_HAL_Driver/Inc) set(FREERTOS_INCLUDE ${STM32CUBEREPO}/Middlewares/Third_Party/FreeRTOS/Source/include)
      
      





さて、最後のinclude_directoriesセクションで、 ${FREERTOS_INCLUDE} ${CMSIS_DEVICE_INCLUDE}



追加します。







 include_directories(${USER_INCLUDE} ${CMSIS_DEVICE_INCLUDE} ${CMSIS_INCLUDE} ${HAL_INCLUDE} ${CMSIS_RTOS_INCLUDE} ${FREERTOS_INCLUDE})
      
      





最後にCMakeList.txtがあります
 set(MCU_FAMILY STM32F3xx) cmake_minimum_required(VERSION 3.6) project(STM32Discovery-SW4-Test C ASM) add_definitions(-DSTM32F303xC) add_definitions(-DUSE_HAL_LIBRARY) set(STM32CUBEREPO /opt/libs/STM32Cube/Repository/STM32Cube_FW_F3_V1.9.0) set(USER_INCLUDE Inc) set(CMSIS_DEVICE_INCLUDE ${STM32CUBEREPO}/Drivers/CMSIS/Device/ST/STM32F3xx/Include) set(CMSIS_INCLUDE ${STM32CUBEREPO}/Drivers/CMSIS/Include) set(CMSIS_RTOS_INCLUDE ${STM32CUBEREPO}/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS) set(HAL_INCLUDE ${STM32CUBEREPO}/Drivers/STM32F3xx_HAL_Driver/Inc) set(FREERTOS_INCLUDE ${STM32CUBEREPO}/Middlewares/Third_Party/FreeRTOS/Source/include) file(GLOB_RECURSE USER_INCLUDE_F ${USER_INCLUDE}/*.h) file(GLOB_RECURSE CMSIS_DEVICE_INCLUDE_F ${CMSIS_DEVICE_INCLUDE}/*.h) file(GLOB_RECURSE CMSIS_INCLUDE_F ${CMSIS_INCLUDE}/*.h) file(GLOB_RECURSE HAL_INCLUDE_F ${HAL_INCLUDE}/*.h) file(GLOB_RECURSE USER_SOURCES Src/*.c) file(GLOB_RECURSE HAL_SOURCES ${STM32CUBEREPO}/Drivers/STM32F3xx_HAL_DRIVER/Src/*.c) file(GLOB_RECURSE CMSIS_SYSTEM ${STM32CUBEREPO}/Drivers/CMSIS/Device/ST/STM32F3xx/Source/Templates/system_STM32F3xx.c) file(GLOB_RECURSE CMSIS_STARTUP ${STM32CUBEREPO}/Drivers/CMSIS/Device/ST/STM32F3xx/Source/Templates/gcc/startup_STM32F303xC.s) set(SOURCE_FILES ${USER_SOURCES} ${HAL_SOURCES} ${CMSIS_SYSTEM} ${CMSIS_STARTUP} STM32F303VCTx_FLASH.ld ${USER_INCLUDE_F} ${CMSIS_DEVICE_INCLUDE_F} ${CMSIS_INCLUDE_F} ${HAL_INCLUDE_F}) include_directories(${USER_INCLUDE} ${CMSIS_DEVICE_INCLUDE} ${CMSIS_INCLUDE} ${HAL_INCLUDE} ${CMSIS_RTOS_INCLUDE} ${FREERTOS_INCLUDE}) add_executable(${PROJECT_NAME}.elf ${SOURCE_FILES}) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map=${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.map") set(HEX_FILE ${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.hex) set(BIN_FILE ${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.bin) add_custom_command(TARGET ${PROJECT_NAME}.elf PRE_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/build COMMENT "Creating build directory") add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE} COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE} COMMENT "Building ${HEX_FILE} Building ${BIN_FILE}") add_custom_target(flash WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND openocd -f openocd_flash.cfg COMMENT "Flashing the target processor..." DEPENDS ${PROJECT_NAME}.elf) add_custom_command(TARGET flash POST_BUILD COMMENT "Flashing finished!")
      
      





これらのタンバリンとのダンスが必要な理由を説明する価値があります。 実際のところ、プロジェクトを作成するときに、「ツールチェーンのリンクとしてライブラリを追加する」オプションを選択しました。 ただし、 cubemx2cmakeは、 HALライブラリへの相対パスを示し、 CMSISおよびFreeRTOSライブラリへのパスをいくつか追加しません。 これはおそらく将来のバージョンで修正されるでしょうが、これまでのところ。

キャッシュCmakeをリセットする必要があります: CTRL-SHIFT-P-> EasyClangComplete:現在のcmakeキャッシュを消去します







Src / main.cを開きましょう。カーソルを関数の上に移動すると、ポップアップウィンドウの説明が表示されます。 EasyClangCompleteの操作の詳細については、 こちらをご覧ください







コードをフォーマットしてみましょう。CTRL+ ALT + Fを押して、すべてが変更された様子をお楽しみください。 別のスタイルを好む場合、問題はありません。 設定-> SublimeAStyleFormatterの設定です







プロジェクトをコンパイルし、デバッグを確認します



SW4を起動してプロジェクトをインポートします。









スクリーン







完了をクリックします。







Project Explorerプロジェクトを選択します。 プロジェクトのコンパイル->プロジェクトのビルド 。 エラーなしですべてが完了した場合、プロジェクトは数秒でコンパイルされます。 そして、下部のコンソールには次のようなものがあります。







 Generating binary and Printing size information: arm-none-eabi-objcopy -O binary "STM32Discovery-SW4-Test.elf" "STM32Discovery-SW4-Test.bin" arm-none-eabi-size "STM32Discovery-SW4-Test.elf" text data bss dec hex filename 8724 16 5040 13780 35d4 STM32Discovery-SW4-Test.elf 16:42:41 Build Finished (took 6s.173ms)
      
      





ボードをコンピューターに接続し、ファームウェアのダウンロードを試みます。 実行-> Ac6 STM32 C / C ++アプリケーションとして実行します 。 すべてが成功した場合、コンソール出力の最後は次のようになります。







 wrote 10240 bytes from file Debug/STM32Discovery-SW4-Test.elf in 0.513113s (19.489 KiB/s) ** Programming Finished ** ** Verify Started ** STM32F303VCTx.cpu: target state: halted target halted due to breakpoint, current mode: Thread xPSR: 0x61000000 pc: 0x2000002e msp: 0x2000a000 verified 8748 bytes in 0.104648s (81.635 KiB/s) ** Verified OK ** ** Resetting Target **
      
      





まあ、最もおいしい。 デバッガーを実行します。 実行->デバッグ (または単にF11を押します)。 SW4はファームウェアをダウンロードし、デバッガーの個別のパースペクティブを開くことを提案します。 同意することをお勧めします。







最初に、プログラムはint main(void) {}



で停止します。これはデフォルトのブレークポイントです。 すべてのMK設定が初期化されるようにF8を押してプログラムを起動し、トップパネルの[ 一時停止 ]ボタンをクリックして停止します。 LEDを点灯してみましょう。 パースペクティブの右上部分で、 I / O Registersタブ開き、GPIOを展開して、 GPIOE-> ODR-> Activateを右クリックします。







スクリーン







次に、LEDがPE8〜PE15の脚に置かれているプロジェクトでのSTM32CubeMXを見てみましょう。







GPIOE-> ODR-> ODR15 by GPIOE- > ODR-> ODR8の行のHEX値列で、 1設定し、ボード上のLEDが点灯する魔法をお楽しみください。 セット0-外出。







スクリーン







残念ながら、そのような魔法は同じKeil uVisionとは異なり、停止状態でのみ可能です。ここにはリアルタイムがありません。 (悲しいスマイリー)







Gitを構成するためだけに残ります







Gitセットアップ



ターミナルを介してプロジェクトのディレクトリに移動し、個人データの入力を含むGitを初期化します。







 cd ~/workspace/STM32Discovery-SW4-Test git init git config --global user.email "nb******@yandex.ru" git config --global user.name "Nikita Bulaev"
      
      





.gitignoreを作成して追加します。







.Gitignoreコンテンツ
 /Debug/ .metadata bin/ tmp/ *.tmp *.bak *.swp *~.nib local.properties .settings/ .loadpath .recommenders # External tool builders .externalToolBuilders/ # Locally stored "Eclipse launch configurations" *.launch # CDT-specific (C/C++ Development Tooling) .cproject # sbteclipse plugin .target # Tern plugin .tern-project # TeXlipse plugin .texlipse # STS (Spring Tool Suite) .springBeans # Code Recommenders .recommenders/ # Scala IDE specific (Scala & Java development for Eclipse) .cache-main .scala_dependencies .worksheet
      
      





さて、コミットしましょう:







 git add * git commit -a -m "Initial commit"
      
      





一般に、開発環境の設定に関するこの記事の範囲を超えるものはありません。 これは、デバッグ、およびあらゆる種類のホットキーST3の完全な説明です。 これについてはまたお話したいと思います。 この記事がお役に立てば幸いですが、環境のセットアップは1年前よりもずっと簡単になりました。 頑張って








All Articles