本帖最后由 hoop 于 2020-12-13 15:51 编辑
我对MCUDBG的功能理解
一般芯片内核进入调试状态时,外设无时钟不会动作,MCUDBG主要是为调试状态提供时钟,为外设的工作提供条件
MCUDBG结合低功耗(Stop)使用时:
若Bit位DBG_STOP=1时,不管是处于调试状态还是正常的运行,进入Stop后的系统时钟是HSI,且在退出Stop后如果不重新做时钟初始化的话,系统时钟就固定为HSI;
若Bit位DBG_STOP=0时,调试进Stop时Link会断线,正常运行进入Stop后的系统时钟会被切换到LSI,且在退出Stop后如果不重新做时钟初始化的话,系统时钟还会被切换到HSI。
原则上,正常进入Stop的话,HSI会被关掉,但是实测当DBG_STOP=1时,HSI被选做了系统时钟。
结论总结:
由此衍生注意点,如果Stop相关应用需要关注功耗的话,一定要在进入Stop前将DBG_STOP清零,即调用库函数MCUDBG_PeriphDebugModeConfig(MCUDBG_STOP, DISABLE);
当然推测此结论同样适用于Sleep及Standby,所以如下三句话建议所有低功耗相关应用都尽量去调用执行一次
MCUDBG_PeriphDebugModeConfig(MCUDBG_SLEEP, DISABLE);
MCUDBG_PeriphDebugModeConfig(MCUDBG_STOP, DISABLE);
MCUDBG_PeriphDebugModeConfig(MCUDBG_STANDBY, DISABLE);
特别说明一下:
前述特点在AT即ST上行为均相同,本贴的目的只是给各位小伙伴们分享下我之前做应用时候的一点心得体会
|