Установите STM32CubeIDE себе на компьютер (скачать) и запустите среду разработки.
Далее создайте новый проект.
Выберите в списке имеющийся у вас микроконтроллер. Маркировку можно посмотреть на самом чипе. Показывать буду на примере народного среднепроизводительного STM32F103C8T6.
Отладочные платы с данными чипами можно купить на Aliexpress примерно за 300 рублей с доставкой. Платы на STM32F103 получили название BluePill (синяя таблетка). Так как они образно похожи именно на синюю пилюлю (есть еще и черная пилюля BlackPill).
Чип тактируется от 8-мегагерцового кварца. Максимальная частота работы F103 — 72 мегагерц (этого вполне предостаточно). Например, платы Ардуино работают на 14 мегагерцах.
Немного огорчающим фактом является большое наличие подделок этого популярного чипа на рынке. Как правило это перемаркированные китайские копии. Но они вполне рабочие. Полагаю, что для ознакомительных целей и простых устройств их будет вполне достаточно.


Далее откроется встроенный в среду STM32CubeMX (здесь можно подключать периферию, назначать ножки ввода — вывода микроконтроллера, настроить тактирование и многое другое).
Так как почти все отладочные платы имеют на себе кварцевый резонатор для задания опорной частоты работы процессора, первым делом включаем его, как показано на следующем скриншоте.
PS: Можно его и не включать, а использовать встроенный тактовый генератор. Но внешний кварцевый резонатор работает стабильнее и лучше использовать его.
После включения HSE (внешнего кварца) видно, что на схеме задействовались две ножки под него.
То есть, он физически подключен к этим ножкам микроконтроллера.
Переходим во вкладку Clock Configuration и настраиваем частоты, на которых будет работать чип и периферия.
Далее возвращаемся во вкладку Pinout & Configuration.
Теперь настроим самый простой проект мигания светодиодом на плате.
Для этого нужно задействовать всего одну ножку микроконтроллера, которая подключена к светодиоду.
На плате BluePill эта ножка PC13.
Для удобства назовите ее, например, «LED1» так.


Теперь ножка PC13, которая подсоединена физически к светодиоду на плате, задействована, как GPIO_Output (вывод). Далее в коде программы ее можно будет включать и выключать. При ее включении на ней появится напряжение 3.3в, от чего светодиод станет испускать свет, или, просто говоря, засветится. Если ее выключить, то напряжение на ней пропадет и светодиод погаснет.
PS: Если задействовать ножку, как GPIO_Input, то можно будет читать ее состояние соответствующей командой в коде (подано на нее напряжение или нет). Также, почти на всех чипах есть ADC (аналогово — цифровой преобразователь). Его задача мерять напряжение на ножке и записывать измеренное напряжение в переменную для дальнейших операций.
Есть несколько вариантов плат BluePill. Перед использованием лучше ознакомиться с их схематикой. Для подключения светодиода достаточно просто посмотреть на надпись возле светодиода — это будет номер ножки.

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


ВАЖНО: Писать свой код вы можете между USER CODE BEGIN и USER CODE END. Если писать код вне этих блоков, то при следующей генерации кода он затрется.
Вы всегда можете назначить новые ножки и сгенерировать проект, как показано на скриншоте выше.
После запуска микроконтроллера он начинает выполнять свою работу (бесконечный цикл). Спускаетесь по коду ниже и ищите
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */ |

Чтобы диод замигал достаточно написать следующий код
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin,GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin,GPIO_PIN_RESET);
HAL_Delay(1000);
}
/* USER CODE END 3 */ |
Свой код бесконечного цикла пишем после /* USER CODE BEGIN 3 */ и до }
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin,GPIO_PIN_SET); — подает на ножку PC13 с именем LED1 напряжение 3.3v
HAL_Delay(1000); — ожидание 1 секунда (1000 мс). Если нужно мигать быстро, поставьте 100 вместо 1000
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin,GPIO_PIN_RESET); — RESET выключает подачу напряжения и светодиод гаснет.
Все готово.
Теперь подключаем микроконтроллер к программатору ST-Link v2. Сам программатор подключаем по USB к компьютеру и жмем кнопку для загрузки программы в микроконтроллер. При первой загрузке должно появиться крупное окно. Жмите там внизу ok.

После удачной прошивки в нижней части окна должно появиться сообщение «Download verified successfully». Это значит, что программа загружена в микроконтроллер и далее он перезапустится с новой прошивкой.

Если получили ошибку при обновлении программы микроконтроллера, проверьте, правильно ли вы подключили программатор к нему.
Для программирования микроконтроллеров STM32 через ST-Link, как правило, используется всего 4 провода.
GND
SCK или CLK (тактирование)
DIO (передача данных)
3v3 (питание 3.3v)
PS: Бывают случаи, что программатор не может прошить микроконтроллер из-за длинных проводов от него до платы контроллера или длинного USB кабеля.
Оригинальный программатор стоит дорого. Китайские копии работают вполне сносно и стоят от 200 рублей на Aliexpress.
Есть несколько вариантов ST-Link.
Все работают нормально. Тот, что справа — даже обновляется через STM32CubeIDE. Для остальных копий ST-Link V2, как вариант, придется запрашивать обновления у продавца (если они потребуются).






