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


C99でclangを蚭定し、 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.imtqy.com/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幎前よりもずっず簡単になりたした。 頑匵っお



Source: https://habr.com/ru/post/J343456/


All Articles