Микроконтроллеры STM32 представляют собой семейство микроконтроллеров, производимых компанией STMicroelectronics, которые основаны на ядре ARM Cortex-M. Они отличаются высоким уровнем интеграции и широким спектром функциональных возможностей, таких как наличие встроенной поддержки Ethernet, USB, CAN, I2C, SPI и других интерфейсов, аппаратное ускорение цифровой обработки сигналов, наличие ядра Cortex-M, компоненты памяти и т.д.
МК STM32 выполнены на основе ядра Cortex, которое подключено к Flash памяти по отдельной шине инструкций. Шина данных и системная шина Cortex подключены к матрице высокоскоростных шин AHB. Внутреннее статическое ОЗУ подключено напрямую к матрице шин AHB, с которой также связан блок ПДП. Подключение встроенных УВВ распределено между двумя шинами APB. Каждая из шин связана с матрицей шин AHB посредством шинных преобразователей. Матрица шин AHB синхронизируется той же частотой, что и ядро Cortex. Однако, у шин AHB имеются отдельные предделители и, поэтому, в целях снижения энергопотребления их можно синхронизировать более низкими частотами. Важно обратить внимание, что шина APB2 может работать с максимальным бытродействием 72 МГц, а быстродействие шины APB1 ограничено частотой 36 МГц. В качестве шинных мастеров могут выступать, как ЦПУ Cortex, так и блок ПДП. Благодаря свойственной матрице шин параллелизму, необходимость в арбитраже возникает только в случае попыток одновременного доступа обеих мастеров к статическому ОЗУ, шине APB1 или APB2. Тем не менее, как мы убедимся при изучении раздела посвященному ПДП, шинный арбитр гарантированно предоставляет 2/3 времени доступа для блока ПДП и 1/3 для ЦПУ Cortex.

В структуре внутренних шин предусмотрены отдельная шина инструкций и матрица шин, которая предоставляет несколько каналов передачи данных для ЦПУ Cortex и блока ПДП
Архитектура микроконтроллеров STM32 прозрачна и удобно расширяема, что позволяет интегрировать и расширять новые компоненты и периферийные устройства в соответствии с требованиями конкретного приложения.
До появления STM32 компания ST уже имела в своем выпускаемом ассортименте 4 семейства микроконтроллеров на основе ядер ARM7 и ARM9, однако именно у микроконтроллеров STM32 было достигнуто существенное улучшение соотношения стоимости и рабочих характеристик. Микроконтроллеры STM32, цена которых за штуку при покупке больших количеств составляет чуть более одного Евро, бросают серьезный вызов существующим 8-битным микроконтроллерам. Микроконтроллеры STM32 изначально выпускались в 14 различных вариантах, разделенные на две группы: Performance Line, в которую вошли микроконтроллеры с тактовой частотой ЦПУ до 72 МГц, и Access Line (тактовая частота до 36 МГц). Обе группы микроконтроллеров совместимы по расположению выводов и программному обеспечению. Объем их встроенной Flash памяти достигал 128 кбайт, а статического ОЗУ - 20 кбайт. С момента первого появления микроконтроллеров STM32 их ассортимент был существенно расширен новыми представителями с повышенными размерами ОЗУ и Flash памяти, а также с более сложными УВВ.

Семейство STM32 состоит из двух групп. Группа Performance Line работает на тактовых частотах до 72 МГц и оснащена полным набором УВВ, а группа Access Line работает на частотах до 36 МГц и интегрирует ограниченный набор УВВ.
Микроконтроллеры STM32 (от STMicroelectronics) включают множество различных модулей, которые обеспечивают широкие функциональные возможности для разработчиков. Основные модули и их назначение в микроконтроллерах STM32 приведены ниже:
Эти модули и многие другие обеспечивают богатые функциональные возможности для использования микроконтроллеров STM32 в широком спектре приложений, от простых устройств до сложных систем управления.
Наиболее распространенные последовательные интерфейсы STM32: USART (Asynchronous/Synchronous Universal)
При выборе способа ввода/вывода необходимо учитывать, что использование прерывания снижает быстродействие операций ввода-вывода, но повышает производительность МК. Под производительностью нужно понимать число задач, решаемых в единицу времени, а быстродействием – время выполнения операций. Особенностью контроллера прерываний STM32 является его интеграция непосредственно в ядро микроконтроллера, унификация (структура контроллера и его программная модель не должна зависеть от особенностей процессорного блока и производителя микросхемы), аппаратная реализация ряда процедур обработки прерываний. Это обеспечивает более простое программирование обработки прерываний, компактность кода, малое время реакции на запрос, его детерминированное значение. Последнее особенно важно для систем реального времени.
Основные характеристики контроллера прерываний:
В режиме таймера сигналом синхронизации является внутренний генератор МК, в режиме счетчика – внешний источник. Поэтому будем пользоваться термином: счетчик-таймер. Количество счетчиков-таймеров СТ в STM32 определяется моделью микроконтроллера, а номер СТ определяет его принадлежность к тому или иному типу и функциональность. В разных МК счетчики-таймеры с одинаковыми номерами обычно структурно и программно-совместимы. СТ в МК нумеруются не подряд, а выборочно в зависимости от типа микроконтроллера. Наличие СТ с 17 номером (TIM17) не означает, что имеются все 17 СТ (TIM1÷TIM17), так как СТ с промежуточными номерами могут отсутствовать. СТ делятся на три группы: базовые (basic timers), общего назначения (general-purpose timers) и с расширенным управлением (advanced-control timers). Функциональность СТ возрастает от базовых к расширенным, включая в себя функции предыдущих групп. Особенностью последних двух групп является минимальное участие процессорного блока в работе СТ.
Важным компонентом, связанным с таймерами и счётчиками в STM32, является прерывание. Когда таймер достигает заданного значения или происходит определенное событие, оно может вызывать прерывание, чтобы оповестить микроконтроллер о том, что произошло. Это позволяет вам с легкостью обработать событие и выполнить соответствующие действия.
Для работы с таймерами и счётчиками необходимо понимать, как они связаны с периферийными устройствами, такими как GPIO (общий ввод-вывод) и DMA (прямой доступ к памяти). Например, вы можете использовать таймер для генерации ШИМ-сигнала, который будет подключен к GPIO для управления яркостью светодиодов, или использовать таймер совместно с DMA для быстрой передачи данных через интерфейсы связи, такие как SPI или I2C.
В целом, настройка таймеров и счётчиков в STM32 может быть достаточно сложной задачей, требующей хорошего понимания аппаратных средств и программирования. Однако, благодаря мощным возможностям, предоставляемым микроконтроллерами STM32, вы можете реализовать самые разнообразные приложения, используя таймеры и счётчики в своих проектах.
Модуль DMA в микроконтроллерах STM32 обладает следующими возможностями:
Для настройки работы DMA в микроконтроллерах STM32 применяются соответствующие регистры, которые определяют параметры передачи данных, например, адрес источника и приемника, количество передаваемых данных, режим работы и приоритеты. Также для удобства работы с DMA в STM32 существуют специальные библиотеки (например, HAL и LL), которые предоставляют удобный интерфейс для настройки и использования этого модуля.
Контроллер прямого доступа к памяти (DMA, Direct Memory Access) - это аппаратный модуль в микроконтроллерах STM32, который обеспечивает обмен данными между периферийными устройствами и памятью без участия процессора. Этот модуль облегчает передачу больших объемов данных и уменьшает нагрузку на процессор, что повышает эффективность работы всей системы.
Контроллер DMA в STM32 может быть настроен на работу в трех основных режимах:
Контроллер DMA в STM32 также поддерживает сквозное адресное преобразование (transparent address translation), который позволяет управлять адресами источника и приемника данных в соответствии с заданными масками адресов.
Для настройки работы контроллера DMA в микроконтроллерах STM32 используются специальные регистры, которые определяют параметры передачи данных, адреса источника и приемника, количество передаваемых данных и т.д. Большинство микроконтроллеров STM32 также имеют библиотеки, такие как HAL и LL, которые предоставляют удобный интерфейс для настройки и использования контроллера DMA.
Контроллер прямого доступа к памяти КПДП (или контроллер DMA) не относится к ядру МК, но, так как он является ресурсом общего пользования в большинстве процедур обработки, рационально рассмотреть его особенности в этом разделе. Режим ПДП обеспечивает высокоскоростной обмен данными между памятью и периферийными устройствами без участия процессора. Возможны различные типы обмена: «память- периферийное устройство», «память-память», «периферийное устройство – периферийное устройство». В отличие от программного обмена и/или обработки прерываний, выполняемых процессором, режим ПДП реализует обмен данными аппаратно (без использования вычислительных мощностей микроконтроллера). Однако, это требует организации параллельных по отношению к процессору внутренних магистралей (шин). По сравнению с прерыванием обмен в режиме ПДП не требуется сохранение/восстановление контекста. При обмене может возникнуть ситуация, при которой ресурсы МК требуются одновременно процессору и КПДП. В этом случае используется процедура арбитража, которая замедляет скорость обмена. Кроме этого, могут возникнуть аналогичные конфликты между каналами КПДП. Поэтому эффект от использования режима ПДП следует оценивать с учетом особенностей архитектуры МК. Использование КПДП может привести, например, к увеличению производительности, но снижению быстродействия (скорости ввода/вывода). КПДП наиболее эффективен при реализации блочного обмена. Особенностью функционирования КПДП МК STM32F103C8T6 является наличие матрицы шин, работающей по алгоритму round-robin (циклическое планирование), гарантируя, по крайней мере, половину пропускной способности системной шины для ЦПУ (справедливо при обращении как к памяти, так и к периферии). Применение ПДП в МК STM32F103C8T6 целесообразно при реализации блочного (пакетного) обмена, так как в большинстве периферийных устройств (USART, SPI, I 2C, АЦП) отсутствует буферная память и требуется согласование с памятью передаваемых форматов данных.
Основные характеристики КПДП
Запросы ПДП контроллера DMA1:

Запросы переферийных устройств DMA1:

Каналы КПДП работают в режиме с разделением времени – активным может быть только один канал. Управление приоритетами запросов выполняет арбитр. Приоритеты между каналами устанавливаются на двух уровнях. Программный приоритет каждого канала задается в регистре DMA_CCRх биты PL0, PL1: 00 – низкий приоритет, 01– средний, 10 высокий, 11 – очень высокий. Аппаратный приоритет определяется номером канала контроллера: канал с меньшим номером обладает большим приоритетом. Аппаратный приоритет является вторичным. Если у нескольких запросов установлен одинаковый программный приоритет, то активным будет канал с меньшим номером. Если же запросы будут иметь различные уровни программного приоритета, то активным будет запрос, у которого в PL0, PL1 записано большее число.
Управление инкрементом выполняется соответственно битами MINC и PINC регистра DMA_CCRx. Значения этих бит определяются типом обмена. Например, в режиме «память-память» следует инкрементировать оба регистра адреса, в режиме «периферия-память» – только адрес памяти, в режиме «периферия-периферия» инкремент может не требоваться вообще.
В процессе обмена КПДП формирует три флага событий (окончание обмена в канале TCIFx, половина обмена HTIFx и ошибка обмена TEIFx), которые логически объединяются с помощью функции «ИЛИ» и устанавливают флаг GIFx. Флаги хранятся в регистре состояния прерываний DMA_ISRx.
Алгоритм работы при использовании прямого доступа к памяти состоит из процедуры инициализации КПДП (определяется режимом работы), программного включения ПДП в периферийных устройствах и памяти, анализа окончания приема/передачи данных в программном режиме или по прерыванию.
STM32 имеет ряд синхронных интерфейсов для обмена данными между микроконтроллером и периферийными устройствами посредством синхронной передачи данных. Они включают в себя интерфейсы такие, как SPI (Serial Peripheral Interface), I2C (Inter-Integrated Circuit), USART (Universal Synchronous/Asynchronous Receiver Transmitter) и CAN (Controller Area Network).
Каждый из этих интерфейсов имеет свои особенности и настройки, которые могут быть заданы через регистры микроконтроллера. Например, для настройки SPI необходимо задать такие параметры, как режимы передачи, частоту тактирования и порядок бит для передачи. Для настройки I2C необходимо указать адрес устройства, скорость передачи и количество байт, которые должны быть переданы. В целом, настройка синхронных интерфейсов в микроконтроллере настраивается в соответствии с требованиями конкретной задачи и определяется проектом, для которого микроконтроллер используется.
Несмотря на то, что каждый из синхронных интерфейсов имеет свои характеристики и ограничения, их совместное использование может существенно повысить гибкость и функциональность микроконтроллера. Например, можно использовать SPI для подключения к SPI-датчику и передачи данных, а затем использовать GPIO для управления состоянием устройства на основе этих данных.
В целом, правильно настроенные синхронные интерфейсы микроконтроллера помогают ускорить обмен данными между устройствами, упрощают программирование и повышают гибкость системы. С другой стороны, неправильное использование интерфейсов может привести к ошибкам в передаче данных, снижению производительности и даже повреждению устройств. Поэтому при работе с синхронными интерфейсами необходимо соблюдать рекомендации производителя и руководствоваться требованиями конкретной задачи.
Кроме того, микроконтроллеры STM32 оснащены различными режимами потребления энергии, которые позволяют использовать их в различных приложениях с разными требованиями к энергопотреблению. Например:
Микроконтроллеры STM32 также обладают рядом других функций, которые позволяют снизить потребление энергии. Например, можно использовать встроенный часовой кварцевый генератор (RTC), чтобы измерять время без использования центрального процессора, и снизить энергопотребление устройства.
Кроме того, существует ряд технологий, таких как LPUART, LPUART1, UCPD, LPUART2, которые позволяют управлять потреблением энергии на различных уровнях, в зависимости от требований конкретной задачи.
В целом, использование режимов потребления в микроконтроллерах STM32 может существенно сократить потребление энергии, повысить автономность устройства и уменьшить затраты на питание. Поэтому, при проектировании систем на микроконтроллерах STM32, необходимо учитывать возможность использования этих режимов и настраивать их в соответствии с требованиями конкретной задачи.