stm — 特定于STM32微控制器的功能

该模块提供了特定于STM32微控制器的功能,包括直接访问外设寄存器。

内存访问

此模块公开了三个用于原始内存访问的对象。

stm.mem8

读/写内存的8位。

stm.mem16

读/写内存的16位。

stm.mem32

读/写内存的32位。

使用下标符号 [...] 用感兴趣的地址来索引这些对象。

这些内存对象可以与外设寄存器的常量结合使用,以读取和写入MCU硬件外设的寄存器,以及地址空间的所有其他区域。

外设寄存器常量

该模块为从CMSIS头文件生成的寄存器定义了常量,并且可用的常量取决于正在编译的微控制系列。一些常量的示例包括:

stm.GPIOA

GPIOA 外设的基址。

stm.GPIOB

GPIOB外设的基址。

stm.GPIO_BSRR

GPIO位设置/重置寄存器的偏移量。

stm.GPIO_IDR

GPIO输入数据寄存器的偏移量。

stm.GPIO_ODR

GPIO输出数据寄存器的偏移量。

以外设命名的常量,如 GPIOA ,是该外设的绝对地址。以外设名称为前缀的常量,如 GPIO_BSRR ,是寄存器的相对偏移量。访问外设寄存器需要添加外设的绝对基址和相对寄存器偏移量。例如 GPIOA + GPIO_BSRRGPIOA->BSRR 寄存器的完整、绝对地址。

示例用法:

# set PA2 high
stm.mem32[stm.GPIOA + stm.GPIO_BSRR] = 1 << 2

# read PA3
value = (stm.mem32[stm.GPIOA + stm.GPIO_IDR] >> 3) & 1

特定于STM32WBxx 微控制器的函数

这些函数适用于STM32WBxx 微控制器,并与第二个CPU即RF核心交互。

stm.rfcore_status()

返回第二个CPU的状态,以整数形式(设备信息的第一个字)。

stm.rfcore_fw_version(id)

获取运行在第二个CPU上的固件版本。对于*id*,传入0获取FUS版本,传入1获取WS版本。

返回完整版本号的5元组。

stm.rfcore_sys_hci(ogf, ocf, data, timeout_ms=0)

在SYS通道上执行一个HCI命令。执行是同步的。

返回一个包含SYS命令结果的字节对象。

特定于 STM32WLxx 微控制器的函数

这些函数适用于 STM32WLxx 微控制器,并与集成的 “SUBGHZ” 无线电调制解调器外设交互。

stm.subghz_cs(level)

设置连接到无线电外设的内部 SPI CS 引脚。 level 参数是低电平有效的:真值表示 “CS 引脚高” 并取消信号,假值表示 “CS 引脚低” 并使信号有效。

使用 machine.SPI()id 值为 "SUBGHZ" 来实例化与此 CS 信号对应的内部 SPI 总线。

stm.subghz_irq(handler)

将内部 SUBGHZ 无线电中断处理程序设置为提供的函数。处理程序函数作为 “硬” 中断在无线电外设中断时调用。有关 MicroPython 中断处理程序的更多信息,请参阅 编写中断处理程序

将此函数与设置为None的处理程序参数调用以禁用IRQ。

由于硬件限制,每次此IRQ触发时,MicroPython在调用处理程序之前将其禁用。为了接收另一个中断,Python代码应调用 subghz_irq() 来重新设置处理程序。这具有重新启用IRQ的副作用。

stm.subghz_is_busy()

返回与无线电外设中的内部 “RFBUSYS” 信号对用的 bool 值。在将新命令通过SPI发送到无线电之前,应该轮询此函数直到它返回 False,以确认忙碌信号已经取消激活。