stm — функціональність, специфічна для мікроконтролерів STM32#
Цей модуль надає функціональність, специфічну для мікроконтролерів STM32, включаючи прямий доступ до регістрів периферійних пристроїв.
Доступ до пам’яті#
Модуль надає три індексовані об’єкти для прямого доступу до пам’яті. Кожен поводиться як розріджений масив, індексований байтовою адресою: value = memN[addr] — читання, memN[addr] = value — запис. Адреса завжди є байтовою, незалежно від ширини доступу.
Ці об’єкти пам’яті можна використовувати разом із константами регістрів периферійних пристроїв нижче для читання та запису регістрів апаратних периферійних пристроїв MCU, а також будь-якого іншого місця в адресному просторі 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, для якої скомпільовано мікропрограму. Імена точно відповідають заголовкам ST CMSIS: 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(діапазон залежить від корпусу MCU) дотримуються того самого шаблону.
- stm.USART1: int#
Базова адреса периферійного пристрою
USART1. Інші екземпляри USART / UART доступні якUSART2,USART3,UART4… залежно від наявності.
- stm.SPI1: int#
Базова адреса периферійного пристрою
SPI1. Додаткові екземпляри SPI доступні якSPI2,SPI3, … до кількості, підтримуваної MCU.
- stm.TIM1: int#
Базова адреса вдосконаленого таймера керування
TIM1. Таймери загального призначення та базові (TIM2…TIM17за наявності) дотримуються того самого іменування.
- 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.Модуль під час виконання заповнює ці символи безпосередньо у свій словник глобальних змінних під час імпорту, тому
__getattr__фактично ніколи не викликається. Сигнатура надається виключно для того, щоб статичні засоби перевірки типів (Pyright, Pylance, mypy) приймалиstm.<any CMSIS name>без діагностики «модуль не має атрибута».