Обучение на STM32 в массы. Отладочные платы семейства DISCOVERY компании STMicroelectronics. Обзор. Конфигурирование портов микроконтроллера

Общие сведения

На отладочной плате STM32L-Discovery установлен жидкокристаллический индикатор (ЖКИ, англ. LCD. Liquid crystal display), имеющий шесть 14 сегментных знаков, 4 знака двоеточия (Colon), 4 точки (DP), 4 полоски (Bar). Все сегменты объединены в группы СOM0, COM1, COM2, COM3 по 24 сегмента. Каждая группа имеет свой отдельный «общий провод».


На отладочной плате установлен микроконтроллер STM32L152RBT6. В микроконтроллере есть встроенный контроллер ЖКИ, который управляет монохромными жидкокристаллическими индикаторами.
Контроллер ЖКИ:

  1. Позволяет настраивать частоту обновлений (частоту кадров - частота, с которой обновляется информация на ЖКИ)
  2. Поддерживает статический и мультиплексный режим управления
  3. Поддерживает программную установку контраста
  4. Позволяет использовать несколько уровней управляющего напряжения (до четырех)
  5. Использует двойную буферизацию, позволяющую обновлять данные в регистрах LCD_RAM в любое время выполнения программы, не нарушая целостность отображаемой информации

Регистры памяти контроллера ЖКИ

В микроконтроллере STM32L152RB выделены специальные регистры LCD_RAM, информация, хранимая в которых, соответствует группе сегментов COM0 - COM3. Каждой группе соответствует два 32 разрядных регистра. Такое количество регистров позволяет микроконтроллеру управлять ЖКИ c большим количеством сегментов, чем установленным на отладочной плате.

Для управления ЖКИ со 176 сегментами используются 4 группы COM0 - COM3 по 44 сегмента каждая, для управления ЖКИ с 320 сегментами используются 8 групп COM0 - COM7 по 40 сегментов каждая.



На отладочной плате STM32L-Discovery используется ЖКИ с 96 сегментами, разделенными на 4 группы COM0 - COM3 по 24 сегмента каждая.


ЖКИ на отладочной плате STM32L-Discovery подключен таким образом, что используются биты S40, S41 вторых регистров LCD_RAM в каждой группе и биты S0-S27 первых регистров LCD_RAM. Для уменьшения количества используемых регистров, информация из битов S40-S43 будет записываться в свободные биты S28-S31, используя функцию переназначения (remapping).

Блок делителей частоты

Блок делителей частоты (Frequency generator) позволяет добиться различной частоты кадров (frame rates) на ЖКИ в диапазоне от 32 кГц до 1 МГц. В качестве источника тактирующего сигнала могут использоваться:
  1. Внешний НЧ генератор с частотой 32 кГц (LSE. Low speed external)
  2. Внутренний НЧ генератор с частотой 37 кГц (LSI. Low speed internal)
  3. Внешний ВЧ генератор с делителями частоты на 2,4,8 и 16 и максимальной частотой 1 МГц. (HSE. High speed external)
Для достижения точной синхронизации и снижения смещения напряжения постоянного тока через сегменты ЖКИ источник тактирующего сигнала должен обладать стабильностью. Тактирующий сигнал LCDCLK поступает в контроллер ЖКИ. Частота тактового сигнала делится, в соответствии с коэффициентами деления, которые устанавливаются битами PS, DIV регистра LCD_FCR (Frame Control Register). Результирующая частота на выходе блока делителей частоты рассчитывается по формуле:

F ck_div =F LCDCLK / (2 PS *(16+DIV))

Частота кадров рассчитывается по формуле:

F Frame =f ck_div *duty

Где duty – коэффициент заполнения – отношение длительность импульса к его периоду. За время одного кадра на ЖКИ последовательно выводится информация из регистров LCD_RAM[x], LCD_RAM и тд. Для ЖКИ установленного на отладочной плате, за один кадр контроллер ЖКИ должен вывести информацию из 4 групп сегментов COM0 - COM3, следовательно, длительность управляющего импульса для одной группы будет 1/4 длительности кадра, т.е. duty=1/4.

Управление ЖКИ

Существует два способа управления ЖКИ – статический режим управления и мультиплексный режим управления. При статической индикации каждый сегмент разряда индикатора подключен к выходу микроконтроллера. Применительно к ЖКИ, на отладочной плате STM32LDiscovery, потребуется 6*14=84 выводов микроконтроллера (без учета двоеточий, точек и полосок). Из-за использования такого количества выводов, подключение другой периферии станет невозможным. Микроконтроллер STM32L152RB имеет 64 вывода. При мультиплексном режиме управлении (динамический режим управления) одинаковые сегменты разрядов индикатора объединены в группы. Отображение информации происходит за счет поочередного зажигания сегментов разрядов индикатора, с частотой, не воспринимаемой человеческим глазом.

Мультиплексное управление позволяет управлять большим количеством сегментов. Вместо раздельного управления каждым элементом, они могу адресоваться по строкам и столбцам (COM и SEG), таким образом, упрощается управляющая схема, т.к. каждому сегменту не требуется собственная управляющая линия. Для включения выбранного сегмента, на него надо подать разность потенциалов COM и SEG. Пример работы первого разряда индикатора (на индикатор выводится «1:»):


Первый разряд индикатора в момент времени t 0


Первый разряд индикатора в момент времени t 1


Первый разряд индикатора в момент времени t 2


Общая схема подключения сегментов к выводам ЖКИ


Схема подключения выводов ЖКИ к портам микроконтроллера

Для линий SEG используется управляющее напряжение, количество уровней которого определяется коэффициентом bias. ЖКИ на отладочной плате использует мультиплексный режим управления с duty=1/4 и bias=1/3. Значение duty и bias устанавливаются через регистр LCD_CR (Control Register) в битах DUTY и BIAS.

Практика

Конфигурирование портов микроконтроллера

Для управления ЖКИ порты микроконтроллера должны быть настроены соответствующим образом:
  1. На выход
  2. Использование альтернативной функции AF 11 (Alternate function)
  3. Иметь частоты вывода в порт 400 кГц
  4. Использовать режим работы push-pull
  5. Без подтягивающих резисторов
При работе порта в режиме альтернативной функции, выходной буфер данных порта управляется сигналами, поступающими с периферии. Заголовочный файл stm32lxx.h библиотеки CMSIS содержит описание всех регистров периферии, а также структуры доступа к ним.

Выводы ЖКИ подключены к портам GPIOA (PA1-PA3,PA8-PA10,PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3,PC6-PC11) микроконтроллера. Для работы ЖКИ, на выбранные порты необходимо подать тактовый сигнал. Тактирование портов GPIO микроконтроллера происходит от шины AHB системы RCC (Reset and Clock Control) – системы тактировании и сброса. Подача тактового сигнала осуществляется установкой соответствующих битов в регистре RCC_AHBENR (AHB peripheral clock enable register).

Регистр RCC_AHBENR (на рисунке приведены первые 15 разрядов)

Для портов GPIOA, GPIOB, GPIOC необходимо установить 1 в 0, 1, 2 разряды регистра.

Далее я буду приводить код записи информации в регистр с использованием битмаски и с использованием шестнадцатеричных кодов. Использование битмасок удобнее, но работа с шестнадцатеричными кодами позволяет понять суть работы с регистрами.

RCC->AHBENR |=(RCC_AHBENR_GPIOAEN|RCC_AHBENR_GPIOBEN|RCC_AHBENR_GPIOCEN); или RCC->AHBENR = 0x7; /* 0x7=111 */

Для указания режимов работы порта используется регистр GPIOx_MODER (GPIO port mode register) (x = A..H). Все разряды регистра сгруппированы в группы MODERy, где y номер пина соответствующего порта. Порты необходимо настроить на режим альтернативной функции, т.е. в группе, отвечающей за пин, установить значение 10. Для порта GPIOA нужно настроить пины 1-3,8-10,15, т.е установить 1 в 3,5,7,17,19,21,31 разряды.


Регистр GPIOx_MODER (GPIO port mode register)

GPIOA->MODER |= (GPIO_MODER_MODER1_1 | GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1 | GPIO_MODER_MODER8_1 | GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1 | GPIO_MODER_MODER15_1); или GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
Порты микроконтроллера необходимо перевести в режим push-pull. Для этого необходимо в регистре GPIOx_OTYPER (GPIO port output type register) установить 1 в разряды, отвечающие за пины.


Регистр GPIOx_OTYPER (GPIO port output type register)

GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_1 | GPIO_OTYPER_OT_2 | GPIO_OTYPER_OT_3 | GPIO_OTYPER_OT_8 | GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10 | GPIO_OTYPER_OT_15); или GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
Оба варианта воздействуют на выбранные пины. (Для порта GPIOA настраиваются пины 1-3,8-10,15). Если необходимо перевести все пины порта в режим push-pull, можно записать в регистр значение:
GPIOA->OTYPER = 0x0;
Для указания частоты вывода информации в порт используется регистр GPIOx_OSPEEDR (GPIO port output speed register). Все разряды регистра сгруппированы в группы OSPEEDRy, где y номер пина соответствующего порта. В данной работе должна быть установлена частота 400 кГц т.е. в группе, отвечающей за пин, установить значение 00.


Регистр GPIOx_OSPEEDR (GPIO port output speed register)

GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPIO_OSPEEDER_OSPEEDR10 | GPIO_OSPEEDER_OSPEEDR15); или GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Если необходимо установить частоту вывода в порт 400 кГц для всех пинов, можно записать в регистр значение:
GPIOA->OSPEEDR = 0x0;
Для отключения подтягивающих резисторов pull-up, pull-down для выбранных пинов используется регистр GPIOx_PUPDR (GPIO port pullup/ pull-down register). Все разряды регистра сгруппированы в группы PUPDRy, где y – номер пина соответствующего порта. Для отключение подтягивающих резисторов в группе, отвечающей за пин, устанавливается значение 00.


Регистр GPIOx_PUPDR (GPIO port pull-up/pull-down register)

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR15); или GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Если необходимо отключить подтягивающие резисторы для всех пинов, можно записать в регистр значение:
GPIOA->PUPDR = 0x0;
Для использования альтернативной функции для портов микроконтроллера используются два регистра GPIOx_AFRL (GPIO alternate function low register), отвечающий за младшие пины (с 0 по 7) и GPIOx_AFRH (GPIO alternate function high register), отвечающий за старшие пины (с 8 по 15). Все разряды регистров сгруппированы в группы AFRLy и AFRHy, где y – номер пина соответствующего порта. Порты должны быть настроены на использование альтернативной функции AF11, для этого в группе, отвечающей за пин, должно быть установлено значение 1011.


Регистр GPIOx_AFRL (GPIO alternate function low register)


Регистр GPIOx_AFRH (GPIO alternate function high register)

Для этого необходимо записать в регистры значения:
GPIOA->AFR = 0xBBB0; /* 0xBBB0 = 1011 1011 1011 0000*/ GPIOA->AFR = 0xB0000BBB; /* 0xB0000BBB=1011 0000 0000 0000 0000 1011 1011 1011*/

AFR = 0xBBB0 – записывает значение в регистр GPIOx_AFRL.
AFR = 0xB0000BBB – записывает значение в регистр GPIOx_AFRH.

Настройки соответствующих пинов портов GPIOB, GPIOC производятся аналогично.

Настройка контроллера ЖКИ

При работе с контроллером ЖКИ, как и с другой периферией, на него необходимо подать тактовый сигнал. Тактовый сигнал также подается на систему управления питанием. Контроллер и система управления питанием для тактирования используют шину APB1. Для разрешения тактирования в регистре RCC_APB1ENR (APB1 peripheral clock enable register) необходимо установить 1 в 9 и 28 разрядах.


Регистр RCC_APB1ENR (APB1 peripheral clock enable register)

RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; или RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
Для работы контроллера ЖКИ необходимо указать источник тактовых сигналов. Источник указывается в регистре RCC_CSR. По умолчанию запись в этот регистр запрещена. В регистре управления питанием PWR_CR (PWR power control register) снимается защита от записи в регистр RCC_CSR. Регистр RCC_CSR управляет источниками тактирования часов RTC и контроллера ЖКИ
Запись в регистр RCC_CSR разрешается установкой 1 в 8 разряд регистра PWR_CR.


Регистр PWR_CR (PWR power control register)

PWR->CR |= PWR_CR_DBP; или PWR->CR |= 0x100; /* 0x100 =1 0000 0000 */
Для смены источника тактирования контроллера ЖКИ (и часов RTC тоже) необходимо сначала выполнить сброс источника тактирования установкой бита RTCRST (установкой 1 в 23 разряд) в регистре RCC_CSR (Control/status register).


Регистр RCC_CSR (Control/status register)

RCC->CSR |= RCC_CSR_RTCRST;
Или записав в регистр значение, используя оператор «|=», т.к. значение по
умолчанию регистра отлично от 0x0:
RCC->CSR |= 0x800000; /* 0x800000 = 1000 0000 0000 0000 0000 0000 */
Для выбора нового источника тактирования необходимо убрать бит RTCRST:
RCC->CSR &= ~RCC_CSR_RTCRST; или RCC->CSR &= ~0x800000;
В качестве источника тактового сигнала выбирается внешний НЧ генератор. Для включения генератора в регистре RCC_CSR необходимо установить бит LSEON (установить 1 в 8 разряд):
RCC->CSR |= RCC_CSR_LSEON; или RCC->CSR |= 0x100; /* 0x100 = 1 0000 0000 */
После включения генератора необходимо некоторое время на его стабилизацию. Готовность генератора проверяется аппаратной установкой бита LSERDY в регистре RCC_CSR:
while(!(RCC->CSR&RCC_CSR_LSERDY));
Выбор внешнего НЧ генератора в качестве источника тактового сигнала осуществляется установкой в группе RTCSEL регистра RCC_CSR значения 01:
RCC->CSR |= RCC_CSR_RTCSEL_LSE; или RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
В контроллере ЖКИ необходимо установить нужный режим bias. Для этого в регистре LCD_CR (LCD control register) необходимо установить значение 10 в группу BIAS. Перед установкой бит необходимо очистить биты от «мусора».


Регистр LCD_CR (LCD control register)

Сброс битов:
LCD->CR &= ~LCD_CR_BIAS; или LCD->CR &= ~0x60;
Выбор режима bias=1/3 с использованием битмаски:
LCD->CR |= LCD_CR_BIAS_1; или LCD->CR |= 0x40;
Устанавливаем режим duty=1/4. Для этого также вначале сбрасываем все биты:
LCD->CR &=~LCD_CR_DUTY; или LCD->CR &= ~0x1C;
Устанавливаем значение 011 в группу DUTY регистра LCD_CR для
режима duty=1/4:
LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; или LCD->CR |= 0xС;
Активируем функцию переназначения выводов. Для этого устанавливаем 1 в 7 разряд регистра LCD_CR:
LCD->CR |= LCD_CR_MUX_SEG; или LCD->CR |= 0x80;
Устанавливаем значения коэффициентов деления частоты тактового сигнала LCDCLK. Значения коэффициентов выставляются в регистре LCD_FCR (LCD frame control register). Вначале также очищаем все биты, затем устанавливаем нужные.


Регистр LCD_FCR (LCD frame control register)

LCD->FCR &= ~LCD_FCR_PS; LCD->FCR &= ~LCD_FCR_DIV; или LCD->FCR &= ~0x3C00000; LCD->FCR &= ~0x3C0000;
Значения коэффициентов деления частоты тактового сигнала устанавливаем равными ck_ps = LCDCLK/16, ck_div = ck_ps/17. Для этого устанавливаем 1 в 24 и в 18 разряды:
LCD->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
Для установки нужного уровня контраста необходимо установить значение 010 в группу СС, так же предварительно очистив биты от старых значений:
LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; или LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
После установки всех значений необходимо некоторое время на синхронизацию регистра LCD_FCR. Синхронизация регистра проверяется аппаратной установкой бита FCRSF в регистре LCD_SR (LCD status register).

Регистр LCD_SR (LCD status register)

While(!(LCD->SR&LCD_SR_FCRSR));
В качестве источника напряжения для ЖКИ выбираем внутренний step-up converter для формирования V lcd . Для этого в первый разряд регистра LCD_CR (LCD control register) устанавливается значение 0:
LCD->CR &= ~LCD_CR_VSEL; или LCD->CR &= ~0x2;
Разрешение работы ЖКИ контроллера происходит установкой 1 в 0 разряд регистра LCD_CR (LCD control register):
LCD->CR |= LCD_CR_LCDEN; или LCD->CR |= 0x1;
После установки в качестве источника напряжения внутреннего step-up converter, необходимо дождаться его готовности. Готовность проверяется аппаратной установкой бита RDY в регистре LCD_SR (LCD status register):
while(!(LCD->SR&LCD_SR_RDY));
После разрешения работы контроллера ЖКИ, необходимо дождаться его готовности. Готовность проверяется аппаратной установкой бита ENS в регистре LCD_SR (LCD status register):
while(!(LCD->SR&LCD_SR_ENS));

Формирование изображения на ЖКИ

Все сегменты индикатора объединены в группы COM0 - COM3 по 24 сегмента в каждой (SEG0-SEG23). Информация о сегментах хранится в регистрах LCD_RAM памяти контроллера ЖКИ. Разводка печатной платы такова, что номера сегментов не соответствуют номерам разрядов регистров LCD_RAM.

Что бы отобразить 1 в первом разряде ЖКИ, необходимо зажечь сегменты 1B,1C. Сегмент 1B принадлежит группе COM0, сегмент 1C принадлежит группе COM1. Следовательно информация о них должна быть записана в регистры RAM (LCD_RAM0), RAM (LCD_RAM2) соответственно. За сегмент 1B отвечает вывод ЖКИ LCDSEG22, информация о котором храниться в разряде SEG40 регистра RAM (LCD_RAM1). С использованием функции переназначения за сегмент LCDSEG22 будет отвечать разряд SEG28 регистра RAM (LCD_RAM0). За сегмент 1С отвечает вывод ЖКИ LCDSEG1, информация о котором храниться в разряде SEG1 регистра RAM (LCD_RAM2).

LCD->RAM= 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0x2= 10 */
До записи значений в регистры памяти необходимо проверить завершена ли предыдущая передача данных на ЖКИ. Для этого проверяется бит UDR (Update display request) регистра LCD_SR (LCD status register). Контроллер ЖКИ имеет два выходных буфера, информация заносится в первый буфер, а выводится на ЖКИ из второго буфера. Бит UDR устанавливается во время передачи из первого буфера во второй, защищая от записи регистры LCD_RAM:
while(LCD->SR & LCD_SR_UDR);
После записи информации в регистры LCD_RAM необходимо установить бит UDR в регистре LCD_SR (LCD status register)(установить 1 во 2 разряд):
LCD->SR |= LCD_SR_UDR; или LCD->SR |= 0x4; /*0x4 = 100 */

Отладочные платы STM32F103/F446

Здравствуйте!

Представляю 2 отладочные платы которые можно сделать ЛУТ-ом на 1-стор. ПП:

STM32F446RE(LQFP-64)

STM32F103CB(LQFP-48)

В скорем времени будет еще одна, F405, она и на фото.

П.С. В реальности не так страшно выглядит)

Не буду расписывать х-ки самих МК, скажу лишь что 103-тий - довольно простенький, но вполне хороший МК, а 446-ой уже напичканный до отвалу(есть и по старше конечно...). Вся более конкретная информация находится в ДШ(тоже прилагаются)

Оговорюсь сразу, если есть возможность купить Discovery или, к примеру, NUCLEO - то безоговорочно лучше так и сделать!

Так вот, обе отладки идентичные с одной лишь разницей - размер LCD.

Одну я делал дабы по играться с СТМ пока не дошел до игрушки nrf24l01(радиомодуль 2,4GHz, кстати стоит копейки, а штука классная), и тут я понял что надо делать вторую, ибо с одного SPI на другой SPI в одном МК отправлять вроде как не интересно:D

В общем, характеристики отладочных плат:

МК STM32F103CB/STM32F446RE

LCD HD44780 1602/2004 + PCF8574(переходник на I2C)

На борту I2C EEPROM 24Cxx(на той же линии что и LCD)

Кнопка ресет

Батарейка CR2032 для Backup регистров

Кварцевые резонаторы 32768 и HSE(тактирование самого ядра)

USB разъем подключен на USB FS МК(+ USB enable на порте PA15(!!!Внимание, надо ремапить, GPIO_Remap_SWJ_JTAGDisable(отключаем JTAG, шьемся через SWD)))

Питание от программатора или от USB(стоит LDO AMS1117).

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

ВСЕ НОМИНАЛЫ деталек отмечены на ПП в Sprint Layout.

По деталькам:

Резисторы/конденсаторы 0805 и 1206

Разъемы: USB type B, держатель под батарейку стандартный взят из мат. платы, все гребенки - PLS с шагом 2.54мм

Транзистор на USB EN - BC808/BC858 или что угодно тому подобное в корпусе SOT23-3

EEPROM 24Cxx в корпусе SO-8

LDO 1117-ADJ с впаянными номиналами как в Sprint layout или 1117-3.3 но 200R не впаивать, а вместо 330R - перемычку.

Кварцы - 32768 - часовой(мелкий), HSE(HC49) 4-16MHz для STM32F103CB и 4-26Mhz для STM32F446RE

Светики 0805 на ваше усмотрение)))

По поводу ПП:

Ну когда я говорил что ПП односторонняя я немного соврал. На верхней стороне довольно колхозные перемычки нарисованные в SL слоем K2, хотя если есть желание - можете и 2-ым слоем сделать, но я не стал заморачиваться ради соединения 5 точек.

Для крепления LCD я чуть-чуть напильником сточил плату по бокам ПП(напротив отверстий LCD) и стянул стяжками.(на STM32F446RE чуть текстолита не хватило и садил на термоклей верхнюю часть)). Хотя как и что крепить - это тоже решать вам)

Далее привожу 2 "легенды" самих отладок(вордовские документы, снизу всего лишь пример), советую распечатать их, и в процессе работы рисовать ручкой/маркером любые пометки что да как. Когда же место закончится - все свои пометки перенести в вордовский док. и снова распечатать)

STM- Discovery: Через тернии - к звёздам.

Огромная номенклатура активных электронных компонентов, выпускаемых мировыми производителями, требует сегодня наличия широкого спектра оценочных и отладочных средств, необходимых для быстрого принятия решений о возможности применения в проекте того или иного компонента. Из-за высокой конкуренции на рынке современной электроники любая задержка с таким выбором может привести к потере временных и материальных ресурсов. Особое положение в этом вопросе занимают такие компоненты, как микроконтроллеры (МК). Быстро разобраться с многочисленными семействами, их возможностями и, главное, на практике убедиться в оптимальности сделанного выбора сегодня практически невозможно без применения оценочных и отладочных плат.

В этом обзоре будут рассмотрены отладочные средства одного из самых ярких разработчиков и производителей микроконтроллеров - компании ST Microelectronics (STM). Компания выпускает широкую номенклатуру 8-битных и 32-разрядных микроконтроллеров, в которые заложен передовой опыт STM в области архитектуры МК, технологии, производства и много др. В портфолио продукции компании можно найти широкий спектр микроконтроллеров от надежных бюджетных 8-битных до производительных 32-битных МК с ARM ядрами: Cortex®-M0, Cortex®-M0+, Cortex®-M3, Cortex®-M4 и Cortex®-M7 с большим выбором периферии. В линейке имеются также и сверхмалопотребляющие микроконтроллеры. На рис. 1 показан весь спектр микроконтроллерной продукции компании ST Microelectronics.

Рис. 1. Микроконтроллерная продукция ST Microelectronics

Вначале рассмотрим отладочные платы семейства discovery для 8-битных микроконтроллеров.

Микроконтроллеры STM8 до сих пор востребованы на рынке современной электроники. Они широко применяются там, где необходимы простые бюджетные, и вместе с тем, гибкие и эффективные решения. Отладочные платы семейства Discovery (см. Таблицу 1) на основе STM8 предназначены для быстрой оценки возможностей 8-битных МК, среди которых сверхмалопотребляющий STM8L, МК общего назначения из основной линейки (Mainstream) STM8S, а также МК семейства Value Line STM8SVL.

Отладочные платы STM8X(XX)-Discovery имеют ряд общих особенностей. Все выводы микроконтроллеров доступны на специально установленных разъемах. Сами микроконтроллеры имеют корпуса LQFP48 (STM8S и STM8L) и LQFP32 (STM8SVL). На каждой плате установлены 1-2 пользовательских светодиода и кнопки, а также в каждое изделие встроен программатор/отладчик ST-Link с поддержкой интерфейса SWIM. ST-Link можно использовать для работы с внешними микроконтроллерами.

Платы подключаются к PC через интерфейс USB. Необходимое питание 5 В или 3.3 В. На плате STM8L-Discovery установлен 7-сегментый LCD в корпусе DIP28, а в отладках с STM8S и SM8SVL имеется монтажное поле, которое пользователь может применить для собственных приложений. Кроме того, на STM8S-Discovery установлена пользовательская сенсорная кнопка. В Таблице 1 приведены некоторые параметры МК, а по ссылке можно перейти к более подробному описанию отладочных плат и МК.

Таблица 1.

Наименование

Микроконтроллер

Частота, MHz

Для оценки возможностей 8-битных микроконтроллеров STM8AF и STM8AL для автомобильных приложений компания ST Microelectronics выпускает комплект STM8A-Discovery, полное описание которого можно найти на сайте производителя .

Отладочные платы семейства discovery для 32-битных микроконтроллеров

STM32 Discovery - это недорогое комплексное решение для оценки выдающихся возможностей 32-разрядных микроконтроллеров с ARM Cortex-Mx STM32. Все отладочные платы имеют необходимую инфраструктуру, позволяющую демонстрировать специфические характеристики устройств, а HAL библиотека и комплекс программных примеров позволяют воспользоваться всеми преимуществами изделий. Разъемы расширения, установленные на платах, открывают доступ к большинству выводов I/O микроконтроллера и делают возможным функциональное расширение за счет подключения дополнительных плат.

Рис. 2. Отладочные платы семейства discovery

В Таблице 2 приведены основные параметры микроконтроллеров, на основе которых выпускаются соответствующие отладочные платы семейства STM32 Discovery, а также особенности некоторых плат этого семейства. По ссылкам можно легко перейти как к описанию самой отладочной платы, так и к подробному описанию установленного на ней микроконтроллера.

Таблица 2.

Наименование отладочной платы

Особенности

3-осевой гироскоп L3GD20

2.04” E-paper дисплей 172x72 пикселя

ЖКИ 24х4 сегмента

3-осевой гироскоп L3GD20, 3-осевой акселерометр и магнитометр LSM303DLHC, всенаправленный микрофон MP45DT02 и аудио ЦАП с усилителем D-класса CS43L22

2.4" QVGA TFT ЖКИ, 64 Мбит SDRAM, 3-осевой гироскоп L3GD20

4.3" 480x272 цветной TFT ЖКИ, 128 Мбит Flash, 128 Мбит SDRAM, Ethernet, USB OTG HS, USB OTG FS, 2 цифровых микрофона MP34DT01TR

Заметим, что на каждой плате STM32 Discovery установлен программатор/отладчик ST-Link/V2 или ST-Link/V2-1, который также можно использовать в качестве отдельного программатора для внешних устройств. Все выводы микроконтроллера доступны на разъемах платы. Питание осуществляется через шину USB или от внешнего источника. На платах установлены: светодиоды - статусные (т.е. индицирующие состояние питания, обмена данными и т.д.) и пользовательские, кнопки сброса МК и для задач пользователя. Кроме того, на ряде плат имеются MЭMC датчики - акселерометры, гироскопы, микрофоны и др., а также средства визуализации, такие как TFT и E-Ink дисплеи, сегментные ЖКИ.

Используя многофункциональные выводы микроконтроллера, различное программное обеспечение, включая бесплатное, например, STM32Cube, HAL библиотеки и др., можно быстро оценить возможности того или иного микроконтроллера и эффективно провести разработку целевого приложения. Семейство плат поддерживается многими широко известными интегрированными средами разработки - IAR Embedded Workbench, MDK-ARM (Keil), TrueStudio (Atollic) и др.

Обзор составил и подготовил
Шрага Александр,
a.

Компания ST раздаёт дешёвые отладочные платы для знакомства с их микроконтроллерами. Наверняка и вы начнёте с них - поэтому я рассмотрю основные платы Discovery, чтобы вы могли выбрать себе по вкусу.

STM32VLDiscovery

Самая первая плата семейства, раньше называлась просто STM32Discovery. Именно с неё началась экспансия ST на рынок дешёвых и мощных микроконтроллеров общего назначения, этим объясняется её неприлично низкая цена - демпинг цен на эту плату принёс ST прибыль в виде множества новых адептов.

Начинка

  • Отладчик - ST-Link, SWD-коннектор наружу
  • Процессор - STM32F100RBT6 (24МГц, 128кБ флеш, 48кБ RAM)
  • 2 кнопки - юзерская и резет
  • 2 светодиода
  • сменный (!) тактовый кварц
  • часовой кварц
  • 62 контакта на гребёнке выводов, из них 51 контакт ввода-вывода
  • перемычка для определения потребляемого тока

Как видим, довольно мощная плата. Вкупе с низкой ценой (а многие, как и я, получили её бесплатно на семинарах) она произвела настоящий фурор.

К плате прилагается множество примеров использования разной периферии, и неплохой «Master project», прошитый по умолчанию.

Скачать примеры для STM32VLDiscovery .

STM32F4Discovery

Очень сильная плата, как по мощности процессора так и по количеству периферийного оборудования. Процессор класса STM32F4 имеет высокую скорость работы, множество периферии вроде контроллеров памяти/дисплеев/камеры и всевозможными USB, CAN и прочими интерфейсами, а также полноценные модули FPU и DSP. Замечательный процессор, на нём сделано довольно много из моих приборов.

Начинка

  • Процессор - STM32F407VGT6 (168МГц, 1МБ флеш, 192кБ RAM)
  • 2 кнопки - юзерская и резет
  • 4 светодиода
  • сменный тактовый кварц
  • 100 контактов на гребёнке, из них 80 контактов ввода-вывода
  • перемычка для измерения тока
  • MEMS-акселерометр LIS302DL
  • Цифровой микрофон MP45DT02
  • Аудио-АЦП CS43L22 с усилителем D-класса
  • micro-USB-коннектор

Конечно, стоит дороже - но и возможностей имеет куда больше. Прекрасная плата, удобная и мощная. В основном на ней я проводил эксперименты со звуком, с шинами CAN и USB, и акселерометром. Наличие DSP-ядра даёт возможность производить цифровую обработку аудиосигналов и навигации. Помимо перечисленной периферии, на кристалле присутствуют также модули вычисления CRC (контрольные суммы), HASH (хеш данных), CRYPT (криптография) и RNG (генератор случайных чисел).

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

Скачать примеры для STM32F4Discovery .

STM32F3Discovery

Столь же хорошая плата, но с ещё более новым процессором серии STM32F3, и явной направленностью на навигационные применения и Sensor Fusion. Похоже, её сделали на росте популярности квадрокоптеров, которым нужен как раз такой набор датчиков положения. Также, видимо, инженеры услышали просьбы разработчиков и сделали USB в виде обычного mini-USB.

Начинка

  • Отладчик - ST-Link/V2 с расширенным SWD-коннектором
  • Процессор - STM32F303VCT6 (72МГц, 256кБ флеш, 48кБ RAM)
  • 2 кнопки - юзерская и резет
  • 8 светодиодов
  • 100 контактов на гребёнке, из них 86 контактов ввода-вывода
  • перемычка для измерения тока
  • MEMS-акселерометр/магнитометр LSM303DLHC
  • MEMS-гироскоп L3GD20
  • mini-USB-коннектор

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

К возможностям процессора стоит добавить умножение за 1 такт и железное деление, модули вычисления CRC (контрольные суммы), HASH (хеш данных), CRYPT (криптография) и RNG (генератор случайных чисел), а также расширенные аналоговые возможности - 4 ОУ с изменяемым коэффициентом усиления, увеличенное количество (4 штуки) 12-бит АЦП и 7 компараторов. Это делает STM32F3 настоящим DSP, с отличным аналоговым интерфейсом.

На этой плате я также сделал довольно много приборов.

Скачать примеры для STM32F3Discovery .

STM32F0Discovery

Самая свежая отладочная плата - на младшем процессоре серии STM32F0.

Начинка

  • Отладчик - ST-Link/V2 с расширенным SWD-коннектором
  • Процессор - STM32F051R8T6 (48МГц, 64кБ флеш, 8кб RAM)
  • 2 кнопки - юзерская и резет
  • 2 светодиода
  • 66 контактов на гребёнке, из них 55 контактов ввода-вывода
  • перемычка для измерения тока

Эта плата интересна в первую очередь своей дешевизной и применением процессора из младшего семейства. Ведь даже самый слабый процессор ST/ARM всё равно во много раз мощнее привычных AVR и PIC, а стоит даже дешевле. Более того, здесь есть модули CRC, аналоговые компараторы и контроллер сенсорных кнопок.

Скачать примеры для STM32F0Discovery .

На основе ядра Cortex начали активно набирать популярность, как среди профессиональных, так и среди начинающих разработчиков устройств на микроконтроллерах. Причин тому несколько:
- невысокая цена по сравнению с конкурентами;
- большое количество встроенных интерфейсов;
- простота в программировании и высокая надежность.
Но при этом есть и один важный недостаток – все микроконтроллеры STM не выпускаются в DIP корпусах, что зачастую просто отпугивает новичков, ведь изготовить плату с дорожками менее 0,3мм в домашних условиях проблематично. Такое положение дел привело к появлению на рынке огромного количества отладочных плат, как от ST Microelectronics (Discovery), так и платы, выпущенные сторонними фирмами (Olimex, Pinboard). Мой выбор пал на Discovery по трем причинам:
- относительно невысокая цена (плату можно купить от 300р.);
- хорошее качество исполнения (хотя некоторые претензии к разводке есть, но они не столь существенны);
- много исходников и примеров выложено на сайте производителя;
- наличие встроенного программатора (вам не придется покупать его отдельно).
Цель первого урока – помочь начинающему разработчику выбрать отладочную плату, а в дальнейшем - научить основам программирования.
Итак, поехали.

STM32F0DISCOVERY

Данная плата была выпущена в феврале 2012 года с целью привлечения разработчиков, ранее использовавшие 8-ми битные микроконтроллеры, тем самым заняв эту нишу. Ничего плохого, как и хорошего, о ней сказать не могу. Обычная плата, недорогая, для начала подходит отлично. Имеет следующие характеристики:
- микроконтроллер: STM32F051R8T6 (Cortex M0, 48МГц, flash 64Кб, RAM 8Кб);
- встроенный ST-link/V2, который можно использовать отдельно от платы;
- питание от USB или от внешнего источника 3/5В;
- 4 светодиода и 2 кнопки;
- интерфейсы: USART, SPI, I2C, HDMI;
- таймеры 16 и 32 бит;
- все выводы выведены на две однорядных гребенки.
Собственно такая плата уже достаточно устарела, и брать ее рекомендуется только для самого начала обучения.

STM32VLDISCOVERY

Отличается от предыдущей платы только процессором STM32F100RBT6B (Cortex M3, 24МГц, flash 128Кб, RAM 8Кб) и разводкой гребенок периферии. Так же как и выше рассмотренная подходит для начинающих разработчиков. Больше о ней сказать и нечего.

STM32LDISCOVERY

STM32LDISCOVERY достойный результат эволюции предыдущей платы. Вот что в ней есть интересного:
- микроконтроллер STM32L152RBT6 (Cortex M3, 32МГц, flash 128Кб, RAM 8Кб, EEPROM 4Кб)
- интерфейсы: USB, USART, SPI, I2C;
- 8 таймеров;
- 24-канальный 12-битный АЦП;
-12-битный ЦАП;
- часы реального времени;
- контроллер LCD 8х40
- встроенный ST-link/V2.
На плате установлены:
- LCD дисплей 24х8;
- 4 светодиода;
- 2 кнопки;
- сенсорная клавиатура;
- 2 однорядные гребенки со свободными выводами.
О USB хочется сказать отдельно: контроллер поддерживает USB 2.0 full speed, режимы host и device, что нечасто встретишь у МК такого класса.
По сути плата оптимальный вариант для работы с ядром Cortex-M3, так что можно смело брать, благо цена невысокая.

STM32F3DISCOVERY

STM32F3DISCOVERY относится к следующему поколению отладочных плат от STM и обладает следующими характеристиками:
- микроконтроллер STM32F303VCT6 (Cortex M4, 72МГц, flash 256Кб, RAM 48Кб)
- часы реального времени;
- встроенный ST-link/V2;
- 13 таймеров;
- 12 канальный DMA контроллер;
- 4 АЦП;
- 4 операционных усилителя;
- интерфейсы: CAN, USB 2.0, USART/UART, SPI, I2C;
- 87 линий GPIO.

- пользовательский USB-порт;
- 3-х осевой акселерометр и 3-х осевой геомагнитный сенсор в одном корпусе;
- 3-х осевой гироскоп;
- 10 светодиодов;
- 2 кнопки;
- 2 двухрядные гребенки.
Очень интересная плата, много возможностей для опытов. В целом мнение о ней осталось хорошее, но ее заточенность под отслеживание физического состояния и положения сильно сокращают простор для экспериментов, хотя легко можно самому сделать плату расширения.

STM32F4DISCOVERY

С этой платой мне довелось работать больше всего, да и понравилась она мне больше остальных – сказалась ее всесторонняя направленность.
Вот что она из себя представляет:
- микроконтроллер STM32F407VGT6 (Cortex M4, 168МГц, flash 1Мб, RAM 192Кб)
- встроенный ST-link/V2;
- таймеры;
- DMA контроллер;
- АЦП/ЦАП;
- интерфейсы: CAN, USB 2.0, USART/UART, SPI, I2C, GPIO;
На плате размещена следующая периферия:
- пользовательский USB-порт;
- 3-х осевой акселерометр;
- 8 светодиодов;
- 2 кнопки;
- 2 двухрядные гребенки;
- аудио ЦАП с усилителем класса D;
- всенаправленный цифровой микрофон.

Как я писал выше, эта плата стала для меня основной, порадовала способность работы со звуком, акселерометр.

Дальнейшие уроки будут основываться именно на этой плате.

Резюме.
Если вы решили начать работать с отладочными платами STM, то советую брать именно STM32F4DISCOVERY, на мой взгляд, у нее наибольший функционал. Дальнейшие статьи будут основываться именно на работе с ней. В ближайшее время будут написаны статьи на следующие темы:
- работа с GPIO, таймерами, прерываниями и т.п.;
- работа с интерфейсами UART, SPI, I2C и 1-wire на примерах реальных устройств, таких как дисплеи, GPS и GSM модули, датчики температуры, связь с компьютером по RS-232 и многое другое.
Конечная цель этого цикла – создание платы расширения для STM32F4. Все прошивки и схемы будут общедоступны.