【发布时间】:2022-01-12 13:08:48
【问题描述】:
我正在开发 MM32Spin05 MCU。上电后,RCC(复位和时钟控制)寄存器中的所有 6 个标志都被设置。 复位后,该寄存器的默认值应为 0X XC000000。 但我将其观察为 0X FC000000。 对于看门狗定时器、低功耗模块或软件重置,我没有做任何事情。
我有一个要求,如果软件复位完成,闪存中的某个页面将被清除。但是在启动时,由于我不知道的原因设置了标志,因此闪存页面正在被清除。 我实际上正在执行电源重置。我正在关闭然后打开 MCU 的电源。在启动时,软件复位标志被设置,因此,根据我的代码,它正在触发闪存页面擦除。闪存页只能在软件复位时擦除,而不是电源复位。 MCU 启动后,我立即打印 RCC_CSR 寄存器值,看到所有 6 个标志都设置了。
LPWRRSTF:低功耗复位标志WDGRSTF:窗口看门狗复位标志IWDGRSTF:独立看门狗复位标志SFTRSTF:软件复位标志PORRSTF: POR/PDR 复位标志PINRSTF: PIN 复位标志
我很困惑,为什么电源重置会导致软件重置标志设置?
我在这个问题上坚持了一个多星期,对此一无所知。非常欢迎任何帮助或建议。 提前致谢
【问题讨论】:
-
0X XC000000中额外的X可能意味着该半字节中的位在重置时未定义,或者可能未修改。文档说什么? -
那么你的问题是什么?你的问题是什么?如果位被标记为“不关心”,也许你不应该在复位后关心它们的值。相反,如果您需要在开机时将它们设置为特定值,您可能也应该在重置时这样做。
-
请edit您的问题描述您的要求,而不是使用 cmets 添加信息。请显示不同类型复位后的寄存器值。也许你必须检查
SFTRSTF是1 和PORRSTF和PINRSTF是0? -
@sukhbir1996 然后进行软件重置并检查值。请显示(相关部分)您的代码。正如我已经写过的:也许您必须检查 SFRSTF 是否为 1 并且 PORSTF 和 PINRSTF 都为 0 以检测软件复位,并且您可能需要做一些事情来清除标志。来自用户手册的引用:
SFTRSTF:软件复位标志。发生软件复位时由硬件设置为“1”。通过写入 RMVF 位清除。 -
如手册所述,前 4 位在上电(或引脚)复位时“无关紧要”,它们可以具有任何值。 只有当没有设置 PORSTF 和 PINRSTF 时,其他位才相关。即使这样,您也需要仔细阅读手册以了解这些位的条件。除了简单的单位检查之外,可能还有更多工作要做。
标签: embedded stm32 reset clock system-clock