[STM8] STM8L进如Active Halt(低功耗)后,如何使用RTC定时一秒自动唤醒

[复制链接]
26063|18
 楼主| _Hanking 发表于 2014-2-21 11:42 | 显示全部楼层 |阅读模式
我的程序在Debug时,进入halt()模式,程序就会跑飞,不知是哪里设置的不对?
或者谁有可用的例程参考下

主函数里的代码:
  1. while(1)
  2.         {
  3.                
  4.                 USART_Process();
  5.                 TemporaryDataPro();
  6.                 TransmitSportDataProcess();
  7.                 timeprocess();
  8.                
  9.                 if(0==KEYDELAY && 0==BlueToothPowerUpFlag)
  10.                 {
  11.                         PWR_FastWakeUpCmd(ENABLE);
  12.                             PWR_UltraLowPowerCmd(ENABLE);
  13.                        
  14.                         RTC_SetWakeUpCounter(2047);
  15.                         RTC_WakeUpCmd(ENABLE);
  16.                         halt();
  17.                        
  18.                         RTC_WakeUpCmd(DISABLE);
  19.                 }

  20.                 //可以用RTC来唤醒,1、选择RT时钟源 2、使能RTC
  21.                 //3、选择RTC唤醒时钟源 4、RTC中断使能 5、设置唤醒时间 6、唤醒使能
  22.         }
RTC时钟设置:
  1. void RTC_Config(void)
  2. {
  3.         CLK_LSEConfig(CLK_LSE_ON);
  4.         while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);
  5.         CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);
  6.         CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
  7.        
  8.         RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
  9.         RTC_ITConfig(RTC_IT_WUT, ENABLE);
  10.        
  11.         enableInterrupts();
  12. }
中断函数代码:
  1. #pragma vector=6
  2. __interrupt void RTC_IRQHandler(void)
  3. {
  4.         interflag=1;
  5.         adflag=1;
  6.         EnergyDisplay(125);
  7.         RTC_ClearITPendingBit(RTC_IT_WUT);  
  8. }
grant_jx 发表于 2014-2-21 12:13 | 显示全部楼层
在STM8L的固件库下面不是有参考代码吗?
STM8L15x_StdPeriph_Examples\LCD\LCD_SegmentsDrive\

   The first step consists in displaying "STM8L" string on LCD glass in scrolling mode.
   Then, "LP MODE" string is blinking on LCD glass before entering in HALT mode,
   When the MCU enters in Halt mode the " HALT  " string is displayed on LCD
   glass.
   After 10 seconds the MCU wakes up from HALT mode (by RTC wakeup interrupt   
   and continues processing.
   These Steps are repeated in infinite loop.
 楼主| _Hanking 发表于 2014-2-21 13:49 | 显示全部楼层
grant_jx 发表于 2014-2-21 12:13
在STM8L的固件库下面不是有参考代码吗?
STM8L15x_StdPeriph_Examples\LCD\LCD_SegmentsDrive\

我用的时钟是LSE(32.768K)分频后定时; 他用的RCT时钟是LSI,分频后的1Hz定时。程序还是跑飞。。。
grant_jx 发表于 2014-2-21 14:49 | 显示全部楼层
程序还是跑飞。。。?
挂起后,在线debug工具是连不上MCU的,你是如何知道你的代码跑飞了?
如果仅是时钟源,没问题,Active Halt下,LSE和LSI都是允许工作的。你烧代码下去,脱机看看跑的效果。
 楼主| _Hanking 发表于 2014-2-26 11:33 | 显示全部楼层
grant_jx 发表于 2014-2-21 14:49
程序还是跑飞。。。?
挂起后,在线debug工具是连不上MCU的,你是如何知道你的代码跑飞了?
如果仅是时钟源 ...

忘记结贴,搞定了,谢谢
samniuniu 发表于 2014-3-4 20:11 | 显示全部楼层
_Hanking 发表于 2014-2-26 11:33
忘记结贴,搞定了,谢谢

怎么搞定的?什么原因?请说明下~
mybao 发表于 2014-3-4 20:26 | 显示全部楼层
STM8L低功耗,顶
 楼主| _Hanking 发表于 2014-3-6 13:45 | 显示全部楼层
samniuniu 发表于 2014-3-4 20:11
怎么搞定的?什么原因?请说明下~

void RTC_Config(void)
{
        CLK_LSEConfig(CLK_LSE_ON);
        CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);
        while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);
       
        RTC_WakeUpCmd(DISABLE);
        CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
        RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
        RTC_ITConfig(RTC_IT_WUT, ENABLE);
        RTC_SetWakeUpCounter(2047);

        ITC_SetSoftwarePriority(RTC_IRQn, ITC_PriorityLevel_3);//优先级
       
        enableInterrupts();
}

__interrupt void RTC_IRQHandler(void)
{               
        RTC_WakeUpCmd(DISABLE);
        interflag=1;
        adflag=1;
//        EnergyDisplay(125);
        RTC_ClearITPendingBit(RTC_IT_WUT);  
}

主函数中进入Active Halt模式部分代码
                if(0==KEYDELAY && 0==BlueToothPowerUpFlag)
                {
                        PWR_FastWakeUpCmd(ENABLE);
                            PWR_UltraLowPowerCmd(ENABLE);
                       
                        RTC_ITConfig(RTC_IT_WUT, ENABLE);
                        RTC_WakeUpCmd(ENABLE);
                        halt();
                }
xiaox314 发表于 2014-3-7 14:13 | 显示全部楼层
tiantangwuzhe 发表于 2014-5-2 17:44 | 显示全部楼层
_Hanking 发表于 2014-3-6 13:45
void RTC_Config(void)
{
        CLK_LSEConfig(CLK_LSE_ON);

mark
FAQ 发表于 2014-5-2 17:51 | 显示全部楼层
aichixiaobaicai 发表于 2014-8-22 16:18 | 显示全部楼层
zg1452 发表于 2016-10-9 11:06 | 显示全部楼层
楼主,能方便学习一下吗?
a88mm 发表于 2016-10-31 09:09 | 显示全部楼层
6666666666666666666666666666666666
122592240 发表于 2017-7-4 10:30 | 显示全部楼层
谢谢楼主分享啊
wb731407749 发表于 2017-7-5 11:11 | 显示全部楼层
感谢分享过程
husoffer 发表于 2017-11-23 08:48 | 显示全部楼层
帖子很不错,感谢楼主分享
祭念草 发表于 2018-9-6 15:38 | 显示全部楼层
楼主,你好。现在也在学习STM8的低功耗,能否发个例程学习一下,十分感激。669194826@qq.com
yiyigirl2014 发表于 2018-9-6 18:08 | 显示全部楼层
定时器中断不就触发了吗?然后处理完再进入低功耗。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

37

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部