项目需求,需要实现设备低功耗功能,实现过程中遇到几个问题,以此记录总结。(stm32f103ret6)
问题一:执行PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);后,程序继续执行,看到的现象像是没有进入休眠。
调试步骤:
1.关闭自己的时钟配置,调用启动函数中默认的SystemInit()
2.关闭相关外设初始化,只开启串口一以追踪程序运行流程和一个IO中断以唤醒
现象:能进入终端并且正常唤醒
3.换为调用自己的时钟,休眠不了,一步步打开相关时钟配置没问题直到开启了
SysTick_Config(SystemCoreClock / 1000 ) //1ms定时器
就休眠失败
源码贴图如下:
原因:开始以为把所有的外设中断关闭就没事了,其实系统时钟开了个1Ms的系统定时中断(功能需要)
【解决方式】:
方式一:.注释SysTick_Config(SystemCoreClock / 1000)
方式二:.在进入休眠之前,关闭系统定时器,清空计数值
SysTick->CTRL = 0x00;//关闭定时器
SysTick->VAL = 0x00;//清空val,清空定时器
功能需要不能关闭,选择方式二
【补充说明】:
SysTick系统定时