Stm32 cube ide прошивка

Обновлено: 07.07.2024

STM32Cubeide импортирует проект STM32, сгенерированный Housyun (среда MDK)

Недавно я попробовал оборудование STM32 Accessible Networking Platform на основе Canto Cloud, используя доску разработки, используемую Taobao, закупоренную версию оценки системы STM32 (на основе STM32F103C8T6). Облако метки может автоматически генерировать упрощенную разработку STM32 в соответствии с настройкой устройства, и этот путь великолепен, что может сэкономить много времени. Тем не менее, плохое обновление ST, его официальное разработка IDE к STM32Cubeide, эта IDE - это бесплатная разработка IDE, разработанная Truestudio Truestudio Truestudio (Eclipse) и CubeMx CubeMX CubeChect (Eclipse).

STM32Cubeide является новым в 2019 году, а примерный код, сгенерированный Hubemx и MDK MDK, основан на CubeMx и MDK MDK. Библиотека CubeMX Code основана на F103_Firmware_V1.6 (Cubeide V1.8). Это приводит к некоторым проблемам, следующим образом:

Invalid Input: Must be project’s active .ioc file.
Project’s ‘MCU_STM32F103C8x_source’ active one is ‘MCU_STM32F103C8x_source.ioc’ file

Это связано с тем, что имя файла IOC (STM32F103C8x.ioc) несовместим с именем файла проекта (MCU_STM32F103C8x_Source), и эта проблема исчезает после двух из двух.

Unable to create part
Invalid Input: Must be project’s active .ioc file.
com.st.stm32cube.ide.mcu.ide/META-INF/version/build_ref file not found, build reference will not be reported into properties

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

Я думаю, что кубид по-прежнему отличается от интегрированной CubeMX и независимой установки CubeMx, что приведет к старой версии совместимости файлов IOC, как обновления программного обеспечения, в настоящее время можно пройти только выше способов исправления файла IOC (который Фактически обновляется до последней версии формата), а затем использует Cubeide Integrated CubeMX.

Плата 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).

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

Но, так как этот способ не полнофункциональный с точки зрения внутрисхемной отладки, в дальнейшем речь пойдет о прошивке именно через программатор 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. Конкретно я загружал и устанавливал под форточку, но полагаю интерфейсы программы аналогичны для всех операционных систем.

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

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

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

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

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

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

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

Первым делом, нам нужно объяснить МК откуда им будет получено тактирование во время работы. На платах 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 проверяем внесенные изменения.

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

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

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


Выбираем необходимый микроконтроллер, у меня это всем известный STM32F103C8T6 и жмём Next :


Называем проект и жмём Finish


Включаю последовательную отладку (по SWD - Serial Wire Debug), чтоб использовать ST-LINK

SYS -> Debug -> Serial Wire


Тактирование от внешнего кварцевого резонатора

RCC -> HSE (High Speed Clock) -> Crystal/Ceramic Resonator


Во вкладке настройки тактовой системы вводим 72 МГц и жмём ввод, подтверждаем предложенное решение


Настраиваем вывод PC13 (к нему подключен зеленый светодиод) как двухтактный выход ПКМ на выводе -> GPIO_Output


Далее слева в дереве проекта в папке Src двойной щелчок по главному файлу main.c


Написан простейший код мигания светодиодом (он подключен в выводу PC13 ).

Значение в регистре ODR (Output Data Register) меняется каждый раз благодаря логической операции ИСКЛЮЧАЮЩЕЕ ИЛИ.

Ну, а со стандартной функцией задержки всё и так понятно.

GPIOC->ODR ^= GPIO_ODR_ODR13; // same: HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); HAL_Delay(500); // delay 0.5s

Собираем проект (Ctrl + B) либо щелчок по молоточку. Ошибок и предупреждений нет.


Запускаем отладку ( F11 либо Run -> Debug ). Переключаемся в пространство отладки.


Возможно придется обновить прошивку программатора-отладчика ST-LINK (делается это в два клика) и далее в настройках можно будет его лицезреть.


Прошивка успешно загружается в память микроконтроллера.


Теперь нажимая на кнопки продолжения/паузы смотрим за значениями в нужных регистрах.


В этой программе это регистр выходных данных ODR, бит ODR13, когда там нуль, то СИД светится, когда единица, то нет (т.к. светодиод подключен к плюсу на отладочной плате).


Ну а в железе это вот этот изменяющийся бит выглядит как мигание светодиода:

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



Пример №2: Требуется прототип устройства, который возможно заинтересует заказчика и он закажет 100 шт аналогичных устройств для переоборудования своего объекта. Первая планируемая партия должна быть отгружена заказчику через 2 месяца. Размер первой тестовой партии 10 шт.
Точное ТЗ будет корректироваться в процессе работы над проектом, но известно, что в дальнейшем планируется несколько переработок аппаратной части, под которую необходимо оперативно подстраивать всю прикладную логику.

К обсуждению примеров №1 и №2 вернемся в самом конце цикла статей, а сейчас продолжим с подготовкой рабочего пространства.





На нашей целевой плате установлен микроконтроллер STM32F103C8T6
Введем его название в строке поиска и двойным щелчком выберем единственный найденный вариант
В этой же таблице видно основную начинку нашего МК (64 килобайт флеша, 20 килобайт оперативы и пр).


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


или более красочная и простая для понимания распиновка платы



Продолжаем настройку проекта, переходим к вкладке Clock Configuration
На самом деле это одна из важнейших вкладок, которая позволяет настроить параметры тактирования периферии, но пока не будем здесь ничего трогать, так как главная цель на данный момент не в этом.

Переходим к вкладке Project Manager, под вкладка Project
Обязательно заполняем следующие параметры:
1) Имя проекта (лучше использовать только латинские буквы)
2) Директорию, в которой будет создан проект (так же лучше использовать только латиницу)
3) IDE, в которой планируется работа над проектом (мы планируем использовать TrueSTUDIO)

Спускаемся ниже, под вкладка Code Generator
Здесь обязательно отмечаем опцию Generate peripheral initialization as pair…
Таким образом получим более структурированный проект, в котором для каждого типа периферии имеется своя пара C и H файлов.


Остался последний шаг. Под вкладка Advanced Settings
1) Выбираем тип библиотеки HAL для всех периферийных модулей
2) Собираем проект с текущими настройками


При первоначальном запуске возможно потребуется загрузить актуальную версию библиотеки для выбранного семейства МК
Даем свое согласие на скачивание файлов


Идем греть чайник или готовить кофе



Выбираем любую папку, где Atollic будет хранить рабочее пространство



Найдем там файл main.c и функцию int main(void)



Помогла статья? Поддержи автора, кнопка перевода сверху рядом с меню поиска

Читайте также: