STM32 и архитектура Cortex-M

STM32 и архитектура Cortex-M

В этом разделе рассматриваются основные аспекты архитектуры STM32 и Cortex-M, включая их структуру и функции. Понимание архитектуры является основой для разработки эффективных встроенных решений.

4 аудио · 3:01

Nortren·

Что такое STM32 и кто его производит?

0:51
STM32 — это семейство 32-битных микроконтроллеров от компании STMicroelectronics, построенных на ядрах ARM Cortex-M. Семейство включает несколько линеек, от ультра-низкопотребляющих STM32L и STM32U до высокопроизводительных STM32H7 с ядром Cortex-M7 на частотах до 550 мегагерц. Все STM32 разделяют общую периферию и инструменты разработки, что упрощает миграцию между моделями. STM32 — один из самых популярных микроконтроллеров в индустрии благодаря богатой периферии, доступности отладочных плат Nucleo и Discovery и зрелой экосистеме.

В чём разница между Cortex-M0, M3, M4 и M7?

0:48
Это разные ядра ARM Cortex-M, отличающиеся производительностью и набором инструкций. Cortex-M0 и M0-плюс — самые простые и энергоэффективные, для базовых задач. Cortex-M3 добавляет полный набор Thumb-2 инструкций и аппаратное деление. Cortex-M4 расширяет M3 поддержкой DSP-инструкций и опциональным блоком вычислений с плавающей точкой одинарной точности. Cortex-M7 — самое мощное ядро, с суперскалярным конвейером, кэшами инструкций и данных и опциональной двойной точностью. Чем выше номер, тем выше производительность и потребление.

Что такое memory-mapped I/O в контексте STM32?

0:40
Memory-mapped I/O означает, что регистры периферии доступны по обычным адресам памяти, как если бы это была оперативная память. Чтобы включить светодиод, программа записывает значение по конкретному адресу, и аппаратура переводит это в физический сигнал на ноге микроконтроллера. У Cortex-M нет отдельных портовых инструкций, как у архитектуры x86. Это упрощает программирование: работа с периферией выглядит как работа с переменными, объявленными как указатели на конкретные адреса с модификатором volatile.

Зачем нужно ключевое слово volatile при работе с регистрами?

0:42
Volatile говорит компилятору, что значение по этому адресу может измениться вне зависимости от потока выполнения программы — например, из-за работы периферии или обработчика прерывания. Без volatile компилятор может закэшировать значение в регистре процессора и не перечитывать его из памяти, что приведёт к чтению устаревших данных. Все указатели на регистры периферии и все переменные, разделяемые между основным кодом и обработчиками прерываний, должны объявляться как volatile. Это одна из самых частых причин загадочных багов в embedded-коде.