STM32CubeIDE — первое знакомство

Установите STM32CubeIDE себе на компьютер (скачать) и запустите среду разработки.

Далее создайте новый проект.

Создать новый проект в STM32CubeIDE

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

Отладочные платы с данными чипами можно купить на Aliexpress примерно за 300 рублей с доставкой. Платы на STM32F103 получили название BluePill (синяя таблетка). Так как они образно похожи именно на синюю пилюлю (есть еще и черная пилюля BlackPill).

Чип тактируется от 8-мегагерцового кварца. Максимальная частота работы F103 — 72 мегагерц (этого вполне предостаточно). Например, платы Ардуино работают на 14 мегагерцах.

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

STM32CubeIDE target selector


STM32CubeIDE naming a project


Далее откроется встроенный в среду STM32CubeMX (здесь можно подключать периферию, назначать ножки ввода — вывода микроконтроллера, настроить тактирование и многое другое).

Так как почти все отладочные платы имеют на себе кварцевый резонатор для задания опорной частоты работы процессора, первым делом включаем его, как показано на следующем скриншоте.

STM32CubeIDE настройки проекта

PS: Можно его и не включать, а использовать встроенный тактовый генератор. Но внешний кварцевый резонатор работает стабильнее и лучше использовать его.

После включения HSE (внешнего кварца) видно, что на схеме задействовались две ножки под него.

STM32CubeIDE

То есть, он физически подключен к этим ножкам микроконтроллера.

Переходим во вкладку Clock Configuration и настраиваем частоты, на которых будет работать чип и периферия.

STM32F103 настройка тактирования

Далее возвращаемся во вкладку Pinout & Configuration.

Теперь настроим самый простой проект мигания светодиодом на плате.

Для этого нужно задействовать всего одну ножку микроконтроллера, которая подключена к светодиоду.

На плате BluePill эта ножка PC13.

Для удобства назовите ее, например, «LED1» так.

STM32 set led pin


STM32 set led pin


Теперь ножка PC13, которая подсоединена физически к светодиоду на плате, задействована, как GPIO_Output (вывод). Далее в коде программы ее можно будет включать и выключать. При ее включении на ней появится напряжение 3.3в, от чего светодиод станет испускать свет, или, просто говоря, засветится. Если ее выключить, то напряжение на ней пропадет и светодиод погаснет.

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

Есть несколько вариантов плат BluePill. Перед использованием лучше ознакомиться с их схематикой. Для подключения светодиода достаточно просто посмотреть на надпись возле светодиода — это будет номер ножки.


STM32F103 BluePill pinout


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


STM32CubeIDE build project

STM32CubeIDE


ВАЖНО: Писать свой код вы можете между 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 */



STM32CubeIDE


Чтобы диод замигал достаточно написать следующий код

/* 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.

Как прошить STM32


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


Как загрузить программу в микроконтроллер STM32


Если получили ошибку при обновлении программы микроконтроллера, проверьте, правильно ли вы подключили программатор к нему.

Для программирования микроконтроллеров STM32 через ST-Link, как правило, используется всего 4 провода.
GND
SCK или CLK (тактирование)
DIO (передача данных)
3v3 (питание 3.3v)

PS: Бывают случаи, что программатор не может прошить микроконтроллер из-за длинных проводов от него до платы контроллера или длинного USB кабеля.

Оригинальный программатор стоит дорого. Китайские копии работают вполне сносно и стоят от 200 рублей на Aliexpress.

Есть несколько вариантов ST-Link.

ST-Link V2

Все работают нормально. Тот, что справа — даже обновляется через STM32CubeIDE. Для остальных копий ST-Link V2, как вариант, придется запрашивать обновления у продавца (если они потребуются).


1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)

Загрузка...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Optionally add an image (JPEG only)