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

查看: 20384|回复: 10

请教用STM8L151的RTC唤醒

[复制链接]

1

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-6-26 10:15:24 | 显示全部楼层 |阅读模式
小弟在项目中要用到LSI时钟作为RTC唤醒功能的时钟,不知道各位大虾能不能提供一点例程,小弟刚刚接触STM8l系列单片机,在网上查了一下,基本上都是用LSE作为RTC的唤醒时钟的。
<
回复

使用道具 举报

7

主题

78

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-6-28 14:36:09 | 显示全部楼层

RE:请教用STM8L151的RTC唤醒

www.soiseek.cn/STMICROELECTRONICS/STM8L151C4/相信楼主看了会有所收获的
回复 支持 0 反对 1

使用道具 举报

2

主题

535

回帖

0

蝴蝶豆

金牌会员

最后登录
1970-1-1
发表于 2012-6-28 16:08:48 | 显示全部楼层

RE:请教用STM8L151的RTC唤醒

完整的测试程序:判断出首次启动程序,单片机处于正常状态时看门狗复位,单片机处于待机模式下被闹钟唤醒/看门狗唤醒.
注意:每次看门狗复位都要被重新配置启动
&lt;div class=&quot;dp-highlighter bg_cpp&quot;&gt;//检查是否正常状态发生看门狗复位   
&lt;ol class=&quot;dp-cpp&quot;&gt;    if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)  
    &lt;li class=&quot;alt&quot;&gt;{          //清楚标志位   
    &lt;li class=&quot;alt&quot;&gt;    RCC_ClearFlag();        
    &lt;li class=&quot;alt&quot;&gt;    //RTC功能开启           //使能外部晶振   
    &lt;li class=&quot;alt&quot;&gt;    RCC_LSEConfig(RCC_LSE_ON);          //等待外部晶振准备好   
    &lt;li class=&quot;alt&quot;&gt;    while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);        
    &lt;li class=&quot;alt&quot;&gt;    //设置RTC时钟为外部晶振           RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);  
    &lt;li class=&quot;alt&quot;&gt;          //使能RTC时钟   
    &lt;li class=&quot;alt&quot;&gt;    RCC_RTCCLKCmd(ENABLE);          //等待RTC_CTL寄存器中的RSF位(寄存器同步标志)被硬件置1   
    &lt;li class=&quot;alt&quot;&gt;    RTC_WaitForSynchro();          RTC_WaitForLastTask();    
    &lt;li class=&quot;alt&quot;&gt;          //使能闹钟中断      
    &lt;li class=&quot;alt&quot;&gt;    RTC_ITConfig(RTC_IT_ALR, ENABLE);            RTC_WaitForLastTask();    
    &lt;li class=&quot;alt&quot;&gt;          //分频系数为1,即最小时间单位1/2^15 = 30.5us   
    &lt;li class=&quot;alt&quot;&gt;    RTC_SetPrescaler(RTC_PRESCALE);            RTC_WaitForLastTask();  
    &lt;li class=&quot;alt&quot;&gt;          //启动独立看门狗   
    &lt;li class=&quot;alt&quot;&gt;    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);                   //访问之前要首先使能寄存器写           IWDG_SetPrescaler(IWDG_Prescaler_64);                           //64分频 一个周期1.6ms   
    &lt;li class=&quot;alt&quot;&gt;    IWDG_SetReload(1250);                                           //最长12位 [0,4096] 1250*1.6 = 2s           IWDG_ReloadCounter();                                           //喂狗   
    &lt;li class=&quot;alt&quot;&gt;    //使能开门狗           IWDG_Enable();  
    &lt;li class=&quot;alt&quot;&gt;          if (BKP_ReadBackupRegister(BKP_DR5) == 0xabcd)  
    &lt;li class=&quot;alt&quot;&gt;    {              GPIO_SetBits(GPIOA,GPIO_Pin_12) ;  
    &lt;li class=&quot;alt&quot;&gt;        BKP_WriteBackupRegister(BKP_DR5,0);          }  
    &lt;li class=&quot;alt&quot;&gt;    else          {  
    &lt;li class=&quot;alt&quot;&gt;        GPIO_ResetBits(GPIOA, GPIO_Pin_12) ;              BKP_WriteBackupRegister(BKP_DR5,0xabcd);  
    &lt;li class=&quot;alt&quot;&gt;    }         }  
    &lt;li class=&quot;alt&quot;&gt;else      {  
    &lt;li class=&quot;alt&quot;&gt;    //检查唤醒标志是否设置,判断是否首次启动           if (PWR_GetFlagStatus(PWR_FLAG_WU) == RESET)  
    &lt;li class=&quot;alt&quot;&gt;    {              //首次启动   
    &lt;li class=&quot;alt&quot;&gt;        //初始化备份寄存器               //BKP_DeInit();   
    &lt;li class=&quot;alt&quot;&gt;              //RTC功能开启   
    &lt;li class=&quot;alt&quot;&gt;        //使能外部晶振               RCC_LSEConfig(RCC_LSE_ON);  
    &lt;li class=&quot;alt&quot;&gt;        //等待外部晶振准备好               while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);  
    &lt;li class=&quot;alt&quot;&gt;                  //设置RTC时钟为外部晶振   
    &lt;li class=&quot;alt&quot;&gt;        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);            
    &lt;li class=&quot;alt&quot;&gt;        //使能RTC时钟               RCC_RTCCLKCmd(ENABLE);  
    &lt;li class=&quot;alt&quot;&gt;        //等待RTC_CTL寄存器中的RSF位(寄存器同步标志)被硬件置1               RTC_WaitForSynchro();  
    &lt;li class=&quot;alt&quot;&gt;        RTC_WaitForLastTask();          
    &lt;li class=&quot;alt&quot;&gt;        //使能闹钟中断                  RTC_ITConfig(RTC_IT_ALR, ENABLE);    
    &lt;li class=&quot;alt&quot;&gt;        RTC_WaitForLastTask();          
    &lt;li class=&quot;alt&quot;&gt;        //分频系数为1,即最小时间单位1/2^15 = 30.5us               RTC_SetPrescaler(RTC_PRESCALE);    
    &lt;li class=&quot;alt&quot;&gt;        RTC_WaitForLastTask();        
    &lt;li class=&quot;alt&quot;&gt;        //启动独立看门狗               IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);                   //访问之前要首先使能寄存器写   
    &lt;li class=&quot;alt&quot;&gt;        IWDG_SetPrescaler(IWDG_Prescaler_64);                           //64分频 一个周期1.6ms               IWDG_SetReload(1250);                                           //最长12位 [0,4096] 1250*1.6 = 2s   
    &lt;li class=&quot;alt&quot;&gt;        IWDG_ReloadCounter();                                           //喂狗               //使能开门狗   
    &lt;li class=&quot;alt&quot;&gt;        IWDG_Enable();                  
    &lt;li class=&quot;alt&quot;&gt;        if (BKP_ReadBackupRegister(BKP_DR6) == 0xabcd)              {  
    &lt;li class=&quot;alt&quot;&gt;            GPIO_ResetBits(GPIOA, GPIO_Pin_11) ;                  BKP_WriteBackupRegister(BKP_DR6,0);  
    &lt;li class=&quot;alt&quot;&gt;        }              else  
    &lt;li class=&quot;alt&quot;&gt;        {                  GPIO_SetBits(GPIOA,GPIO_Pin_11) ;  
    &lt;li class=&quot;alt&quot;&gt;            BKP_WriteBackupRegister(BKP_DR6,0xabcd);              }                                             
    &lt;li class=&quot;alt&quot;&gt;    }          else  
    &lt;li class=&quot;alt&quot;&gt;    {                 //从待机模式中退出,有闹钟唤醒或者看门狗唤醒    
    &lt;li class=&quot;alt&quot;&gt;        //清除唤醒标志               RCC_ClearFlag();   
    &lt;li class=&quot;alt&quot;&gt;              if (BKP_ReadBackupRegister(BKP_DR7) == 0xabcd)  
    &lt;li class=&quot;alt&quot;&gt;        {                  GPIO_ResetBits(GPIOA, GPIO_Pin_8) ;  
    &lt;li class=&quot;alt&quot;&gt;            BKP_WriteBackupRegister(BKP_DR7,0);              }  
    &lt;li class=&quot;alt&quot;&gt;        else              {  
    &lt;li class=&quot;alt&quot;&gt;            GPIO_SetBits(GPIOA,GPIO_Pin_8) ;                  BKP_WriteBackupRegister(BKP_DR7,0xabcd);  
    &lt;li class=&quot;alt&quot;&gt;        }          }  
    &lt;li class=&quot;alt&quot;&gt;}        
    &lt;li class=&quot;alt&quot;&gt;//延时1s       for (i = 0;i 
回复 支持 反对

使用道具 举报

1

主题

38

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-7-2 15:59:34 | 显示全部楼层

RE:请教用STM8L151的RTC唤醒

STM8L-Discovery的板上RTC的代码

RTC.txt

下载

1.76 KB, 下载次数: 800

回复 支持 反对

使用道具 举报

24

主题

591

回帖

0

蝴蝶豆

中级会员

最后登录
2020-12-2
发表于 2012-7-2 21:13:06 | 显示全部楼层

RE:请教用STM8L151的RTC唤醒

是可以的吧
回复 支持 反对

使用道具 举报

0

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
2020-2-14
发表于 2012-11-17 13:16:34 | 显示全部楼层

RE:请教用STM8L151的RTC唤醒

是可以的吧是可以的吧
回复 支持 反对

使用道具 举报

8

主题

43

回帖

0

蝴蝶豆

初级会员

最后登录
2020-11-30
发表于 2013-2-4 06:22:40 | 显示全部楼层

回复:请教用STM8L151的RTC唤醒

回复第 4 楼 于2012-07-02 15:59:34发表:
STM8L-Discovery的板上RTC的代码
 

 ok
 
回复 支持 反对

使用道具 举报

0

主题

19

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-12-10 22:52:03 | 显示全部楼层

回复:请教用STM8L151的RTC唤醒

很好
回复 支持 反对

使用道具 举报

0

主题

57

回帖

0

蝴蝶豆

高级会员

最后登录
2020-12-6
发表于 2014-6-7 19:36:44 | 显示全部楼层

RE:请教用STM8L151的RTC唤醒

学习来的
回复 支持 反对

使用道具 举报

0

主题

5

回帖

0

蝴蝶豆

初级会员

最后登录
2020-11-8
发表于 2014-10-5 21:13:24 | 显示全部楼层

回复:请教用STM8L151的RTC唤醒

下来看看......
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版