1.停止模式唤醒后从哪里执行?

  • 停止模式特性

    • MCU 在进入停止模式时,会保存当前的上下文(包括程序计数器和寄存器状态)。
    • 当有有效的唤醒事件时,MCU 会退出停止模式,并从进入模式时暂停的指令处继续执行。
  • 执行流程

    • 唤醒后,MCU 不会重新复位,也不会从主函数 main() 开始,而是直接从调用
       HAL_PWR_EnterSTOPMode()
      的下一行代码继续。

2. 系统时钟在停止模式中的变化

进入停止模式后,MCU 的时钟系统被部分或完全关闭以节省功耗:

  • 主系统时钟(如 HSE 和 PLL)停止运行
  • 低功耗时钟(如 HSI 或 LSI)可能保留,用于唤醒事件源(如 RTC、LPTIM)
  • 唤醒时,MCU 默认使用内部高速时钟(HSI)。

3. 唤醒后为什么需要重新配置时钟?

  • 唤醒后,虽然 MCU 从停止的地方继续执行,但默认的系统时钟可能已经发生了变化:

    • 系统时钟切换为 HSI(默认 8 MHz)。
    • 如果应用需要更高的时钟频率(如 PLL 运行在 72 MHz)或外部时钟(如 HSE),需要重新配置。
  • 直接执行代码的影响:

    • 许多外设(如 UART、SPI 等)依赖于特定的时钟频率。默认切换到 HSI 后,这些外设可能无法正常工作。
    • 因此,唤醒后立即调用 SystemClock_Config(),恢复系统时钟到应用预期的状态。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐