Stm8l系列低功耗halt模式的自动唤醒

Stm8l系列低功耗halt模式的自动唤醒

By Derrick

注:该文档适用于以下系列:STM8L051/L052 Value Line, STM8L151/L152, STM8L162,STM8AL31, STM8AL3L MCU lines

Stm8L系列单片机的低功耗有五种模式:

  • wait模式
    Low power run模式
    Low power wait模式
    Active-halt with full RTC模式
    Halt模式

    最低功耗的就是就是halt模式。这里也主要总结一下如何进入halt模式,进入以后可以通过什么方式唤醒,以及有很多客户会关心的如何自动唤醒。

    Halt模式进入很简单,执行一条halt指令,调用库函数也就是halt()就行了。但是进入前要注意把所有的中断挂起标志给清除掉。要是不清零又恰巧有中断标志的时候进入该模式也会被立马唤醒。进入这种模式,所有的外设全都关闭了,所有时钟关闭。这时候它自己是醒不过来的,只能靠掐人中(给个外部中断)或者重新复活(重启复位)。当然这个在进入halt之前是要把中断引脚什么的该配置的给配置好了。

    那现在有个问题就是在halt模式下只能通过外部中断和复位了,我需要它自动醒过来怎么办?那就在进入的时候定个闹铃了(打开rtc),到点了就要醒过来。既然开了闹铃了它也就不是纯halt模式了。这时候也就叫做active-halt模式。Active-halt模式下可以打开个rtclcd。这里要说明一下,在stm8sstm8l101xx系列里面有AWU自动唤醒寄存器。这一系列里面却没有,它就是靠RTC来实现自动唤醒功能的。那现在就做个最简单的例程看看是如何使用rtc自动唤醒功能的:

    第一步:选择RTC时钟源(使用lse或者lsi
    CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);

    第二步:使能RTC的时钟
    CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);

    第三步:选择RTC唤醒时钟源
         RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);

    第四步:RTC唤醒计数中断使能 RTC_ITConfig(RTC_IT_WUT, ENABLE);

    第五步:使能所有中断
                                 enableInterrupts();

    以上是初始化进行配置的部分。而每次要进入halt模式的时候我们还需要执行以下的步骤:

    第一步:设置唤醒的时间:                         RTC_SetWakeUpCounter(5);

    第二步:RTC唤醒使能:                         RTC_WakeUpCmd(ENABLE);

    第三步:执行halt指令:                                 halt();

    下面是简单测试代码总体预览:


    当然还没完,要记得还有中断函数需要处理:

    INTERRUPT_HANDLER(RTC_CSSLSE_IRQHandler, 4)

    {

    RTC_ClearITPendingBit(RTC_IT_WUT); //中断标志位要清除

    GPIO_WriteBit(GPIOE,GPIO_Pin_7,SET); //测试,唤醒后led灯亮

    GPIO_WriteBit(GPIOC,GPIO_Pin_7,SET);

    }

    该例程仅仅是简单测试,一个大概的思路。详细的应用配置需要自己添加修改。注:唤醒后在CLK_ICKCR寄存器中的FHW位要是被至位,就使用HIS/8=2mhz的时钟源。否则就继续使用进入HALT模式之前的时钟源。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注