[STM32F1] STM32 的 C 语言细节:寄存器访问与 volatile 的正确用法

[复制链接]
13|1
STM32 的标准外设库与 HAL 都基于 CMSIS 头文件,C 语言层面有几个高频坑,记录如下:

1. 头文件里的 __IO 宏展开就是 volatile。自己写寄存器操作时不要把 volatile 丢掉,否则 -O2 下轮询标志位会被优化成死循环。

2. 用结构体指针映射外设寄存器时,务必保证成员对齐与手册一致,不要随手加 packed;对齐方式变了会出现异常访问。

3. 中断优先级分组必须在初始化任何中断之前配置完成,运行中改分组会让已配置的优先级全部错乱。

4. 位带(Bit-Band)在 C 语言里通常写成宏,别名地址要按字对齐计算,算错就会写到相邻寄存器上。

5. 用 weak 属性提供可覆盖的回调是常见做法,可以不改库文件就实现自定义初始化。

以上,供参考。
szt1993 发表于 2026-9-19 14:45 | 显示全部楼层
访问外设寄存器必须加 volatile,中断与主循环共享标志位也要,否则编译器优化会吞掉读写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

435

主题

3681

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部
0