你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请大家帮忙看看,怎么STM8L151的RTC AWU只能实现第一次正常中断,以后唤醒时间都不对了?

[复制链接]
KE-365049 提问时间:2013-6-14 17:40 /
 
                                                
程序如下,怎么STM8L151的RTC AWU只能实现第一次正常?以后的中断定时时间就不对了、很短、用示波器才能看到、好像定时计数器WUT不能自动重装似的。
                        请高手指导!
                        void RTC_AWU()
                        {
                          CLK_PCKENR2 |= 0x04;                //外设RTC时钟允许,Frtc = Flsi/8 = 38K/8
                          CLK_CRTCR = 0x04;                   //CLK_CRTCR[7:5]=000B 则RTC clock source/1
                                                                         //CLK_CRTCR[4;1]=0010B 则选择LSI
                          while( (CLK_CRTCR&0x01) == 0x1 );   //CLK_CRTCR[0]=1为忙
                          
                          //RTC解锁,必须先写0xCA后写0x53
                          RTC_WPR = 0xCA;
                          RTC_WPR = 0x53;
                          
                          RTC_CR2_WUTE = 0;                   //必须先清专用定时器唤醒允许位,再操作RTC其它寄存器
                          
                          RTC_CR1 = 0x00;                     //wakeup时钟选择,RTC_CR1[2:0]=000B则选择 RTCCLK/16
                          
                          while( RTC_ISR1_WUTWF == 0 );       //等待wakeup时钟允许,即:WUTWF=1为允许
                          
                          //写定时计数器的值(下向计数的)   
                          // Wakeup周期 = 1/(Frtc/8/16)*(WUT[15:0]+1)
                          //            = 1/(38K/8/16)*(10000+1)
                          //            = 3.368ms*10001 =
                          RTC_WUTRH = 10000/256;
                          RTC_WUTRL = 10000%256;              
                          
                          RTC_CR2_WUTIE = 1;
                          RTC_CR2_WUTE = 1; 
                          asm("RIM");
                        }
                        
                        //********************************************************************************
                        //RTC AWU中断
                        #pragma vector=0X06 
                        __interrupt void RTC_AWU_vector() 
                        { 
                        
                           RTC_ISR2_WUTF = 0;                  //清RTC AWU中断标志
                             
                           LED_out = !PD_IDR_IDR2;   
                        }
            
             
             
            
            
            
            收藏0顶、支持0             

            
收藏 评论4 发布时间:2013-6-14 17:40

举报

4个回答
zykzyk-93033 回答时间:2013-6-14 22:12:35

RE:请大家帮忙看看,怎么STM8L151的RTC AWU只能实现第一次正常中断,以后唤醒时间都不对了?

有没有其它高级的中断源啊?
废鱼 回答时间:2013-6-15 09:24:20

RE:请大家帮忙看看,怎么STM8L151的RTC AWU只能实现第一次正常中断,以后唤醒时间都不对了?

RTC闹钟中断,每次都要重新设置下一次中断的时间。
KE-365049 回答时间:2013-6-16 19:41:16

回复:请大家帮忙看看,怎么STM8L151的RTC AWU只能实现第一次正常中断,以后唤醒时间都不对了?

回复第 2 楼 于2013-06-14 22:12:35发表:
有没有其它高级的中断源啊?
没其它中断源,只有这个。
还有STM8L运行的功耗比手册说的要大得多。
 
KE-365049 回答时间:2013-6-16 19:42:55

回复:请大家帮忙看看,怎么STM8L151的RTC AWU只能实现第一次正常中断,以后唤醒时间都不对了?

回复第 3 楼 于2013-06-15 09:24:20发表:
RTC闹钟中断,每次都要重新设置下一次中断的时间。
试过了,重装计数时间也不行,手册上说能自动重装计数器的。
 

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版