Pull to refresh

ARM-микроконтроллеры STM32F. Быстрый старт c STM32-Discovery

Reading time 5 min
Views 393K
При изучении image любого незнакомого дела, особенно когда речь идет о микроконтроллерах, возникает вопрос — «С чего начать». Ведутся поиски статей по ключевым словам «Getting Started», неизбежно появляется дилема выбора среды разработки и программатора-отладчика. Чтобы помочь вам определиться с ответами на возникшие вопросы, я поделюсь своим опытом в освоении 32-битных контроллеров семейства STM32F от ST Microelectronics.

Выбор контроллера


Вариантов по сути дела было два — STM32F или NXP (LPC1xxx). На микроконтроллеры STM32F мой выбор пал по нескольким причинам.

Во-первых, дешёвая отладочная плата STM32VL-Discovery. Некоторые из вас, кто занимается электроникой, наверняка успели урвать халявную Discovery, бесплатно раздаваемую при участии в конкурсе от EBV-Electronik. Тем, кто не успел подать заявку или вообще не знал о такой возможности, расстраиваться не стоит — плата стоит порядка 500 рублей. Цена более чем доступная.

Во-вторых, сами контроллеры довольно дешёвые. Простейший камень STM32F100C4T6 c 16 килобайтами на борту стоит меньше 40 рублей (!), при этом по характеристикам и периферии уделывает любую «Мегу», которая, кстати, всё равно стоит дороже. Цена на камни старшей линейки с аппаратным USB (STM32F103) тоже вполне гуманна, порядка 120 рублей.

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

LQFP48 Единственное по сравнению с тем же Atmel неудобство для радиолюбителя, это мелкий корпус. Про DIP можете забыть. Единственный доступный корпус — это LQFP с шагом ножек 0.5 мм. Тем не менее, плату при определенной сноровке изготовить ЛУТом не составит труда (об этом мы уже читали), так что мелкий корпус минусом я не считаю. На фото слева — моя плата для корпуса LQFP48.

Пара слов об отладочной плате STM32VL-Discovery: на борту у неё программатор-отладчик ST-Link и отлаживаемый (target) контроллер STM32F100RBT6 (128 кб флеша, 8 кб оперативы). Все выводы разведены на штырьки, имеется два светодиода и кнопка. Разъём SWD отладчика выведен наружу, так что плату можно использовать и как обычный ST-Link. Это нам на руку, не понадобится покупать программатор.

Выбор среды разработки


Здесь не всё так однозначно, как с атмеловской AVR Studio. Вариантов несколько:
  • IAR. Коммерческая. Ограничение по объёму исполняемого кода. Нафиг.
  • Keil. То же самое. Нафиг.
  • Atollic TrueStudio. Основана на Eclipse, но, тем не менее, является коммерческой. В бесплатной Lite-версии ограничения по объёму кода нет, но регулярно выскакивает рекламка «Приобретайте версию PRO». Нафиг.
  • Чистый Eclipse с плагином ARM и компилятором ARM-GCC. Вроде вот оно, кроссплатформенное счастье, но откуда ни возьмись появляется еще более подходящая кандидатура:
  • CooCox IDE (CoIDE). Тоже основана на Eclipse, но бесплатна. Включает в себя всё для работы с ARM, позволяет не отходя от кассы докачивать необходимые библиотеки. Умеет работать с различнями отладчиками (правда не с ST-Link, но это обходится установкой GNU Debugger'a). Единственный минус — сборка есть только под винду. Линуксятникам придется ставить Eclipse и настраивать его руками. Как обычно. Ну да ничего, нам не привыкать.
Что ж, мой выбор сделан. Вы можете его оспорить, предложить писать в блокноте, компилировать мейкфайлами или вообще остановитесь на коммерческих решениях, выступив против священного GCC. Но лично я считаю CoIDE просто идеальной средой разработки, по крайней мере, для быстрого старта. Начните с неё. А там видно будет.

Собственно, Getting Started!


Итак, нам понадобятся:
  1. Плата STM32VL-Discovery
  2. Утилита STM32 ST-Link Utility
  3. Среда разработки CoIDE последней версии (на данный момент это 1.3.0).
Запускаем CoIDE. Нам любезно предлагают выбрать производителя контроллера, затем и сам чип. Выбираем STM32F100RBT6, именно он находится на Discovery. Далее мы видим страницу выбора подключаемых библиотек, которая и сыграла решающую роль при выборе среды разработки:

CoIDE

Здесь есть и библиотека CMSIS для ядра ARM Cortex M3, и STM32 Peripheral Library (библиотека для работы с периферией от ST Microelectronics), а так же собственные разработки CooCox для выбранного микроконтроллера. Нам достаточно лишь отметить галочкой требуемые библиотеки и дело в шляпе. Для простейшей светодиодной моргалки — а именно так выглядит «Hello World» на микроконтроллерах — нам понадобятся CMSIS Core, CMSIS Boot, RCC (управление тактированием периферии) и GPIO (управление портами ввода-вывода общего назначения).

Без лишних пояснений напишу код простейшей программы:

#include <stm32f10x.h>
#include <stm32f10x_conf.h>

#include <stm32f10x_rcc.h>
#include <stm32f10x_gpio.h>

void Delay(volatile uint32_t nCount) {
	for (; nCount != 0; nCount--);
}

int main(void) {
	/* SystemInit() вызывается из startup_stm32f10x_md_vl.c */

	GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

	GPIO_Init( GPIOC , &GPIO_InitStructure);

	while (1) {
		GPIOC->ODR |= GPIO_ODR_ODR9;
		Delay(0x1FFFF);

		GPIOC->ODR &= ~GPIO_ODR_ODR9;
		Delay(0x7FFFF);
	}

	return 0;
}


Компилируем (F7), наблюдаем появившиеся в директории Debug исполняемые файлы — bin, hex, elf.

Прошивка контроллера

Программу мы подготовили, теперь займёмся её загрузкой в чип. Подключаем плату (об установке драйверов пояснять не стану), запускаем ST-Link Utility. Контроллер в Discovery подключен по SWD, поэтому первое, что надо сделать, это переключить режим работы программатора-отладчика с JTAG на SWD:

image

Далее всё прозрачно: меню Target -> Program & Verify… выбираем файл hex, жмём Program и прошивка завершена. Остается только нажать на плате Discovery кнопку Reset — ту, что с черным колпачком — и порадоваться моргающему светодиоду.

image

Поздравляю. Ваша первая программа написана, скомпилирована, прошита в чип и успешно работает. Начало положено, а далее дело за вами: лезем в шаблонный код, как обычно что-то изменяем, дополняем, изучаем новые периферийные устройства, подключаем новые библиотеки. И не забываем читать Reference Manual, в нём масса полезной информации.

Обновление: Начиная с версии 1.3.0 среда разработки CooCox IDE поддерживает ST-Link, поэтому программирование и отладку можно осуществлять прямо из CoIDE, без использования ST-Link Utility. Выбор адаптера через меню Debug -> Debug Configuration (ST-Link, порт SWD). Загрузка программы в контроллер через меню Flash -> Program Download.

На этом всё. Желаю успехов в освоении микроконтроллеров ST Microelectronics.

Полезные ресурсы по теме
Tags:
Hubs:
+48
Comments 64
Comments Comments 64

Articles