Отладочная плата STM32F407VET6 и быстрый старт в Linux

Купил на eBay отладочную плату STM32F407VET6 за 10 баксов. На фото виден подключенный дисплей WH1602 и переходник для прошивки USB - UART.

STM32F407VET6 USB-UART WH1602 Display

Плата достаточно большая, что удобно. Отдельной колодкой выведен UART, запаян часовой кварц, батарейка, flash память. Выведен USB, разъем для microSD карточки. В общем, все что нужно. По сути, данную плату можно использовать как полноценную плату MCU в своих проектах. Особого смысла разводить свою я не вижу.

Как видно из фото, прошиваю STM32 через UART бутлоадер. Можно так же использовать для этих целей USB, но я не стал заморачиватся. В этой статье я опишу быстрый старт в среде Linux.

Устанавливаем ARM Toolchain:

sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install arm-gcc-none-eabi

Cкачиваем GUI утилиту генерации кода STM32CubeMX. Раньше нужно было прибегать к определенным трюкам, что бы запустить ее в linux. Теперь утилита в данной системе доступна из коробки. Настраиваем нужным образом периферию. Перед генерацией кода нужно выбрать Toolchain/IDE SW4STM32.

Скачиваем CubeMX2Makefile скрипт в папку с проектом:

git clone https://github.com/baoshi/CubeMX2Makefile

Получаем Makefile:

python CubeMX2Makefile.py .

Пытаемся скомпилировать проект:

make

Возможны появление ошибок на этапе компиляции или линковки. Например у меня была следующая:

Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:417:1: error: stray "/" in program
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:417:1: error: stray "/" in program
Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c:417:1: error: stray "/" in program

Устраняется редактированием Makefile. Находим строку

C_DEFS = -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))" -DUSE_HAL_DRIVER -DSTM32F407xx

и заменяем строкой

C_DEFS = -DUSE_HAL_DRIVER -DSTM32F407xx

После успешной компиляции нам нужно прошить микроконтроллер. Для этого скачиваем утилиту STM32Flash. Компилируем и устанавливаем в систему:

make
sudo make install

Теперь нужно подключить нашу отладочную плату через преобразователь USB - UART к компьютеру с правильно выставленными перемычками BOOT0 и BOOT1. Нажимаем на RST на плате. Смотрим доступные в системе COM порты:

dmesg | grep tty

Должно быть доступно что то вроде /dev/ttyUSB0. Смотрим, есть ли доступ к STM32:

sudo stm32flash /dev/ttyUSB0

Ну и собственно прошиваем STM32:

sudo stm32flash -b 9600 -v -w build/blinking_led.bin /dev/ttyUSB0

Исходный код blinking led

while (1)
  {
  /* USER CODE END WHILE */
    HAL_Delay(2000);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
    HAL_Delay(2000);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

Переключаем BOOT0 BOOT1, должно поочередно меняется логический ноль на единицу через каждые две секунды. Можно подключить светодиод, и увидеть мигание, или вольтметр.

Быстрый старт STM32 Maple Mini и ChibiOS вместе с ChibiStudio

Если вы занимаетесь разработкой embedded решений, тогда возможно вам будет интересно видео, что ниже. Там показан быстрый старт ChibiOS с отладочной платой STM32 Maple Mini. Как видно, все достаточно просто. Нужно установить ChibiStudio (обьязательно устанавливать на диск C, иначе не будет работать), открываем пример для отладочной платы Maple Mini, компилируем, и прошиваем - у нас готовый USB to COM девайс :)

Важно!. Если у вас затерт оригинальный USB бутлоадер maple mini, нужно в файле Makefile изменить значение USE_MAPLEMINI_BOOTLOADER с 1 на 0.

Ну и на последок, не ради холивара, ответ на вопрос, зачем применять операционные системы в микроконтроллерах? Ведь не православно, нужно экономить ресурсы. Потому что при устройстве на работу, если в конторе построен компетентный процесс разработки, на ваш код не будут смотреть, если вы не используете ОС :) Если отвечать уж совсем развернуто, то:

  • Современные микроконтроллеры достаточно производительны. Эра восьмибитников подходит к концу, и балом начинают править 32 - битные ARM - ы. Сэкономить на производстве не получится, потому что вы не сможете найти камень такой производительности, что бы вам пришлось экономить на разработке.
  • Для Embedded ОС стоят совсем другие задачи, чем перед десктопными. Решение номер один - более высокоуровневое программирование с тасками, потоками и т.п. Если вы посмотрите на embedded код начинающего разработчика, то скорей всего увидите бесконечный цикл, где собственно и написано все взаимодействие с периферией МК, а так же логика. Так вот, это не правильно, потому что как только дело доходит до написания реального приложения, обнаруживается, что такой подход просто не работает. Нужно использовать DMA и прерывания с выдержкой таймингов ... . Ну или использовать ОС :). Решение номер два - HAL (hardware application layer).

Отладочная плата Maple Mini STM32F103

Как настоящий электронщик старой закалки, я всегда все паяю сам вместо того, что бы покупать готовые модули. К примеру, нужен переходник COM - UART, покупаю ST3232, кабель, разьемы, вытравливаю плату, запаиваю микросхему и вуаля - готово. Вместо того, что бы купить за 2$ на eBay или в местном магазине готовый переходник. О потраченом времени лучше умолчать.

Но, время идет, меняются взгляды, привычки. Толи молодость прошла, когда время не сильно и ценилось, толи почасовая оплата труда повлияла, сейчас имеет смысл покупать готовое. Это не просто экономия своего времени, но еще экономия на деньгах. Потому что зачастую стоимость комплектующих в сумме равна стоимости готовой платы, а то еще и дороже. Плюс это нужно еще и собрать. Речь идет о отладочных платах с минимально обвязкой. Но нам больше и не надо, что нужно - подключим.

Ниже показана плата на stm32f103c8t6. Стоит чуть больше чем сама микросхема. Красота, удобно!

maple mini stm32f103

Все выводы подписаны. К примеру, B0 это PORTB0. Остальные - аналогично. Что бы прошить микросхему, нужен переходник USB to UART, потому что великие инжерены ST не смогли написать бутлоадер для USB. Подключаем переходник как показано ниже.

stm32f103 uart bootloader

Подключаем переходник к USB порту компьютера, нажимаем RESET на отладочной плате. Запускаем Flash Loader Demo. Выбираем нужный нам COM порт. Остальные настройки оставляем по умолчанию. Нажимаем Next. Как видим, чип успешно определился.

flash loader demo stm32

Жмем еще раз Next, и еще раз Next. Выбираем файл прошивки. Так же ставим радиокнопку Global Erase. Жмем Next

stm32 uart bootloader flash loader demo

Как видим, чип успешно прошился. Подтягиваем перемычками выводы BOOT0 и BOOT1 на плате к нулю, нажимаем RESET и любуемся миганию светодиода. Это возможно в том случае, если вы скачаете проект ниже :)

flash loader demo

По этой ссылке можно скачать пример проекта на CooCox, который реализует морганием светодиодом наотладочной плате, с периодичностью в секунду. Тут еще много полезной информации по плате.

Частотомер для ГПД на STM32F100

Если в SDR приемнике используется LC ГПД, то весьма полезно обзавестись и частотомером. Ниже показана схема частотомера на STM32F100C4 специально для QuestaSDR

STM32 Frequency Meter

Максимальная измеряемая частота примерно равна 48 МГц. Вход частотомера толерантный к 5 — ти вольтовой логике. Залить прошивку в микроконтроллер можно через UART. Краткая инструкция находится здесь.

Для тестирования частотомера я написал небольшую программку:

STM32 Frequency Meter

Собственно файлы к статье:

Page 1 / 1