Как сделать программу под 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 шт):

Автор решения: Alex F

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.

→ Ссылка
Автор решения: Teivaz

По сути писать программу и компилировать можно вручную. Среды разработки только лишь помогают это делать.

В этом процессе есть несколько основных шагов:

  1. Установка тулчейна. Здесь всё довольно просто - ARM предоставляет свой gcc тулчейн arm-none-eabi.
  2. Описание памяти. Здесь нужно иметь линкер скрипт (.ld файл) Он генерируется IDE, или пишется вручную по даташиту. Этот файл указывает линковщику какие области памяти можно использовать для кода и данных.
  3. Настройка билд системы. Я рекомендую использовать 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 очень хороший конфигуратор для микроконтроллеров рекомендую использовать его, а потом адаптировать сгенерированный код для вашего проекта.

→ Ссылка