stm --- STM32 MCU 专用功能¶
本模块提供 STM32 微控制器专用的功能,包括对外设寄存器的直接访问。
内存访问¶
该模块暴露了三个可下标访问的对象,用于原始内存访问。每个对象都表现得像一个以字节地址为索引的稀疏数组:value = memN[addr] 用于读取,memN[addr] = value 用于写入。无论访问宽度如何,地址始终是字节地址。
这些内存对象可与下文的外设寄存器常量配合使用,以读写 MCU 硬件外设寄存器,以及 SoC 地址空间中的任何其他位置。
- stm.mem8¶
可下标访问的 8 位内存访问器。
mem8[addr]从addr处的字节读取一个 0-255 范围内的int;mem8[addr] = value写入value的低 8 位。addr可以是任何按字节对齐的地址。
- stm.mem16¶
可下标访问的 16 位(半字)内存访问器。
mem16[addr]读取一个 0-65535 范围内的int;mem16[addr] = value写入低 16 位。addr必须按 2 字节对齐。
- stm.mem32¶
可下标访问的 32 位(字)内存访问器。
mem32[addr]读取一个 0-0xFFFFFFFF 范围内的int;mem32[addr] = value写入低 32 位。addr必须按 4 字节对齐。
外设寄存器常量¶
stm 模块为固件所编译的目标 STM32 系列暴露全套 CMSIS 寄存器地址和偏移量。这些名称与 ST 的 CMSIS 头文件完全一致:在 M4、M7、H7 系列(H7 / H7 Plus / Pure Thermal)和 N6 OpenMV Cam 上分别为 STM32F427xx、STM32F765xx、STM32H743xx 和 STM32N657xx。每个系列的全套名称多达数百个符号(M4 上 271 个,M7 上 306 个,H7 上 494 个,N6 上 594 个);在此一一列举只会重复 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__() 类型检查器后备方案。