Как сделать программу под stm32f103
Есть плата stm32f103 с стандартным 4pin SWD интерфейсом и программатор st-link v2. Среда - win7 x64.
Перечитав несколько статей на хабре и кучу всяких формумов, не получается собрать программу для stm32f103. Даже сложно понять какую среду лучше использовать.
Я уже скачал android студию (arduino genuino от arduino.cc), студия собирает какой-то бинарник незнаю для чего, поскольку в выборе нет stm32, надо собирать под android genunio uno (инструменты плата)? Или под что-то другое? Или платформу нужно импортировать?
Пакет arm-none-eabi-* тоже скачал. На хабре (плата и прошивальщик как на картинках хабра по ссылке далее) http://habr.com/ru/post/354670/ вижу пример для ассемблера, а как на с собрать?..
Прошивальщик плату увидел, прошить можно.
12:30:42 : ST-LINK Firmware version : V2J34S7
12:30:42 : Connected via SWD.
12:30:42 : SWD Frequency = 4,0 MHz.
12:30:42 : Connection mode : Normal.
12:30:42 : Debug in Low Power mode enabled.
12:30:43 : Device ID:0x410
12:30:43 : Device flash Size : 128KBytes
12:30:43 : Device family :STM32F10xx Medium-density
Андроид студия плату не видит, меню порт - недоступно, какой программатор выбирать - не понятно. st-link поддерживает студия или нет - не понятно.
Для начала вопрос - как собрать бинарник. И если не сложно - какую среду можно задействовать бесплатную.. (т.к. на формумах ссылки часто битые).
UDP
Бинарник собрать получилось через EmStudio, прошил, начал дебаг, дебаггер дошёл до
bl SystemInit А на SystemInit на самой первой ассемблерной команде (то ли enter то ли что-то такое) - виснет при входе в процедуру, что очень удивило. Буду пробовать другие среды. Может что напутал.
Планирую сделать сокращенную небольшую клавиатуру (84-90 клавишную) с совмещенной раскладкой, так что USB-HID ещё прийдется много почитать. USB - добавляет сложности.
Ответы (2 шт):
STM32 CubeMX: https://www.st.com/en/development-tools/stm32cubemx.html
STM32 Workbench: https://www.st.com/en/development-tools/sw4stm32.html
Обе программы бесплатно, требуется только login.
CubeMX: Запускаете, выбираете вашу плату. Он скачивает все небходимое для вашей платы (firmware package, включая примеры). Делаете конфигурацию (pinout и т.д.). Генерируете код в формате STM32 Workbench.
Открываете проект в STM32 Workbench. Build + Run.
Примеры: запускаете STM32 Workbench. Открываете один из примеров, скачанных с помощью CubeMX (CubeMX Repository). Build + Run.
По сути писать программу и компилировать можно вручную. Среды разработки только лишь помогают это делать.
В этом процессе есть несколько основных шагов:
- Установка тулчейна. Здесь всё довольно просто - ARM предоставляет свой gcc тулчейн
arm-none-eabi. - Описание памяти. Здесь нужно иметь линкер скрипт (.ld файл) Он генерируется IDE, или пишется вручную по даташиту. Этот файл указывает линковщику какие области памяти можно использовать для кода и данных.
- Настройка билд системы. Я рекомендую использовать CMake поскольку процесс там довольно простой, но при желании можно использовать и просто make.
Вот ссылка на простой пример того как можно скомпилировать проект для микроконтроллера используя CMake https://github.com/Teivaz/cmake-stm32
В своем проекте я использую Visual Studio Code с плагином cortex-debug подключенным через openocd для отладки.
Я подробно описал этот процесс в своей статье The Microcontroller and How to Program It Without an IDE.
Следующим шагом будет настройка рантайма си. Там нужно сделать три дополнительных шага - инициализация bss сектора нулями, инициализация data секции и вызов функции __libc_init_array(). Пример можно посмотреть здесь:
https://github.com/Teivaz/zeppelin/blob/master/Modules/Nest/src/boot.c#L9-L52
Затем подключение CMSIS и HAL библиотек. Их можно взять прямо из Cube IDE. Кроме того, CubeMX очень хороший конфигуратор для микроконтроллеров рекомендую использовать его, а потом адаптировать сгенерированный код для вашего проекта.