stm — функциональность, специфичная для микроконтроллеров STM32¶
Этот модуль предоставляет функциональность, специфичную для микроконтроллеров STM32, включая прямой доступ к регистрам периферийных устройств.
Доступ к памяти¶
Модуль предоставляет три индексируемых объекта, используемых для прямого доступа к памяти. Каждый из них ведёт себя как разреженный массив, индексируемый по адресу байта: value = memN[addr] читает, memN[addr] = value записывает. Адрес всегда является адресом байта, независимо от ширины доступа.
Эти объекты памяти можно использовать в сочетании с приведёнными ниже константами регистров периферии для чтения и записи аппаратных регистров периферийных устройств микроконтроллера, а также любой другой ячейки в адресном пространстве SoC.
- stm.mem8¶
Индексируемый 8-битный аксессор памяти.
mem8[addr]читаетintв диапазоне 0-255 из байта по адресуaddr;mem8[addr] = valueзаписывает младшие 8 битvalue.addrможет быть любым адресом, выровненным по байту.
- stm.mem16¶
Индексируемый 16-битный (полуслово) аксессор памяти.
mem16[addr]читаетintв диапазоне 0-65535;mem16[addr] = valueзаписывает младшие 16 бит.addrдолжен быть выровнен по 2 байтам.
- stm.mem32¶
Индексируемый 32-битный (слово) аксессор памяти.
mem32[addr]читаетintв диапазоне 0-0xFFFFFFFF;mem32[addr] = valueзаписывает младшие 32 бита.addrдолжен быть выровнен по 4 байтам.
Константы регистров периферии¶
Модуль stm предоставляет полный набор адресов и смещений регистров CMSIS для того семейства STM32, под которое была скомпилирована прошивка. Имена в точности повторяют заголовочные файлы CMSIS от ST: STM32F427xx, STM32F765xx, STM32H743xx и STM32N657xx на OpenMV Cam семейств M4, M7, H7 (H7 / H7 Plus / Pure Thermal) и N6 соответственно. Полный набор имён составляет несколько сотен символов на семейство (271 на M4, 306 на M7, 494 на H7, 594 на N6); их перечисление здесь просто дублировало бы справочное руководство ST и заголовочные файлы CMSIS.
Используются два соглашения об именовании:
Константы, названные по экземпляру периферийного устройства (
GPIOA,USART1,TIM2, …), являются абсолютными базовыми адресами.Константы с префиксом типа периферийного устройства (
GPIO_BSRR,USART_CR1,TIM_CCR1, …) являются смещениями регистров относительно соответствующей базы.
Сложите абсолютную базу и смещение регистра, чтобы получить полный адрес отдельного регистра. Например, stm.GPIOA + stm.GPIO_BSRR – это абсолютный адрес GPIOA->BSRR.
Пример:
import stm
# set PA2 high
stm.mem32[stm.GPIOA + stm.GPIO_BSRR] = 1 << 2
# read PA3
value = (stm.mem32[stm.GPIOA + stm.GPIO_IDR] >> 3) & 1
Репрезентативные константы¶
Приведённая ниже выборка охватывает по одной записи на каждую основную категорию периферийных устройств, выбранную так, чтобы соглашение об именовании было понятно с первого взгляда. Все остальные символы CMSIS для целевой сборки также доступны в модуле – см. __getattr__() ниже, описывающий резервный вариант для средства проверки типов.
- stm.GPIOA: int¶
Базовый адрес периферийного устройства
GPIOA.GPIOB…GPIOK(диапазон зависит от корпуса микроконтроллера) следуют той же схеме.
- stm.USART1: int¶
Базовый адрес периферийного устройства
USART1. Другие экземпляры USART / UART доступны какUSART2,USART3,UART4… при их наличии.
- stm.SPI1: int¶
Базовый адрес периферийного устройства
SPI1. Дополнительные экземпляры SPI отображаются какSPI2,SPI3, … вплоть до количества, имеющегося у микроконтроллера.
- stm.TIM1: int¶
Базовый адрес таймера расширенного управления
TIM1. Таймеры общего назначения и базовые таймеры (TIM2…TIM17при наличии) следуют той же схеме именования.
- stm.ADC1: int¶
Базовый адрес
ADC1.ADC2/ADC3появляются на микроконтроллерах с несколькими блоками ADC.
- stm.DAC: int¶
Базовый адрес периферийного устройства DAC на тех микроконтроллерах, которые его имеют.
- stm.DMA1: int¶
Базовый адрес
DMA1.DMA2присутствует на большинстве STM32; детали класса H7 также предоставляютBDMA,MDMAи (на N6)HPDMA/GPDMA.
- stm.FLASH: int¶
Базовый адрес встроенного контроллера флеш-памяти (периферийного устройства, а не самого массива флеш-памяти).
- stm.TIM_CCR1: int¶
Смещение регистра захвата/сравнения 1 таймера.
TIM_CCR2…TIM_CCR4следуют на таймерах, имеющих несколько каналов.
- stm.__getattr__(name: str) int¶
Резервный вариант для динамических атрибутов: любой символ CMSIS, предоставляемый прошивкой, который не указан выше по отдельности (например,
stm.FDCAN1,stm.OCTOSPI1,stm.GPIO_AFR, различные сдвиги и маски битовых полей, …), по-прежнему разрешается в свой абсолютный адрес или смещение в видеint.Модуль времени выполнения помещает эти символы непосредственно в свой словарь globals при импорте, поэтому
__getattr__фактически никогда не вызывается. Сигнатура предоставляется исключительно для того, чтобы статические средства проверки типов (Pyright, Pylance, mypy) принималиstm.<any CMSIS name>без диагностики «module has no attribute».