ã€ã³ã¿ãŒãããã«ã¯åæ§ã®èšäºããããããããŸãããå®éã®ããªãšãŒã·ã§ã³ãæžããããšæããŸãã å人çã«ãç§ã¯é·ãéãã³ãã«ã§èŠãããããŠããŸããïŒUbuntuã¯ã¡ã€ã³ã·ã¹ãã ã§ãããWindows 7ä»®æ³ãã·ã³ã§ã®STM32ã®éçºã§ãã å
ã«é²ã¿ããŸã çæ³ãéæããŠããªããšèšããŸããKeilã®ããã«ããªã¢ã«ã¿ã€ã ãããã°ãäœæã§ããŸããã§ããã ããã§ãªããã°ããã¹ãŠãéåžžã«ãŸãšãã§ãã
泚æãããããã®ããã¹ããšåçïŒ
ç§ããã£ãããšïŒ
- HALããã®ä»ã®ãããžã§ã¯ãã©ã€ãã©ãªãå«ããã¹ãŠã®æ©èœã®èªåè£å®ããã³åŒ·èª¿è¡šç€ºãåããSublime Text 3ã
- ã«ã¹ã¿ãã€ãºãããããŒã¹ãã¯ãã£ãããã³ãã®ä»ã®æ©èœãåããSTM32çšAC6ã·ã¹ãã ã¯ãŒã¯ãã³ãã
- ãã¡ãããGitã§ããŒãžã§ã³ç®¡çã䜿çšããŠããŸãã
åãã¹ãæé ïŒ
- å¿
èŠãªPPAãAPTã«è¿œå ããŸãã
- å¿
èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŸãã
- ããã°ã©ã ãã€ã³ã¹ããŒã«ããŸãã
- æ§æãã¡ã€ã«ã«å€æŽãå ããŸãã
- ããããçš®é¡ã®ãã³ãçŸããã¢ã€ã³ã³ã®åœ¢ã§ä»äžããããã¡ãã¥ãŒããæ€çŽ¢ããããªã©ã
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ã®å Žåãæ¬¡ã®ãã®ãå¿
èŠã§ãã
- ãªããªã STM32CubeMXã¯32ãããã¢ããªã±ãŒã·ã§ã³ã§ãã64ãããOSã䜿çšããŠããå Žåã察å¿ããã©ã€ãã©ãªãå¿
èŠã§ãã
- Javaã©ã³ã¿ã€ã ç°å¢ïŒOpenJRE 8ã䜿çšããŸãïŒã
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)
å®å
šãªäœæ¥ã®ããã«ããã®ãããªããã±ãŒãžãå¿
èŠã§ãã
- ARMã¢ã»ã³ããªïŒã¢ã»ã³ãã©ãŒã³ãŒãã®åŒ·èª¿è¡šç€ºïŒ
- Cæ¹åïŒããã¯ã©ã€ãCïŒ
- CMakeEditorïŒCmakeãã€ã©ã€ãïŒ
- DocBlokrïŒã³ã¡ã³ãã®ãã©ãŒãããïŒ
- EasyClangCompleteïŒãªãŒããã£ã«ïŒ
- Hex to Intãã¬ãã¥ãŒïŒHEXå€ã衚瀺ïŒ
- SublimeAStyleFormatterïŒCTRL + SHIFT + AãæŒããŠã³ãŒãããã©ãŒãããããŸãïŒ
- Sublimelinter
- Sublimelinter-contrib-cmakelintïŒcmakeããã¯ã©ã€ãïŒ
- Sublimelinter-cppcheckïŒcppcheckã䜿çšããŠã³ãŒãã®ãšã©ãŒããã§ãã¯ããŸãïŒ
- Sublimelinter-annotationsïŒFIXMEãNOTEãTODOãªã©ã®ãã€ã©ã€ãïŒ
ã¡ãã¥ãŒã®èšå®->ããã±ãŒãžå¶åŸ¡->ããã±ãŒãžã®ã€ã³ã¹ããŒã«ããå¿
èŠãªããã±ãŒãžãã€ã³ã¹ããŒã«ããŸã ã
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
- ãªã³ã¿ãŒã¯ãããŒã/ä¿åæã«ã®ã¿æ©èœããŸã
- FIXMEã¯æ³šéããšã©ãŒãšããŠããã®ä»ã¯æ³šéãšããŠå²ã¿ãŸã
- CppCheckã¯ãèŠåãã¹ã¿ã€ã«ãããã©ãŒãã³ã¹ãç§»æ€æ§ã®ã«ãŒã«ã®ã¿ããã§ãã¯ããC99ããã³C ++ 11æšæºãæå®ããŸãã
- ä¿åæã«å¥ã®ãŠã£ã³ããŠã«ãšã©ãŒã衚瀺ããªã
[ èšå®]-> [ãµããªã ãŒã¿ãŒ]-> [ èšå®]ãéããå³ååã«è²Œãä»ããŸãã
ãã¿ãã¬ã«é ãããå€ãã®ããã¹ã { "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->èšå®-ãŠãŒã¶ãŒãéããæ¿å
¥ïŒ
{ "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ãå®è¡ããã¡ã€ã³ãŠã£ã³ããŠã§[æ°ãããããžã§ã¯ã]ãéžæããŸãã ããŒãã»ã¬ã¯ã¿ãŒã¿ããéããŸãã ããŒããéžæããŠãã ããïŒ
- ããŒãã®ã¿ã€ãïŒãã£ã¹ã«ããªãŒ
- MCUã·ãªãŒãºïŒSTM32F3
- 以äžã®ãªã¹ããããSTM32F3DISCOVERYãéžæããŸã
ããŒãäžã®2åã®ã¯ãªãã¯ã
æå°éã®ã»ããã¢ããMKãäœããŸããã
å·ŠåŽã®ã¡ãã¥ãŒã§ã次ãæå¹ã«ããŸãã
- FreeRTOSïŒãã§ãã¯ããã¯ã¹æå¹
- SYSïŒéåæSwã®ãã¬ãŒã¹
- ã¿ã€ã ããŒã¹ãœãŒã¹ïŒTIM17ïŒçŸåšã®æ®µéã§ãããããéžæã§ããŸãïŒ
[ã¯ããã¯èšå®]ã¿ãã«ç§»åããŸãã
- HCLKãã£ãŒã«ãã«64 MHzïŒå
èµãªã·ã¬ãŒã¿ãŒã®æå€§åšæ³¢æ°ïŒãå
¥åããŸã
ãããžã§ã¯ãèªäœãã»ããã¢ãããã
ãããã¡ãã¥ãŒãããããžã§ã¯ã->èšå®ãéããŸãã
- [ ãããžã§ã¯ãå]ãã£ãŒã«ãã«ãããžã§ã¯ãåãæå®ããŸãïŒSTM32Discovery-SW4-Test
- [ ãããžã§ã¯ãã®å Žæ]ãã£ãŒã«ãã«ãã¹ãæå®ããŸãïŒ/ home / bulkin / workspace
- éžæããŒã«ãã§ãŒã³ïŒSW4STM32
[ ã³ãŒããžã§ãã¬ãŒã¿ãŒ ]ã¿ããéãã[ããŒã«ãã§ãŒã³ãããžã§ã¯ãæ§æãã¡ã€ã«ã®åç
§ãšããŠå¿
èŠãªã©ã€ãã©ãªãã¡ã€ã«ã远å ãã]ãæå¹ã«ããŸãã
[ 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ãèµ·åããŠãããžã§ã¯ããã€ã³ããŒãããŸãã
- ãã¡ã€ã«->ã€ã³ããŒã...->äžè¬->æ¢åã®ãããžã§ã¯ããã¯ãŒã¯ã¹ããŒã¹ã«
- ã«ãŒããã£ã¬ã¯ããªãéžæããŸãïŒ/ home / bulkin / workspace / STM32Discovery-SW4-Test
- ãããžã§ã¯ããã¯ãŒã¯ã¹ããŒã¹ã«ã³ããŒããããã¯ã¹ããã§ãã¯ããªãã§ãã ãã
å®äºãã¯ãªãã¯ããŸãã
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幎åããããã£ãšç°¡åã«ãªããŸããã é 匵ã£ãŠ