【问题标题】:Flags getting randomly set in RCC(Reset and Clock Control register) on Power On开机时在 RCC(复位和时钟控制寄存器)中随机设置标志
【发布时间】: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 和PORRSTFPINRSTF 是0?
  • @sukhbir1996 然后进行软件重置并检查值。请显示(相关部分)您的代码。正如我已经写过的:也许您必须检查 SFRSTF 是否为 1 并且 PORSTF 和 PINRSTF 都为 0 以检测软件复位,并且您可能需要做一些事情来清除标志。来自用户手册的引用:SFTRSTF:软件复位标志。发生软件复位时由硬件设置为“1”。通过写入 RMVF 位清除。
  • 如手册所述,前 4 位在上电(或引脚)复位时“无关紧要”,它们可以具有任何值只有当没有设置 PORSTF 和 PINRSTF 时,其他位才相关。即使这样,您也需要仔细阅读手册以了解这些位的条件。除了简单的单位检查之外,可能还有更多工作要做。

标签: embedded stm32 reset clock system-clock


【解决方案1】:

正如手册所说,前 4 位在上电(或引脚)复位时“无关紧要”,它们可以具有任何值

仅当 PORRSTFPINRSTF 均未设置时,其他位才相关。

即使这样,您也需要仔细阅读手册以了解这些位的条件。除了简单的单位检查之外,可能还有更多工作要做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    相关资源
    最近更新 更多