Данная статья рассказывает о том, по шагам, как настроить связку Sublime text 3, AC6 System Workbench for STM32 и STM32CubeMX в качестве среды разработки для STM32 под MS Windows x64.
Аналогичная инструкция по настройке среды в Linux лежит тут.
Инструкция дана для абсолютно чистой машины на базе MS Windows 10 x64, в вашем случае могут быть уже установлены какие-то компоненты. В этой статье и в последующих буду приводить примеры для отладочной платы STM32F3DISCOVERY. Она основана на МК STM32F303VCT6 c 256-Кбайт Flash и 48-КБайт RAM в корпусе LQFP100. Вы можете адаптировать настройки под ваш МК очень легко благодаря STM32CubeMX.
Что в итоге у меня получилось:
- Sublime Text 3 с автодополнениями и подсветкой всех функций, включая HAL и остальные библиотеки проекта;
- AC6 System Workbench for STM32 с кастомизированными перспективами и прочими плюшками;
- Конечно же использую контроль версий в Git.
Предварительно устанавливаем необходимый софт
Создадим директорию для хранения библиотек и проектов
Я предпочитаю хранить библиотеки на всех своих машинах по одному и тому же пути. Т.к. для компиляторов в общем случае нужны абсолютные пути (тот же CubeMX генерирует абсолютные пути к библиотекам), я создаю отдельную директорию в корне второго раздела диска. У меня это везде D:\Libs.
Аналогично и для проектов я тоже предпочитаю создавать директорию на отдельном, несистемном разделе. В моём случае это D:\workspace.
Устанавливаем Oracle JRE
Скачиваем дистрибутив с сайта Oracle. Ставим со всеми настройками по-умолчанию.
Устанавливаем STM32CubeMX
Действуем согласно инструкции самого ST.
Скачиваем дистрибутив с сайта ST (потребуется регистрация), разархивируем и запустим установщик. Пока ставим со всеми настройками по-умолчанию.
Запускаем STM32CubeMX, идём в настройки Help->Updater Settings и меняем путь для хранения библиотек на D:\Libs\STM32Cube\Repository.
Установим библиотеку для STM32F3. Открываем Help->Install New Libriaries, ставим галку Firmware Package for Family STM32F3, жмём Install Now
Устанавливаем Sublime Text 3
Вообще, SW4 вполне самодостаточная IDE. Но я люблю кодить именно в ST3, а компиляция и дебаг в SW4. Инструкция по установке ST3 для любых дистрибутивов лежит тут.
Скачиваем, устанавливаем, никаких чудес
Для работы некоторых плагинов, надо установить несколько компонентов.
- Распространяемый пакет Microsoft Visual C++ 2010 (x64)
- CppCheck
- Clang, качаем версию Clang for Windows
При установке Clang надо выбрать галку Add LLVM to the System PATH:
В процессе установки выдаст ошибку при попытке интегрировать в MS VisualStudio. Просто закройте окно.
Настройка Sublime Text 3
Для начала установим Package Control. Запускаем 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 Assembly (Подсветка Assembler в коде)
- C Improved (Подсветка C)
- CMakeEditor (Подсветка Cmake)
- DocBlokr (Форматирование комментариев)
- EasyClangComplete (автодополнение функций)
- Hex to Int preview (показывает значение HEX)
- SublimeAStyleFormatter (форматирует код нажатием CTRL+SHIFT+A)
- Sublimelinter
- Sublimelinter-contrib-cmakelint (Подсветка cmake)
- Sublimelinter-cppcheck (проверяет код на ошибки с помощью cppcheck)
- Sublimelinter-annotations (Подсвечивает FIXME, NOTE, TODO и т.д.)
Устанавливаем нужные пакеты из меню Preferences -> Package Control -> Install Package.
Настраиваем пакеты ST3
EasyClangComplete
Настраиваем clang на C99 и указываем директории с базовыми библиотеками вроде StdLib.
Открываем Preferences -> EasyClangComplete -> Settings и вставляем в правую половину:
{
"common_flags" : [
"-IC:/Program Files/LLVM/include/clang-c",
],
"c_flags" : [ "-std=c99" ],
"clang_binary" : "clang",
"verbose" : false,
"use_libclang_caching": true,
}
Sublimelinter
- Линтер срабатывает только при загрузке/сохранении
- Аннотации FIXME обводит как ошибку, остальные как предупреждение
- CppCheck проверяет только правила Warning, Style, Performance и Portability, а также указываем стандарты C99 и C++11.
- Не показывать ошибки отдельным окном при сохранении
Открываем Preferences -> Sublimelinter -> Settings и вставляем в правую половину:
{
"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": ["C:/Program Files/Cppcheck"]
},
"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
Форматирование настроено на мой вкус. Подробное описание всех пунктов есть в Preferences -> SublimeAStyleFormatter -> Settings - Default
Открываем Preferences -> SublimeAStyleFormatter -> Settings - User и вставляем:
{
"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"
}
}
Устанавливаем AC6 System Workbench for STM32 (SW4STM32)
Полностью процесс установки описан на сайте OpenSTM32.org. Регистрируемся и скачиваем инсталятор. В общем-то ставим по-умолчанию, заморочек нет.
Настройка SW4
Запускаем SW4, создаём рабочую область по пути D:\workspace
При первом запуске будет установлен ARM Toolchain. После запуска кликаем на Workbench в правом верхнем углу.
Сначала установим удобную тему. Открываем Help->Install New Software, жмём Add.. и вводим:
Eclipse Color Theme
http://eclipse-color-theme.github.io/update/
Жмём ОК, выбираем Eclipse Color Theme и жмём Next > и дальше всё по накатанной.
Включим тему: Window -> Preferences ->Appearance -> Color Theme. Я люблю Monokai, а вы можете позже подобрать, какую вам нравится.
Ну вот и пришло время запустить наш первый проект и проверить среду разработки в работе.
Проверка настроенной среды и небольшие доводки
Повторюсь, я буду приводить примеры для отладочной платы STM32F3DISCOVERY. Делаю всё максимально просто, нам ведь просто надо проверить настройки среды разработки.
Запустим STM32CubeMX, выберем в главном окне New Project. Откроем вкладку Board Selector. Выбираем нашу плату:
- Type of board: Discovery
- MCU Series: STM32F3
- Из списка ниже выбираем STM32F3DISCOVERY
Сделаем минимальную настройку МК
В левом меню включим:
- FreeRTOS: поставить галку Enabled
- SYS: Trace Asynchronous Sw
- Timebase Source: TIM17 (на текущем этапе можно выбрать любой)
Переходим во вкладку Clock Configuration:
- В поле HCLK вводим 64МГц (на встроенном осциляторе максимальная частота)
Настроим сам проект
Открываем Project->Settings из верхнего меню.
- Указываем имя проекта в поле Project Name: STM32Discovery-SW4-Test
- Указываем путь в поле Project Location: D:\workspace
- Выбираем Toolchain: SW4STM32
Откроем вкладку Code Generator и включим “Add necessary libriary files as reference in the toolchain project configuration file”
Жмём ОК и теперь мы готовы создать проект. Жмите Generate Source Code в верхнем меню:
Проверим Sublime Text 3
- Добавить проект в ST3: Project->Add folder to Project… и выбираем папку нашего нового проекта.
- Создать новый файл: Правый щелчок на имени проекта слева -> New File
В открывшемся окне вставьте актуальные пути к библиотекам HAL:
-ID:\Libs\STM32Cube\Repository\STM32Cube_FW_F3_V1.9.0\Drivers\CMSIS\Device\STM32F3xx\Include
-ID:\Libs\STM32Cube\Repository\STM32Cube_FW_F3_V1.9.0\Drivers\CMSIS\Include
-ID:\Libs\STM32Cube\Repository\STM32Cube_FW_F3_V1.9.0\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS
-ID:\Libs\STM32Cube\Repository\STM32Cube_FW_F3_V1.9.0\Drivers\STM32F3xx_HAL_Driver\Inc
-ID:\Libs\STM32Cube\Repository\STM32Cube_FW_F3_V1.9.0\Middlewares\Third_Party\FreeRTOS\Source\include
Сохраним файл под именем .clang_complete (прям так, с точкой в начале имени).
Теперь надо сбросить кэш Cmake: CTRL-SHIFT-P -> EasyClangComplete: Clean current cmake cache
Откроем Src/main.c. Наведём курсор на какую-нибудь функцию и порадуемся всплывающим окошкам с её описанием. Подробнее о работе EasyClangComplete можно посмотреть тут.
Попробуем отформатировать код: нажмём CTRL+ALT+F и радуемся, как всё поменялось. Если предпочитаете другой стиль, нет проблем, настройки в Preferences -> SublimeAStyleFormatter.
Откомпилируем проект и посмотрим debug
Запускаем SW4 и импортируем проект:
- File -> Import… -> General -> Existing projects into workspace
- Select root directory: D:\workspace\STM32Discovery-SW4-Test
- НЕ ставим галку Copy projects into workspace
Жмём Finish.
Выбираем проект в Project explorer. Компилируем Project -> Build Project. Если всё было сделано без ошибок ранее, проект скомпилируется за несколько секунд. И в консоли в нижней части будет примерно так:
Finished building target: STM32Discovery-SW4-Test.elf
make --no-print-directory post-build
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:12:35 Build Finished (took 18s.983ms)
Кстати, под Linux тот же проект компилится за 6 секунд. Пишите, если знаете, почему.
Подключим нашу плату к компьютеру и попробуем загрузить прошивку: Run -> Run as Ac6 STM32 C/C++ Application. Если всё удачно, в конце вывода консоли будет:
wrote 10240 bytes from file Debug/STM32Discovery-SW4-Test.elf in 0.603749s (16.563 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.246880s (34.604 KiB/s)
** Verified OK **
** Resetting Target **
Ну и самое вкусное. Запустим дебагер. Run -> Debug (или просто жмите F11). SW4 загрузит прошивку и предложит открыть отдельную перспективу для дебагера. Советую согласиться.
Изначально наша программа будет остановлена на int main(void) {}
, это брейкпонт по-умолчанию. Запустим программу нажав F8, чтобы инициализировались все настройки МК, потом остановим, нажав кнопку Suspend в верхней панели. Давайте попробуем зажечь светодиоды. В правой верхней части перспективы откроем вкладку I/O Registers, развернём GPIO и правый щелчок на GPIOE -> ODR -> Activate
Теперь посмотрим в STM32CubeMX в нашем проекте, что светодиоды сидят на ногах PE8 - PE15:
В столбце HEX Value в строках c GPIOE -> ODR -> ODR15 по GPIOE -> ODR -> ODR8 выставим 1 и радуемся магии, как загораются светодиоды на плате. Ставим 0 - гаснут.
К сожалению, такая магия возможно только в остановленном состоянии, в отличие от того же Keil uVision, реалтайма тут нет. (грустный смайлик)
Осталось только настроить Git.
Установка Git
Скачиваем дистрибутив с сайта git-scm.com. Устанавливаем со всеми опциями по-умолчанию, кроме одной: советую в качестве редактора включить Nano. Но если вам хочется, можете оставить Vim или же подключить Notepad++, если он установлен.
Настройка Git
Проводником заходим в папку нашего проекта, правый щелчок мышью -> Git Bash Here:
В появившемся окне инициализируем Git, включая ввод персональных данных:
git init
git config --global user.email "b**@bulki.me"
git config --global user.name "Nikita Bulaev"
Не забудьте подставить свои данные!
Создадим .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. Об этом я бы хотел поговорить в другой раз. Надеюсь, данная статья будет полезна, хотя ныне настройка среды стала гораздо проще, чем ещё год назад. Удачи!