Отладочная плата 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, должно поочередно меняется логический ноль на единицу через каждые две секунды. Можно подключить светодиод, и увидеть мигание, или вольтметр.