Программирование микроконтроллеров
STM32
Аннотация
В книге рассмотрено программирование микроконтроллера STM32 компании STMicroelectronics (www.st.com). Книга состоит из 4 глав.
В главе 1 рассмотрены программные и аппаратные средства, используемые для программирования и последующего тестирования микроконтроллеров STM32. Описывается среда программирования STM32CubeIDE, предназначенная для создания программного кода, и библиотека HAL, предназначенная для взаимодействия программного кода с аппаратным обеспечением. Приводится обзор отладочных плат, используемых для тестирования программ.
В главе 2 рассмотрено использование программного пакета Proteus для моделирования работы созданных программ.
Глава 3 полностью посвящена детальному разбору учебного проекта “Сигнал SOS”. Рассмотрены следующие стадии создания проекта: запуск среды программирования, настройка периферийных устройств, создание кода программы, графическое отображение сигнала, отображение буквенной информации, визуализация графика сигнала в STM32CubeMonitor.
В главе 4 рассмотрены примеры программирования STM32, которые включают в себя создание программы и её тестирование на отладочной плате NUCLEO-F411RE. Загрузка программы в микроконтроллер осуществляется с помощью программатора ST-LINK/V2, встроенного в отладочную плату.
Каждая глава заканчивается контрольными вопросами и заданиями.
Оглавление
Введение _ 4
Глава 1. Программные и аппаратные средства программирования микроконтроллеров STM32 _ 14
1.1. Архитектура микроконтроллера STM32 _ 14
1.2. Среда разработки STM32CubeIDE _ 18
1.2.1. Общие сведения _ 18
1.2.2. Информационный центр _ 21
1.2.3. Концепция Perspective в STM32CubeIDE _ 22
1.2.4. Настройки конфигурации STM32CubeIDE _ 25
1.2.5. Рабочие пространства и проекты _ 26
1.3. Функции библиотеки HAL для работы с портами ввода-вывода _ 28
1.4. Отладочные платы для микроконтроллеров STM32 _ 35
1.5. Создание проекта в STM32CubeIDE и моделирование его работы на отладочной плате _ 41
Контрольные вопросы и задания _ 56
Глава 2. Моделирование электрических схем с микроконтроллерами STM32 в Proteus _ 58
2.1. Комплект программ Proteus Design Suite _ 58
2.2. Создание проекта в STM32CubeIDE и моделирование его работы в Proteus _ 65
2.3. Примеры программирования STM32 с моделированием в Proteus _ 78
2.3.1. Подключение к STM32 семисегментного индикатора _ 78
2.3.2. Подключение кнопки _ 84
Контрольные вопросы и задания _ 86
Глава 3. Учебный проект “Сигнал SOS”, пошаговая реализация _ 89
3.1. Формирование проекта в STM32CubeIDE _ 89
3.2. Настройка периферийных устройств _ 92
3.3. Создание кода программы _ 96
3.4. Графическое отображение сигнала SOS при моделировании _ 97
3.5. Отображение буквенной информации _ 104
3.6. Визуализация графика сигнала в STM32CubeMonitor _ 105
Контрольные вопросы и задания _ 116
Глава 4. Примеры программирования микроконтроллера STM32 _ 117
4.1. Передача и прием данных через UART/USART _ 117
4.1.1. Передача данных из микроконтроллера в компьютер _ 117
4.1.2. Передача данных из компьютера в микроконтроллер _ 125
4.2. Таймеры _ 129
4.3. Широтно-импульсная модуляция (ШИМ) _ 138
4.4. Аналого-цифровое преобразование (АЦП) _ 145
4.4.1. Подключение к STM32 потенциометра _ 145
4.4.2. Подключение к STM32 термистора _ 155
4.4.3. Подключение к STM32 датчика освещенности _ 159
4.4.4. Подключение к STM32 температурного датчика LM35 _ 163
Контрольные вопросы и задания _ 169
Приложения _ 171
Приложение 1. Таблица ASCII _ 171
Приложение 2. Список сокращений _ 172
Приложение 3. Расшифровка терминов _ 174
Литература _ 185
Введение
Микроконтроллеры STM32 разрабатывает и производит компания STMicroelectronics (www.st.com). Компания STMicroelectronics (ST) была создана в 1987 году при слиянии двух микроэлектронных компаний: итальянской Società Generale Semiconduttori (SGS) Microelettronica и французской Thomson Semiconducteurs. Штаб-квартира компании находится в Женеве. STMicroelectronics имеет всемирную сеть дизайн центров и заводов: микросхемы разрабатываются в странах Европы, в США, Индии, северных странах Африки. Производство кристаллов осуществляется в Италии, Франции, Сингапуре. Тестирование и доводка микроконтроллеров до товарных образцов производится в Китае, Малайзии, Мальте, Марокко. В настоящее время компания STMicroelectronics является ведущим поставщиком электроники в Европе.
Микроконтроллеры STM32 основаны на 32-битных ядрах архитектуры ARM (Advanced RISC Machine) с сокращённым набором команд: Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7 и др. STMicroelectronics имеет лицензию на процессорные ядра ARM от компании-разработчика процессорных ядер – ARM Holdings. Компания ST добавляет к процессорному ядру память и различные периферийные устройства и создает собственную окончательную конфигурацию микроконтроллера, выполненную в виде единого кристалла, поэтому микроконтроллеры иногда называют однокристальными ЭВМ. Распространенными периферийными устройствами, входящими в состав микроконтроллера, являются интерфейсы USB 2.0 OTG, CAN, SPI, I2C, UART/USART, 16-разрядные и 32-разрядные таймеры, аналого-цифровые преобразователи (АЦП), цифро-аналоговые преобразователи (ЦАП) и др.
Семейство микроконтроллеров STM32 состоит из четырех групп:
– High Performance (высокопроизводительные),
– Mainstream (широкого применения),
– Ultra-low power (сверхнизкого потребления),
– Wireless (беспроводные).
Обозначение микроконтроллеров STM32. Серии микроконтроллеров, входящие в одну группу, основаны, преимущественно, на едином процессорном ядре ARM Cortex-M. В таблице 1 указаны серии микроконтроллеров и соответствующие им ядра ARM Cortex-M.
Рассмотрим, что означают буквы и цифры в названии микроконтроллера на примере микроконтроллера M32F103CBT6:
– STM32 – семейство 32-разрядных микроконтроллеров STM;
– F1 – указывает на принадлежность к группе (F1 – группа микроконтроллеров широкого применения);
– 03 – подгруппа в группе F1;
– C – указывает на число выводов;
– B – указывает на объем Flash памяти;
– T – указывает на тип корпуса;
– 6 – указывает на температурный диапазон применения.
Принадлежность микроконтроллеров к определенной группе указана в таблице 2.
Расшифровка обозначений числа выводов микроконтроллера приведена в таблице 3.
Расшифровка обозначений размера Flash памяти приведена в таблице 4:
Расшифровка обозначений типа корпуса приведена в таблице 5:
Корпуса микроконтроллеров отличаются большим разнообразием и не исчерпываются вариантами, указанными в таблице 5. Тип корпуса зависит от материала корпуса, расположения контактов, количества контактов, расстояния между контактами, варианта монтажа на плату. Внешний вид некоторых типов корпусов представлен на рис. 2
Обозначения температурного диапазона применения микроконтроллеров:
6 – от -40 до +85ºC
7 – от -40 до +105ºC
Глава 1. Программные и аппаратные средства программирования микроконтроллеров STM32
1.1. Архитектура микроконтроллера STM32
Внутренне каждый микроконтроллер STM32 состоит из ядра ARM Cortex-M, статической оперативной памяти, Flash-памяти и различных периферийных устройств.
– Ядро ARM Cortex-M состоит из центрального процессора (CPU) и дополнительных модулей. Систему команд и архитектуру для ядер ARM Cortex-M, как отмечалось ранее, разрабатывает компания ARM Holdings, которая однако не производит и не продает процессорные устройства, а только лицензирует архитектуру процессора для производителей микроконтроллеров. Поэтому ядро Cortex-M считается интеллектуальной собственностью ARM Holdings. Существует множество компаний, которые разрабатывают, производят и продают микроконтроллеры на базе архитектуры ARM Cortex-M. Компания STMicroelectronics является одной из них, и в настоящее время – это единственный производитель, продающий полный ассортимент микроконтроллеров на базе ARM Cortex-M.
– Flash-память — тип электрически перепрограммируемой памяти EEPROM (Electrically Erasable Programmable Read-Only Memory). Эта память является энергонезависимой и сохраняет данные после отключения питания.
– Периферийные устройства — аппаратные узлы микроконтроллера, через которые процессор управляет внешними устройствами, подключенными к микроконтроллеру. Это порты ввода-вывода, аналого-цифровые преобразователи (АЦП и ЦАП), ШИМ-генераторы, таймеры/счётчики, интерфейсы USB, CAN, SPI, I2C, UART/USART и др.
Отдельные блоки микроконтроллера объединяются в единую систему с помощью шинной архитектуры, которая, например, для микроконтроллера модели STM32F0 имеет вид, показанный на рис. 1.1. (Показана упрощенная “крупноузловая” схема [1]).
– Системная шина соединяет ядро Cortex-M с шинной матрицей, которая выполняет роль арбитра между ядром ARM и контроллером прямого доступа к памяти DMA (Direct Memory Access). DMA – это специализированный программируемый аппаратный модуль, позволяющий периферийным устройствам микроконтроллера получать доступ к внутренней памяти, минуя ядро Cortex-M. При этом ЦПУ полностью освобождается от операций, порождаемых передачей данных (или, как говорят, освобождается от оверхеда (overhead)), благодаря чему он может быть занят на других процессах. Все микроконтроллеры STM32 имеют, как минимум, один контроллер DMA, а большинство микроконтроллеров имеют два независимых DMA.
– Шина DMA соединяет контроллер DMA с шинной матрицей.
– Продвинутые высокопроизводительные шины AHB1 и AHB2 (Advanced High-performance Bus) обеспечивают доступ портов ввода/вывода и периферийных устройств к шинной матрице.
– Шинная матрица (BusMatrix) объединяет две ведущие шины (системную шину и шину DMA) и четыре ведомые: интерфейс Flash-памяти, SRAM, шина AHB2, шина AHB1 с мостом AHB-APB (APB – Advanced Peripheral Bus). Шинная матрица управляет доступом устройств памяти и периферийных устройств к ядру и контроллеру DMA. Управление (арбитраж) производится по алгоритму циклического перебора Round Robin.
На рис. 1.2 показана детализированная блок-схема для микроконтроллера STM32F411RE, заимствованная из даташита на этот микроконтроллер. Из этой схемы можно увидеть какие блоки подключены к отдельным шинам.
Примечание. Для макетирования в данной книге будет использоваться отладочная плата NUCLEO-F411RE, поэтому в дальнейшем будем часто ссылаться на эту плату и на одноименный микроконтроллер этой платы – STM32F411RE.
Из рис. 1.2 можно видеть, что для STM32F411RE существуют три основные шины: AHB, APB1, APB2. Для каждой шины (выделено овалами) указана максимальная частота. Периферийные устройства получают тактовый сигнал от шины, ее частота задает скорость работы подключенных к данной шине устройств. Частоту работы шины можно настраивать. После сигнала сброса микроконтроллера вся периферия находится в отключенном состоянии и на нее не подается тактовый сигнал. Это сделано с целью снижения энергопотребления всего микроконтроллера. Перед началом работы с любым периферийным устройством необходимо разрешить подачу на него тактового сигнала.
В микроконтроллерах STM32 присутствует несколько генераторов тактового сигнала:
– High-speed internal (HSI) RC oscillator. Это RC-генератор на 8 МГц. По умолчанию микроконтроллер тактируется от этого генератора. Его минус — плохая стабильность генерируемой частоты.
– High-speed external (HSE). Этот генератор является альтернативой HSI. Для его работы нужен внешний кварцевый резонатор на частоту 4-16 МГц. Его главным преимуществом в сравнении с HSI является стабильность генерируемой частоты. В отладочной плате NUCLEO_F411RE тактовая частота подается на микроконтроллер от внешнего кварцевого резонатора частотой 8 МГц, размещенного на программаторе.
– Low-speed external (LSE). Этот генератор требует внешнего кварцевого резонатора на 32768 Гц. LSE используется только для тактирования встроенных часов реального времени RTC, с помощью которых можно вести отсчет текущего времени.
– Low-speed internal (LSI) RC oscillator. Это встроенный RC-генератор на 40 КГц. Он не отличается особой точностью и используется для сторожевого таймера, который перезапускает систему в случае её зависания.
Частота, полученная от генераторов тактового сигнала, преобразуется (уменьшается или увеличивается) с помощью делителей (Prescaler) и умножителей частоты PLL (Phase-Locked Loop – генератор со схемой подстройки частоты).
При ручной настройке частоты выполняем следующие действия:
– Определяемся с каким генератором будем работать (HSI или HSE) и с какой частотой.
– Если HSE, то выбираем внешний кварц.
– Определяем каким путем пойдет тактовый сигнал, через какие мультиплексоры/делители/умножители.
– По блок-диаграмме из даташита определяем, к какой шине подключено периферийное устройство и, следовательно, какая частота будет на периферийном устройстве.
В среде разработки STM32CubeIDE настройка частоты осуществляется на вкладке Clock Configuration.
Стоимость учебного пособия – 490 руб.