STM32的“开机”指首次上电(冷启动),而“复位”指运行中通过复位引脚、看门狗或软件触发重新启动(热启动)。硬件上,两者都会触发系统复位,但开机时电源电压从0上升,复位时序由POR(上电复位)保证;复位时电源已稳定,仅内部逻辑重置。区分方法:1)检查RCC->CSR寄存器中的复位标志位,如RCC_CSR_PORRSTF(上电复位)或RCC_CSR_PINRSTF(引脚复位),开机时PORRSTF置1,复位时可能为其他标志。2)在main函数开头读取并清除标志:
```c
if (RCC->CSR & RCC_CSR_PORRSTF) { /* 开机 */ }
else { /* 复位 */ }
RCC->CSR |= RCC_CSR_RMVF; // 清除标志
```
实操建议:区分场景用于初始化策略,如开机时校准外设,复位时保留RAM数据。注意:若复位由看门狗触发,标志为IWDGRSTF,需单独判断。
mcuku 阿沐 · 2026-08-18