[技术问答] CPU复位和系统复位有啥区别

[复制链接]
189|20
大鹏2365 发表于 2026-10-18 10:20 | 显示全部楼层
有些工程师喜欢用“软复位”来重启系统,觉得比硬复位快。但要注意,软复位(CPURF)不会清除所有外设状态,比如 UART 的 FIFO、定时器的计数值可能还保留着。如果代码没做好初始化,重启后可能出现诡异行为。系统复位(SYSRF)则更彻底,适合需要完全重置的场景
MessageRing 发表于 2026-10-18 12:30 | 显示全部楼层
CPU复位只复位内核,系统复位更全面,查手册看具体芯片定义。
pacer81 发表于 2026-10-18 12:58 | 显示全部楼层
CPURF/CPU Reset Flag
The CPU reset flag is set by hardware if software writes CPURST (SYS_IPRST0[1]) 1 to
reset Cortex-M23 core and RRAM Memory Controller (RMC).
0 = No reset from CPU.
1 = The Cortex-M23 core and RMC are reset by software setting CPURST to 1.
Note: Write 1 to clear this bit to 0.

SYSRF/System Reset Flag
The system reset flag is set by the “Reset Signal” from the Cortex-M23 core to indicate the
previous reset source.
0 = No reset from Cortex-M23.
1 = The Cortex-M23 had issued the reset signal to reset the system by writing 1 to the bit
SYSRESETREQ(AIRCR[2], Application Interrupt and Reset Control Register, address =
0xE000ED0C) in system control registers of Cortex-M23 core.
Note: Write 1 to clear this bit to 0.
pacer81 发表于 2026-10-18 13:01 | 显示全部楼层
系统复位是CPU发出的reset signal,CPU复位是发给CPU让CPU复位的
System Reset Flag
The system reset flag is set by the “Reset Signal” from the Cortex-M23 core to indicate the
previous reset source.
0 = No reset from Cortex-M23.
1 = The Cortex-M23 had issued the reset signal to reset the system by writing 1 to the bit
SYSRESETREQ(AIRCR[2], Application Interrupt and Reset Control Register, address =
0xE000ED0C) in system control registers of Cortex-M23 core.
Note: Write 1 to clear this bit to 0.

CPU Reset Flag
The CPU reset flag is set by hardware if software writes CPURST (SYS_IPRST0[1]) 1 to
reset Cortex-M23 core and RRAM Memory Controller (RMC).
0 = No reset from CPU.
1 = The Cortex-M23 core and RMC are reset by software setting CPURST to 1.
Note: Write 1 to clear this bit to 0.
t61000 发表于 2026-10-19 12:44 | 显示全部楼层
调试时如果发现 CPURF 频繁置位,但代码里没有复位指令,可能是编译器优化导致的。比如某些内联函数或中断嵌套场景下,编译器可能生成了意外的复位相关指令。建议关闭优化或用反汇编窗口检查关键代码段,确认没有隐藏的复位操作
有何不可0365 发表于 2026-10-21 11:15 | 显示全部楼层
在多核或复杂 SoC 里,CPURF 和 SYSRF 的定义可能更复杂。比如某个核的复位可能只影响自己,而系统复位会影响所有核和共享资源。新唐 NUC980 这类带 DDR 的芯片,复位机制可能涉及多个层级,建议仔细阅读芯片参考手册的复位章节,别套用简单 MCU 的经验
樱花树维纳斯 发表于 2026-10-21 15:43 | 显示全部楼层
CPU 复位仅重置内核、寄存器,保留外设、RAM、时钟与 I2C/UART 等外设状态,外设继续运行。系统复位会复位内核 + 全部外设,时钟、寄存器、IO 恢复默认,RAM 数据一般清零。调试时 CPU 复位可快速重启程序而不中断外设总线;系统复位类似上电重启,适合故障全面恢复。
漫天星yl 发表于 2026-10-22 11:12 | 显示全部楼层
关于“代码自己复位”,除了显式的软复位指令,还要警惕隐式触发。比如访问非法地址触发 HardFault,如果 HardFault 处理函数里又调用了复位函数,就会形成连锁反应。建议在 HardFault 处理函数里加个计数器或日志,避免无限循环复位
kqh11a 发表于 2026-10-23 13:10 | 显示全部楼层
系统复位(SYSRF)后,备份域寄存器(如 RTC、备份 SRAM)的内容通常会被保留,而 CPU 复位(CPURF)可能会清除部分备份域内容。如果你的应用依赖这些数据做状态恢复,务必确认复位类型对备份域的影响,别因为复位方式不同导致数据丢失
wailian1265k 发表于 2026-10-25 10:15 | 显示全部楼层
关于“调试器操作”,有些 IDE 在烧录固件后会自动执行一次复位,这也会置位 CPURF。如果你刚烧录完就看到 CPURF=1,别慌,这是正常行为。可以在烧录设置里关闭“烧录后复位”选项,或者在代码里加个延时再检查标志位,避开这个干扰
江河千里 发表于 2026-10-25 20:20 | 显示全部楼层
实际调试时如果看到CPURF置位,检查你的IDE是不是点了复位按钮或者用了Connect Under Reset;SYSRF置位就看代码里有没有写AIRCR的SYSRESETREQ。
caoyunhj2301 发表于 2026-10-26 14:46 | 显示全部楼层
RSTSTS 寄存器的标志位是“粘性”的,一旦置位就不会自动清除,必须软件手动写 1 清除。如果你在初始化代码里没清干净,下次复位时读到的可能是上次残留的值。建议在 main 函数开头就调用 SYS_GetResetSrc() 并立即清除所有标志位,确保后续判断准确
又见春光 发表于 2026-10-28 11:07 | 显示全部楼层
新唐 MCU 中,CPU 复位仅复位内核、寄存器,外设与 RAM 保持状态,外设继续运行;系统复位会重置内核、所有外设、寄存器,但保留部分安全区域。CPU 复位适合局部故障恢复;系统复位类似整机重启。排查异常时读取 RSTSTS,区分复位类型,方便选择故障恢复策略。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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