Comrade Bulkin Memory Blog

Мои заметки и статьи по тематике программирования МК, а также системного администрирования


Project maintained by firebull Hosted on GitHub Pages — Theme by mattgraham

Данная статья рассказывает о том, по шагам, как настроить связку 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 для любых дистрибутивов лежит тут.

Скачиваем, устанавливаем, никаких чудес

Для работы некоторых плагинов, надо установить несколько компонентов.

При установке 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. Об этом я бы хотел поговорить в другой раз. Надеюсь, данная статья будет полезна, хотя ныне настройка среды стала гораздо проще, чем ещё год назад. Удачи!