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

Семейство микроконтроллеров на ядре ARM Cortex-M3 компании STMicroelectronics на сегодняшний день по праву занимает лидирующее место среди производителей плат на этом ядре. В 2007 году были выпущены два семейства — Performance Line (STM32F103) и Access Line (STM32F101). Компания постоянно работает как над расширением ассортимента плат, так и над улучшением характеристик и сейчас представлено множество линеек STM32 для разных применений — микроконтроллеры с высокой производительностью, недорогие общего применения, с ультранизким энергопотреблением, со встроенным радиомодулем. Все их объединяет общее ядро — ARM Cortex-M3. Хорошим решением стала программная совместимость и pin-to-pin — замена микроконтроллера без новой разводки проводников (есть таблицы взаимозаменяемости).

Семейство STM32

Выбор программных инструментов

Программных средств разработки для ARM-архитектуры довольно много. Рассмотрим основные и самые популярные программные пакеты.

 



 

Наиболее популярными (но и самыми дорогими) среди разработчиков для разработки ПО под ARM архитектуру являются инструментарии от компаний Keil и IAR Systems. Это обусловлено наиболее продвинутыми С-инструментариями с точки зрения оптимизации и компактности кода. Также, помимо лидирующих позиций в С-инструментариях,  данные компании предоставляют широкие наборы дополнительного ПО — операционные системы реального времени, USB-стеки, TCP/IP-стеки и многое другое, но за дополнительную плату. К тому же компания Keil принадлежит ARM, и при пользовании услугами этих двух компаний вы получаете очень хорошую техническую поддержку. Но мы все же остановимся на инструментарии от IAR Systems. Выбор обусловлен универсальностью инструментария, поддерживающего большинство известных нам архитектур микроконтроллеров таких производителей как STMicroelectronics, Texas Instruments, Microchip, Atmel и т.д.

Также следует отметить популярность средств на основе компилятора GCC. Существуют как платные их варианты, так и бесплатные. Помимо всего, GCC является лидером по количеству поддерживаемых процессоров и операционных систем. Как пример варианта платных средств в сводной таблице мы привели инструментарии от компаний Raisonance и Atollic. По сравнению с двумя ранее описанными вариантами вы получаете за гораздо меньшие деньги полноценный C-инструментарий со средой разработки и технической поддержкой. Также существует вариант полностью бесплатного инструментария, например, среда разработки Eclipse и компилятор GCC.

Выбор оценочной платы для разработки

На рынке существует огромный выбор оценочных плат для STM32 как от STMicroelectronics, так и от сторонних производителей.  Для ознакомления и изучения микроконтроллеров семейства STM32 хорошо подходят доступные и недорогие модули из линейки оценочных плат «Discovery»:  для восьмибитных микроконтроллеров — STM8S-Discoveryи STM8L-Discovery, для 32-битных — STM32VLDiscovery. Особенность данных оценочных плат заключается в завершенном решении для старта разработки программного обеспечения на микроконтроллерах — сам микроконтроллер с необходимой обвязкой и внешними компонентами, а также интегрированный программатор-отладчик ST-Link. Это полноценное решение, не требующее дополнительных затрат.  Используя эти платы в собственных разработках, можно применять для программирования и отладки собственных приложений встроенный ST-Link через выведенный внешний разъем. 

 Оценочный набор STM32VLDiscovery
Оценочная плата STM32VLDiscovery

В основе платы — микроконтроллер линейки «Value Line» STM32F100RBT6, программатор-отладчик ST-Link с выведенным разъемом SWD, механические кнопки, светодиоды и обвязка. Свободные ножки микроконтроллера выведены на внешние разъемы.

Выбор программатора-отладчика для разработки

В качестве программатора-отладчика производитель каждой среды разработки, как правило, предоставляет собственное решение, но поддерживаются устройства и других производителей. В таблице 1 можно увидеть среды разработки и поддерживаемые программаторы-отладчики. Большинство сред разработки поддерживают ST-Link — самый дешевый вариант. Родные программаторы отладчика предоставляют большие возможности по отладке ПО, хотя разница в цене также ощутима. При выборе программаторов-отладчиков существует несколько вариантов от одного производителя: как более простые с поддержкой основных отладочных функций, так и профессиональные версии с поддержкой полного спектра функций отладки и трассировки. Например, программаторы-отладчики для IAR Embedded Workbench — J-Link и J-Trace, для Keil uVision — ULink и ULink-Pro.  Далее рассмотрим работу  отладочной платы STM32VLDiscovery  с интегрированным ST-Link.

 



 

Установка среды разработки

Скачиваем с официального сайта  IAR Systems по ссылке  IAR Embedded Workbench.  Загружаем  и устанавливаем. Процесс установки ПО ничем не отличается от стандартных программ.

Стандартная библиотека периферии STM32

STMicroelectronics для облегчения труда разработчиков предоставляет бесплатные стандартные библиотеки периферии для своих микроконтроллеров и, в частности, для семейства STM32. Вначале мы рассмотрим библиотеку, разберемся, как с ней работать, и далее на основе этой библиотеки обсудим небольшой пример на отладочной плате STM32VLDiscovery.

Функциональная структура стандартной библиотеки периферии
Функциональная структура стандартной библиотеки периферии

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

Первая составляющая — заголовочные файлы и файлы реализации всей периферии микроконтроллеров STM32 — STM32F10x_StdPeriph_Driver. Вся функциональность периферийных модулей описана в заголовочных файлах и файлах реализации. Например, для портов ввода-вывода это два файла — stm32f10x_gpio.h и stm32f10x_gpio.c.

Вторая составляющая — заголовочные файлы и файлы реализации самого ядра ARM Cortex-M3 от компании ARM — CMSIS (ARM® CortexTM Microcontroller Software Interface Standard). Ядро ARM Cortex-M3 выходит за рамки обычного понятия ядра микроконтроллера и представляет собой мини-микроконтроллер с периферией — встроенные системный таймер, контроллер прерываний и т.д. CMSIS предоставляет собой константы и определения, функции доступа к регистрам и периферийным модулям ядра, независимый интерфейс для операционных систем реального времени (RTOS). CMSIS состоит из трех файлов:

  • h — вспомогательные функции доступа к регистрам ядра;
  • s- набор файлов для каждой линейки семейства STM32, обеспечивающие инициализацию стека и таблицу векторов прерываний;
  • h- файл начальной инициализации тактовой частоты микроконтроллера.

Для использования стандартной библиотеки периферии необходимо в файл основной программы (обычно это main.c) включить файл #include «stm32f10x.h» и прописать определенные константы в свойствах проекта. Настройка проекта более подробно будет рассмотрена в приведенном ниже примере. Также библиотекой предоставляются три файла, доступные для модификации пользователем — файл конфигурации библиотеки stm32f10x_conf.h и файлы прерываний stm32f10x_it.h и stm32f10x_it.c. Для использования определенных модулей периферии в проект необходимо добавить файлы реализации и сконфигурировать файл stm32f10x_conf.h. Под конфигурацией файла stm32f10x_conf.h подразумевается раскомментирование строчек с названием периферийного модуля, предполагаемого для использования. В нашем случае это строчка #include «stm32f10x_gpio.h». Обработка прерываний происходит в заголовочном файле и файле реализации stm32f10x_it.h и stm32f10x_it.c. Функции обработчиков прерывания не должны содержать параметров — void function(void). Если посмотреть файл stm32f10x_it.h, то можно увидеть, что в нем уже написаны пустые обработчики прерывания, но тут имеются не все функции. Дополнительные имена функций обработчиков прерывания — это фактически адреса обработчиков прерывания. Их придется прописывать вручную, и эти имена уже объявлены в файле начальной инициализации. Этот файл мы рассмотрим далее более подробно.

 



 

Вся периферия описана в структурах данных языка Си, которые и используются для конфигурации периферийного модуля. Функции и константы для периферийных модулей начинаются с префиксов, совпадающих с именем периферийного модуля. Например, имена функций для портов ввода-вывода — GPIO_Init(), GPIO_SetBits(), GPIO_ReadInputData() и константы — GPIOA, GPIO_Speed_50MHz, GPIO_Pin_0.

Для конфигурации периферийного модуля необходимо заполнить все поля структуры и далее передать структуру функции инициализации периферийного модуля. Например, для инициализации портов ввода-вывода необходимо объявить и заполнить поля структуры GPIO_InitTypeDef и передать объявленное имя функции инициализации GPIO_Init(… , …). Все доступные функции для работы с периферийным модулем можно посмотреть в справке на библиотеку или в заголовочном файле. Для портов ввода-вывода это файл stm32f10x_gpio.h. Большинство периферийных модулей имеют одинаковый набор функций, например (PPP — имя периферийного модуля):

  • PPP_DeInit(…) — установка всех регистров в начальное(после сброса) состояние;
  • PPP_Init(…) — установка параметров через структуры данных;
  • PPP_Cmd(ENABLE/DISABLE) — разрешение/запрещение работы (не тактирование!);
  • PPP_ITConfig(…) — конфигурация источников прерываний;
  • PPP_GetFlagStatus(…) — чтение флагов периферийного модуля;
  • PPP_ClearFlag(…) — очищение флагов периферийного модуля;
  • PPP_ClearITPendingFlag(…) — сброс флага прерывания.

Для большей наглядности кода и сокращения его визуального размера стандартные типы данных предопределены в файле stm32f10x_type.h, например:

  • u8 — unsigned char;
  • u16 — unsigned short;
  • RESET/SET;
  • FALSE/TRUE;
  • DISABLE/ENABLE.

Стандартную библиотеку периферии можно загрузить с официального сайта STMicroelectronics]. Структура пакета библиотеки следующая:

  • Libraries:
    • CMSIS — библиотека ядра ARM Cortex-M3;
    • 4.0LibrariesSTM32F10x_StdPeriph_Driver — библиотека периферии STM32.
  • Project:
    • 4.0ProjectSTM32F10x_StdPeriph_Examples — исходные файлы примеров периферии STM32;
    • 4.0ProjectSTM32F10x_StdPeriph_Template — шаблон «пустого» проекта для оценочных плат STM3210xx-EVAL.
  • Utilities — драйвера для отладочных плат STMicroelectronics.
  • 4.0stm32f10x_stdperiph_lib_um.chm — файл справки.

Для более простого старта создания и конфигурации проекта на основе отладочных плат STM3210xx-EVAL предлагается «пустой» шаблон проекта для разнообразных сред разработки. В него можно внести ваш код, выбрать в конфигурации конкретную отладочную пату и начать работать. Шаблон проекта приведен для пяти сред разработки, можно начать работать с любой из них. Помимо этого, на первых порах можно посмотреть параметры конфигурации проектов.