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_BSRR
是 GPIOA->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
,以确认忙碌信号已经取消激活。