打印
[STM8]

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

[复制链接]
25321|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
_Hanking|  楼主 | 2014-2-21 11:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的程序在Debug时,进入halt()模式,程序就会跑飞,不知是哪里设置的不对?
或者谁有可用的例程参考下

主函数里的代码:
while(1)
        {
               
                USART_Process();
                TemporaryDataPro();
                TransmitSportDataProcess();
                timeprocess();
               
                if(0==KEYDELAY && 0==BlueToothPowerUpFlag)
                {
                        PWR_FastWakeUpCmd(ENABLE);
                            PWR_UltraLowPowerCmd(ENABLE);
                       
                        RTC_SetWakeUpCounter(2047);
                        RTC_WakeUpCmd(ENABLE);
                        halt();
                       
                        RTC_WakeUpCmd(DISABLE);
                }

                //可以用RTC来唤醒,1、选择RT时钟源 2、使能RTC
                //3、选择RTC唤醒时钟源 4、RTC中断使能 5、设置唤醒时间 6、唤醒使能
        }
RTC时钟设置:
void RTC_Config(void)
{
        CLK_LSEConfig(CLK_LSE_ON);
        while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);
        CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);
        CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
       
        RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
        RTC_ITConfig(RTC_IT_WUT, ENABLE);
       
        enableInterrupts();
}
中断函数代码:
#pragma vector=6
__interrupt void RTC_IRQHandler(void)
{
        interflag=1;
        adflag=1;
        EnergyDisplay(125);
        RTC_ClearITPendingBit(RTC_IT_WUT);  
}
沙发
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都是允许工作的。你烧代码下去,脱机看看跑的效果。

使用特权

评论回复
5
_Hanking|  楼主 | 2014-2-26 11:33 | 只看该作者
grant_jx 发表于 2014-2-21 14:49
程序还是跑飞。。。?
挂起后,在线debug工具是连不上MCU的,你是如何知道你的代码跑飞了?
如果仅是时钟源 ...

忘记结贴,搞定了,谢谢

使用特权

评论回复
6
samniuniu| | 2014-3-4 20:11 | 只看该作者
_Hanking 发表于 2014-2-26 11:33
忘记结贴,搞定了,谢谢

怎么搞定的?什么原因?请说明下~

使用特权

评论回复
7
mybao| | 2014-3-4 20:26 | 只看该作者
STM8L低功耗,顶

使用特权

评论回复
8
_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();
                }

使用特权

评论回复
9
xiaox314| | 2014-3-7 14:13 | 只看该作者

使用特权

评论回复
10
tiantangwuzhe| | 2014-5-2 17:44 | 只看该作者
_Hanking 发表于 2014-3-6 13:45
void RTC_Config(void)
{
        CLK_LSEConfig(CLK_LSE_ON);

mark

使用特权

评论回复
11
FAQ| | 2014-5-2 17:51 | 只看该作者

使用特权

评论回复
12
aichixiaobaicai| | 2014-8-22 16:18 | 只看该作者

使用特权

评论回复
13
zg1452| | 2016-10-9 11:06 | 只看该作者
楼主,能方便学习一下吗?

使用特权

评论回复
14
a88mm| | 2016-10-31 09:09 | 只看该作者
6666666666666666666666666666666666

使用特权

评论回复
15
122592240| | 2017-7-4 10:30 | 只看该作者
谢谢楼主分享啊

使用特权

评论回复
16
wb731407749| | 2017-7-5 11:11 | 只看该作者
感谢分享过程

使用特权

评论回复
17
husoffer| | 2017-11-23 08:48 | 只看该作者
帖子很不错,感谢楼主分享

使用特权

评论回复
18
祭念草| | 2018-9-6 15:38 | 只看该作者
楼主,你好。现在也在学习STM8的低功耗,能否发个例程学习一下,十分感激。669194826@qq.com

使用特权

评论回复
19
yiyigirl2014| | 2018-9-6 18:08 | 只看该作者
定时器中断不就触发了吗?然后处理完再进入低功耗。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

37

帖子

2

粉丝