stm8 低功耗 RTC唤醒
本人在网上百度了很多教程以后,受益匪浅,但很多时候看的半知半懂,所以觉得写一篇完整的教程给大家。
降低功耗的方法
降低系统时钟:
比如你现在的系统时钟为主时钟16M,那么你可以通过分频器降到8M,2M等:
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
关闭未使用的时钟:
从我入门单片机以来,没进入低功耗的世界时,一般都是习惯用哪个时钟把哪个时钟打开,如果是低功耗单片机,我们可以把不用的外设关掉,比如我们关掉TIM1时钟:
CLK_PeripheralClockConfig(CLK_Peripheral_TIM1,DISABLE);
关闭所有未使用的模拟功能块
如果你的设计方案在低功耗模式下,不需要CPU运行的话,那么你可以选择将stm8进入以下模式:
等待(Wait)
活跃停机(Active Halt)(可配置为慢速或快速唤醒)
停机(Halt) (可配置为慢速或快速唤醒)
我们主要讨论这三种模式:
等待模式:
在运行模式下执行WFI指令,进入等待模式。
COU停止运行,外设与中断控制器仍保持运行,可外设时钟门控,降低CPU频率,以及选择低功耗时钟源(LSI,HSI)结合使用。
所有寄存器与RAM的内容保持不变,之前所定义的时钟配置也保持不变。
当一个内部外部中断请求产生的时,CPU从等待模式唤醒并恢复工作。
停机模式:
主时钟停止,由fMASTER提供时钟的CPU及所有外设均被关闭,因此所有外设均被关闭。
所有寄存器与RAM的值保持不变,默认情况下时钟配置也保持不变。
MCU通过执行HALT指令进入停机模式,外部中断可将MCU从停机模式唤醒。
这种模式下,主电压调节器关闭,仅低电压调节器处于工作状态。
为了减少MCU的唤醒时间,
建议在进入暂停模式前选择HSI做为fMASTER的时钟源。
活跃停机模式:
活跃停机模式与停机模式类似,但它不需要外部中断唤醒。它使用AWU,在一定的延时后产生一个内部唤醒事件,延迟时间是用户可编程的。
在这里,我们介绍一下AWU:
AWU是用来当MCU进入低功耗的活跃停机(Active Halt)模式时提供一个内部的唤醒时间基准。该时间基准的时钟是由内部的低速RC振荡器时钟(LSI)或者通过预分频的HSE晶振时钟来提供的。