硬汉嵌入式论坛

 找回密码
 立即注册
查看: 649|回复: 4
收起左侧

调用系统复位时会导致电源复位标志也置位

[复制链接]

4

主题

7

回帖

19

积分

新手上路

积分
19
发表于 2025-1-25 00:10:22 | 显示全部楼层 |阅读模式
在软件调用系统软件复位 NVIC_SystemReset();  会导致下面的软件判断到电源复位标志也置位了



if (0x00 != __HAL_RCC_GET_FLAG(RCC_FLAG_PORRST)) {
// 调用系统软件复位,代码却会执行到这里
}

按照文档说明,不应该只有冷启动时,RCC_FLAG_PORRST 才会置位吗? 为什么调用系统复位也会导致这个标志置位呢?



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2025-1-25 06:21:45 | 显示全部楼层

你试试硬件复位检测到标志是那个

STM32F429的看门狗复位,软件复位等反映在硬件上就是发了一个信号给硬件复位端



回复

使用道具 举报

4

主题

7

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2025-1-25 13:18:58 | 显示全部楼层
如果我直接对外部复位引脚进行复位的话,我查看寄存器的值是下图所示,也就是说 CSR寄存器里面 PINRSTF PORRSTF SFTRSTF 这三个标志都置位了。 为什么外部引脚复位也会导致  PORRSTF 这个上电复位标志也置位呢?明明没有操控电源呀。 同理,我调用软件复位NVIC_SystemReset(),这三个标志也会同时置位的。
1737782114099.png
回复

使用道具 举报

4

主题

7

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2025-1-25 13:35:59 | 显示全部楼层
这个问题找到了,应该是调用  NVIC_SystemReset() 时,会把寄存器都复位到默认值,而刚好CSR寄存器的默认值中,PORRST 一直是1的,所以判断出来置位了。
1737783243235.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2025-1-26 10:13:31 | 显示全部楼层
yey 发表于 2025-1-25 13:35
这个问题找到了,应该是调用  NVIC_SystemReset() 时,会把寄存器都复位到默认值,而刚好CSR寄存器的默认值 ...

大概率就是这个原因了,谢谢告知。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-9 22:35 , Processed in 0.271052 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表