Найти в Дзене
TDM Lab

STM32 и Cube IDE изучаем с нуля до мастера за rand() дней ч.1 «Первые шаги»

Вот я и подобрался к освоению новых для меня микроконтроллеров STM32. Благодаря своей 32-разрядной ARM архитектуре они конечно наголову опережают своих 8-ми битных собратьев, устанавливаемых на популярные платы Arduino, такие как ATmega328, ATmega32u4, ATmega2560, но, к огромной радости конечного потребителя, стоимость базовых моделей чипов оказывается даже ниже чем у AVR. По факту получается, что базовая плата Blue Pill с чипом STM32F103C8T6 может быть приобретена менее чем за 2$ у друзей из поднебесной. К этому комплекту еще необходим программатор ST-Link V2, и как и для всего остального на него существует максимально дешевая китайская копия. Программатор понадобиться в первую очередь для записи программ и внутрисхемной отладки по интерфейсу JTAG с поддержкой, разработанного ARM протокола SWD (Serial Wire Debug). Кроме использования ST-Link существует возможность записывать программы через выводы A9, A10 платы (ножки 30, 31 USART1 микроконтроллера), для этого понадобиться преобразова

Вот я и подобрался к освоению новых для меня микроконтроллеров STM32. Благодаря своей 32-разрядной ARM архитектуре они конечно наголову опережают своих 8-ми битных собратьев, устанавливаемых на популярные платы Arduino, такие как ATmega328, ATmega32u4, ATmega2560, но, к огромной радости конечного потребителя, стоимость базовых моделей чипов оказывается даже ниже чем у AVR.

Плата Blue Pill STM32F103C8T6 ARM®32-bit Cortex®-M3 CPU Core
Плата Blue Pill STM32F103C8T6 ARM®32-bit Cortex®-M3 CPU Core

По факту получается, что базовая плата Blue Pill с чипом STM32F103C8T6 может быть приобретена менее чем за 2$ у друзей из поднебесной. К этому комплекту еще необходим программатор ST-Link V2, и как и для всего остального на него существует максимально дешевая китайская копия. Программатор понадобиться в первую очередь для записи программ и внутрисхемной отладки по интерфейсу JTAG с поддержкой, разработанного ARM протокола SWD (Serial Wire Debug).

-3

Кроме использования ST-Link существует возможность записывать программы через выводы A9, A10 платы (ножки 30, 31 USART1 микроконтроллера), для этого понадобиться преобразователь USB-UART типа FTDI FT232RL или подобный.

Схема подключения Blue Pill к переходнику USB-UART
Схема подключения Blue Pill к переходнику USB-UART

Но, так как этот способ не полнофункциональный с точки зрения внутрисхемной отладки, в дальнейшем речь пойдет о прошивке именно через программатор ST-Link. Это развяжет нам руки в использовании всего функционала среды разработки. Подключение показано ниже, тут все просто — надо соединить соответствующие выводы: GND→GND; CLK→SWCLK; DIO→SWDIO; 3.3→3.3V

Подсоединение платы Blue Pill к программатору ST-Link
Подсоединение платы Blue Pill к программатору ST-Link

Прежде чем начать предметно разбирать Cube IDE я приведу составленную мной таблицу сравнения характеристик микроконтроллеров от различных базовых плат Arduino c STM32F103C8.

Таблица сравнения некоторых базовых МК AVR с STM32F103
Таблица сравнения некоторых базовых МК AVR с STM32F103

Во многом именно эти числа и побудили меня на изучение гораздо более производительной и функциональной платформы.

Итак, для успешного начала работы нам необходимо скачать установочный файл с официальной страницы CubeIDE на сайте ST. Для скачивания доступно несколько вариантов под Linux, macOS и Windows. Конкретно я загружал и устанавливал под форточку, но полагаю интерфейсы программы аналогичны для всех операционных систем.

-7

На момент написания статьи доступна версия программы 1.3.0, что может нам говорить о том, что некоторые детские болезни ПО уже удалось преодолеть. Это к тому, что CubeIDE сравнительно новая программа, анонсированная в 2019 г., и поэтому у сообщества STM-щиков, естественно, есть настороженность по поводу наличия в ней багов и недоработок.

-8

Кстати, после установки программа предложила себя обновить и после моего согласия версия получилась уже 1.3.1. И хотя я еще не дошел до чтения истории ревизий, могу предположить, что в данном случае это можно считать положительным моментом.

-9

Итак, для создания нового проекта нам потребуется пройти по основному меню: File→New→STM32 Project

-10

После этого мы попадем в меню выбора микроконтроллера и тут наиболее быстрый способ — это написать в строке поиска нужный нам чип, в данном случае STM32F103C8. После того как среда разработки найдет его, в окне появится краткое описание и некоторые параметры его производительности и наличие внутренних модулей.

-11

После нажатия на Next появиться окно с возможностью присвоить название, выбрать рабочий путь проекта, а так же выбрать опции проекта. Для первых шагов пункты опций можно оставить по умолчанию.

-12

Далее IDE может спросить нас об открытии кодогенератора STM32CubeMX, возражать не имеет смысла, он в последствии будет нашим лучшим помощником.

И после этого будет создан наш первый проект, окно будет выглядеть примерно так, и главную площадь будет занимать собственно наш программируемый чип. Графическое представление именно то, что мне особенно понравилось в программировании STM-ок через эту среду.

-13

Первым делом, нам нужно объяснить МК откуда им будет получено тактирование во время работы. На платах Blue Pill установлен кварцевый резонатор с частотой 8 MHz, он уже подключен к выводам PD0, PD1. Чтобы обозначить это для IDE, в разделе System Core заходим в RCC (Reset and clock conrol) выбираем высокоскоростное тактирование (HSE) и далее кварцевый резонатор. После этого соответствующие ноги МК будут подсвечены зеленым с указанием их назначения.

Настройка регистра RCC на внешний кварцевый резонатор.
Настройка регистра RCC на внешний кварцевый резонатор.

В микроконтроллере STM32F103 есть блок фазовой автоподстройки частоты (PLL) он служит для создания основной частоты работы микропроцессора путем умножения частоты внешнего или внутреннего источника тактирования на программно определяемый множитель.

Настройка ФАПЧ и частот внутренних модулей
Настройка ФАПЧ и частот внутренних модулей

Для завершения настройки нам необходимо проверить во вкладке Clock Configuration, что частота HSE установлена в 8 MHz, а частота работы МК составляет 72 MHz.

Для первого нашего проекта мы по классике помигаем установленным на плате светодиодом. Он подключен к выводу PC13. Для его настройки правой кнопкой по выводу выберем GPIO_Output (вывод общего назначения_выход). В разделе настройки GPIO присвоим пользовательское название вывода (User Label) как LED13. В таблице конфигурации GPIO проверяем внесенные изменения.

-16

Теперь дадим команду кодогенератору сформировать файлы проекта на основании тех настроек, что мы сделали.

Инструмент генерирования кода проекта
Инструмент генерирования кода проекта

После этого мы уже можем писать свою программу в файле main.c. Там будут вставлены функции для настройки выводов и тактирования:

Код проекта, сгенерированный CubeMX
Код проекта, сгенерированный CubeMX

Теперь в файле main.c находим функцию main(void) и бесконечный цикл в ней while (1). Это и есть место для нашей первой программы.

Структура файла main.c
Структура файла main.c

Ее код может, например, выглядеть так:

Мигание светодиодом PC13 с периодом 400мс
Мигание светодиодом PC13 с периодом 400мс

HAL_GPIO_WritePin(LED13_GPIO_Port, LED13_Pin, GPIO_PIN_SET);

HAL_Delay(200);

HAL_GPIO_WritePin(LED13_GPIO_Port, LED13_Pin, GPIO_PIN_RESET);

HAL_Delay(200);

Это оказалось возможно благодаря тому, что библиотека HAL имеет в своем составе функцию задержки Delay с заданием аргумента миллисекундах.

После этого можно собрать весь проект через основное меню Project→Build All

-21

И, если все сделано правильно, компилятор сообщит об успехе. Следующим шагом будет загрузка написанной программы в микроконтроллер.

Для этого первым делом нужно установить перемычки на плате в положение программирования flash памяти.

Перемычки в режиме программирования STM32
Перемычки в режиме программирования STM32

После этого нажимаем зеленую кнопку Run main.c и наш скомпилированный код отправится через ST-Link в память МК.

-23

Естественно, при этом программатор должен быть подключен в разъем USB. Если все прошло удачно, то ST-Link помигает своим светодиодом и IDE доложит о успешной загрузке/проверке, и в т.ч. выведет информацию о подключенном программаторе.

-24

Записанный код сразу начнет работать, и мы увидим мигание LED каждые 200мс. После этого перемычки можно привести в положение загрузки из внутренней Flash, и тогда после перезагрузки светодиод опять будет мигает, иначе МК будет ожидать новой загрузки.

Перемычки в положении чтение из Flash STM32
Перемычки в положении чтение из Flash STM32

В общем, на этом основная часть статьи заканчивается, светодиод мигает, а я с Вами получил первый практический и теоретический опыт в программировании крайне популярного микроконтроллера STM32.

В дополнение расскажу пару полезных моментов для общего развития:

-26
  1. Программатор ST-Link содержит в себе такой же чип STM32F103C8T6. Его прошивку можно обновить средствами IDE в разделе Help→ST LINK Upgade

2. Для точного понимания куда чего подключено на Blue Pill лучше всего воспользоваться схемой:

-27

3. Для определения возможных функций выводов МК удобно пользоваться картой выводов:

-28

С наилучшими пожеланиями

Ваш, TDA

30.05.2020