Архитектура МК. Семейство МК. Основные модули и их назначение

Микроконтроллеры 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.

image

В структуре внутренних шин предусмотрены отдельная шина инструкций и матрица шин, которая предоставляет несколько каналов передачи данных для ЦПУ Cortex и блока ПДП

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

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

image

Семейство STM32 состоит из двух групп. Группа Performance Line работает на тактовых частотах до 72 МГц и оснащена полным набором УВВ, а группа Access Line работает на частотах до 36 МГц и интегрирует ограниченный набор УВВ.

Микроконтроллеры STM32 (от STMicroelectronics) включают множество различных модулей, которые обеспечивают широкие функциональные возможности для разработчиков. Основные модули и их назначение в микроконтроллерах STM32 приведены ниже:

  • Ядро процессора ARM Cortex-M: обеспечивает высокую производительность и энергоэффективность, а также программную совместимость.
  • Периферийные модули: включают в себя модули для работы с различными интерфейсами и устройствами, например, модуль USB, CAN, SPI, I2C, UART, ADC и др.
  • Шина памяти: предоставляет доступ к памяти микроконтроллера, включая Flash-память для хранения программы, SRAM и EEPROM для данных.
  • Таймеры и счетчики: позволяют измерять временные интервалы, запускать события и прерывания, а также управлять устройствами по таймерным сигналам.
  • Аппаратные прерывания: позволяют микроконтроллеру переключаться между различными задачами с определенной частотой, управлять внутренними и внешними событиями, что обеспечивает более эффективное использование ресурсов.
  • Debug модули: используются для отладки и тестирования программы, позволяют увидеть состояние процессора и памяти на каждом шагу выполнения.

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

Последовательные интерфейсы МК. Система прерываний МК. Таймеры счетчики МК. Модуль DMA.

Наиболее распространенные последовательные интерфейсы STM32: USART (Asynchronous/Synchronous Universal)

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

Основные характеристики контроллера прерываний:

  • Количество запросов маскируемых прерываний определяется конкретной моделью микроконтроллера. Для STM32F103xx – 43 входа запросов от периферий, 16 – от ядра Cortex M3, одно немаскируемое прерывание – NMI. Управление действующими прерываниями выполняют регистры разрешения или маски прерываний. Возможен запрет всех прерываний.
  • Каждому из прерываний соответствует индивидуальный фиксированный адрес-вектор, в котором хранится адрес подпрограммы обработки прерываний. Один вектор прерываний может обслуживать, как правило, несколько событий. Поэтому процедура обработки должна использовать поллинг (последовательный опрос флагов готовности внешних устройств).
  • Многоуровневые программируемые прерывания. Количество уровней приоритетов – 16. Наиболее приоритетное – прерывание меньшим номером. Установка приоритетов выполняется в специальном блоке регистров. На каждое прерывание в нем отведен один байт. Обработка прерывания может быть прервана другим прерыванием с более высоким приоритетом. Прерывания с таким же или более низким приоритетом будут ожидать окончания обработки активного обработчика прерываний. Допустимо динамическое изменение приоритетов.
  • Возможна организация очереди обрабатываемых прерываний, управление ею и формирование информации об активных (находящихся в обработке) запросах. Для этих целей предусмотрены регистры действующих прерываний, установки ожидания обработки прерываний, сброса ожидания обработки прерываний. В блоке регистров ожидания обработки прерываний каждый бит соответствует конкретному прерыванию и показывает, ожидает ли оно обработки.

В режиме таймера сигналом синхронизации является внутренний генератор МК, в режиме счетчика – внешний источник. Поэтому будем пользоваться термином: счетчик-таймер. Количество счетчиков-таймеров СТ в 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 может копировать данные из периферийных устройств непосредственно в память микроконтроллера, и наоборот, что позволяет читать и записывать данные без загрузки процессора.
  • Обмен данными между периферийными устройствами. DMA может выполнять передачу данных между периферийными устройствами без участия процессора.
  • Автоматическое повторение циклов. DMA позволяет повторять циклы передачи данных без участия процессора, что широко используется при передаче массивов данных.
  • Мультиплексирование запросов. DMA поддерживает возможность мультиплексирования запросов на доступ к памяти и периферийным устройствам.
  • Поддержка приоритетов. DMA может устанавливать приоритеты между различными запросами на доступ к памяти и периферийным устройствам.

Для настройки работы DMA в микроконтроллерах STM32 применяются соответствующие регистры, которые определяют параметры передачи данных, например, адрес источника и приемника, количество передаваемых данных, режим работы и приоритеты. Также для удобства работы с DMA в STM32 существуют специальные библиотеки (например, HAL и LL), которые предоставляют удобный интерфейс для настройки и использования этого модуля.

Контроллер прямого доступа к памяти

Контроллер прямого доступа к памяти (DMA, Direct Memory Access) - это аппаратный модуль в микроконтроллерах STM32, который обеспечивает обмен данными между периферийными устройствами и памятью без участия процессора. Этот модуль облегчает передачу больших объемов данных и уменьшает нагрузку на процессор, что повышает эффективность работы всей системы.

Контроллер DMA в STM32 может быть настроен на работу в трех основных режимах:

  • Одиночная передача данных - данный режим применяется для передачи данных один раз, без повторения.
  • Циклическая передача данных - при использовании данного режима DMA осуществит передачу данных в циклах, что упрощает передачу массивов данных.
  • Прерывание по завершению передачи данных - DMA может вызвать прерывание по завершению передачи данных, что упрощает синхронизацию с другими компонентами системы.

Контроллер DMA в STM32 также поддерживает сквозное адресное преобразование (transparent address translation), который позволяет управлять адресами источника и приемника данных в соответствии с заданными масками адресов.

Для настройки работы контроллера DMA в микроконтроллерах STM32 используются специальные регистры, которые определяют параметры передачи данных, адреса источника и приемника, количество передаваемых данных и т.д. Большинство микроконтроллеров STM32 также имеют библиотеки, такие как HAL и LL, которые предоставляют удобный интерфейс для настройки и использования контроллера DMA.

Контроллер прямого доступа к памяти КПДП (или контроллер DMA) не относится к ядру МК, но, так как он является ресурсом общего пользования в большинстве процедур обработки, рационально рассмотреть его особенности в этом разделе. Режим ПДП обеспечивает высокоскоростной обмен данными между памятью и периферийными устройствами без участия процессора. Возможны различные типы обмена: «память- периферийное устройство», «память-память», «периферийное устройство – периферийное устройство». В отличие от программного обмена и/или обработки прерываний, выполняемых процессором, режим ПДП реализует обмен данными аппаратно (без использования вычислительных мощностей микроконтроллера). Однако, это требует организации параллельных по отношению к процессору внутренних магистралей (шин). По сравнению с прерыванием обмен в режиме ПДП не требуется сохранение/восстановление контекста. При обмене может возникнуть ситуация, при которой ресурсы МК требуются одновременно процессору и КПДП. В этом случае используется процедура арбитража, которая замедляет скорость обмена. Кроме этого, могут возникнуть аналогичные конфликты между каналами КПДП. Поэтому эффект от использования режима ПДП следует оценивать с учетом особенностей архитектуры МК. Использование КПДП может привести, например, к увеличению производительности, но снижению быстродействия (скорости ввода/вывода). КПДП наиболее эффективен при реализации блочного обмена. Особенностью функционирования КПДП МК STM32F103C8T6 является наличие матрицы шин, работающей по алгоритму round-robin (циклическое планирование), гарантируя, по крайней мере, половину пропускной способности системной шины для ЦПУ (справедливо при обращении как к памяти, так и к периферии). Применение ПДП в МК STM32F103C8T6 целесообразно при реализации блочного (пакетного) обмена, так как в большинстве периферийных устройств (USART, SPI, I 2C, АЦП) отсутствует буферная память и требуется согласование с памятью передаваемых форматов данных.

Основные характеристики КПДП

  • Контроллер ПДП – один (DMA1).
  • Количество независимых каналов – 7.
  • За каждым каналом закреплены аппаратные запросы определенных периферийных устройств и возможность формирования программного запроса МЕМ2МЕМ (рисунок 1). Аппаратные запросы активируются в регистрах управления соответствующих периферийных устройств, а программные – в регистре конфигурации КПДП DMA_CCRх, где х – номер канала.

Запросы ПДП контроллера DMA1:

image

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

image

Каналы КПДП работают в режиме с разделением времени – активным может быть только один канал. Управление приоритетами запросов выполняет арбитр. Приоритеты между каналами устанавливаются на двух уровнях. Программный приоритет каждого канала задается в регистре DMA_CCRх биты PL0, PL1: 00 – низкий приоритет, 01– средний, 10 высокий, 11 – очень высокий. Аппаратный приоритет определяется номером канала контроллера: канал с меньшим номером обладает большим приоритетом. Аппаратный приоритет является вторичным. Если у нескольких запросов установлен одинаковый программный приоритет, то активным будет канал с меньшим номером. Если же запросы будут иметь различные уровни программного приоритета, то активным будет запрос, у которого в PL0, PL1 записано большее число.

  • Обеспечивается аппаратное согласование (выравнивание) форматов предаваемых данных между приемником и передатчиком, если они имеют вид байта, полуслова, слова. Например, порт SPI может передавать данные в виде байта или полуслова (2 байта), а разрядность памяти данных – слово (4 байта). Размер передаваемых данных указывается в DMA_CCRх битовыми полями PSIZE0, PSIZE1 (для периферийного устройства) и MSIZE0, MSIZE1 (для памяти).
  • Аппаратное управление непрерывным потоком данных выполняется в режиме цикличности с помощью кольцевого буфера. Если этот режим активирован, то после передачи всех данных регистр размера данных канала DMA_CNDTRx перезагружается исходным значением и передача продолжается. Этот режим целесообразно использовать, например, при циклической работе АЦП в режиме сканирования, при блочных передачах последовательных портов и так далее.
  • Программируемый размер данных для обмена – до 65536.
  • Аппаратный инкремент адреса памяти и периферийного устройства, определяемый длиной передаваемых данных.
Управление инкрементом.

Управление инкрементом выполняется соответственно битами 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 (Serial Peripheral Interface) - интерфейс, обеспечивающий серийную передачу данных между микроконтроллером и внешним устройством. Он имеет четыре сигнальные линии: MOSI (Master Out/Slave In), MISO (Master In/Slave Out), SCLK (Serial Clock) и SS (Slave Select).
  • I2C (Inter-Integrated Circuit) - интерфейс, используемый для передачи данных между устройствами, которые находятся на одной плате, через две линии: SDA (Serial Data) и SCL (Serial Clock).
  • USART (Universal Synchronous/Asynchronous Receiver/Transmitter) - интерфейс, который может работать в режимах синхронной и асинхронной передачи данных. Он включает в себя три сигнальные линии: TX (Transmit), RX (Receive) и CLK (Clock).
  • CAN (Controller Area Network) - интерфейс, используемый для обмена данными между различными устройствами в автомобильной промышленности. Он имеет две линии: CANH и CANL.

Каждый из этих интерфейсов имеет свои особенности и настройки, которые могут быть заданы через регистры микроконтроллера. Например, для настройки SPI необходимо задать такие параметры, как режимы передачи, частоту тактирования и порядок бит для передачи. Для настройки I2C необходимо указать адрес устройства, скорость передачи и количество байт, которые должны быть переданы. В целом, настройка синхронных интерфейсов в микроконтроллере настраивается в соответствии с требованиями конкретной задачи и определяется проектом, для которого микроконтроллер используется.

Несмотря на то, что каждый из синхронных интерфейсов имеет свои характеристики и ограничения, их совместное использование может существенно повысить гибкость и функциональность микроконтроллера. Например, можно использовать SPI для подключения к SPI-датчику и передачи данных, а затем использовать GPIO для управления состоянием устройства на основе этих данных.

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

Кроме того, микроконтроллеры STM32 оснащены различными режимами потребления энергии, которые позволяют использовать их в различных приложениях с разными требованиями к энергопотреблению. Например:

  • Low-power mode - режим потребления энергии, который был разработан для максимально длительного жизненного цикла батареи.
  • Sleep mode - режим потребления энергии, где процессор отключает свои ядра и другие периферийные устройства, при этом внешнее программирование и прерывания остаются доступными.
  • Stop mode - режим, в котором все частотные и питательные источники отключены, за исключением методов управления энергопотреблением.
  • Standby mode - это режим, в котором все функции микроконтроллера отключаются, и контроль осуществляется с помощью внешнего сигнала прерывания.

Микроконтроллеры STM32 также обладают рядом других функций, которые позволяют снизить потребление энергии. Например, можно использовать встроенный часовой кварцевый генератор (RTC), чтобы измерять время без использования центрального процессора, и снизить энергопотребление устройства.

Кроме того, существует ряд технологий, таких как LPUART, LPUART1, UCPD, LPUART2, которые позволяют управлять потреблением энергии на различных уровнях, в зависимости от требований конкретной задачи.

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

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

Одна из линеек микроконтроллеров, которые производит компания STMicroelectronics.

Применяемость

Создана для широкого спектра применений, и применяются в различных областях, включая автоматизацию домашней электроники, транспортные средства, медицинские устройства, устройства IoT, промышленные автоматизированные системы и различные приборы и устройства.