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

查看: 20381|回复: 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唤醒

完整的测试程序:判断出首次启动程序,单片机处于正常状态时看门狗复位,单片机处于待机模式下被闹钟唤醒/看门狗唤醒.
注意:每次看门狗复位都要被重新配置启动
<div class="dp-highlighter bg_cpp">//检查是否正常状态发生看门狗复位   
<ol class="dp-cpp">    if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)  
    <li class="alt">{          //清楚标志位   
    <li class="alt">    RCC_ClearFlag();        
    <li class="alt">    //RTC功能开启           //使能外部晶振   
    <li class="alt">    RCC_LSEConfig(RCC_LSE_ON);          //等待外部晶振准备好   
    <li class="alt">    while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);        
    <li class="alt">    //设置RTC时钟为外部晶振           RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);  
    <li class="alt">          //使能RTC时钟   
    <li class="alt">    RCC_RTCCLKCmd(ENABLE);          //等待RTC_CTL寄存器中的RSF位(寄存器同步标志)被硬件置1   
    <li class="alt">    RTC_WaitForSynchro();          RTC_WaitForLastTask();    
    <li class="alt">          //使能闹钟中断      
    <li class="alt">    RTC_ITConfig(RTC_IT_ALR, ENABLE);            RTC_WaitForLastTask();    
    <li class="alt">          //分频系数为1,即最小时间单位1/2^15 = 30.5us   
    <li class="alt">    RTC_SetPrescaler(RTC_PRESCALE);            RTC_WaitForLastTask();  
    <li class="alt">          //启动独立看门狗   
    <li class="alt">    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);                   //访问之前要首先使能寄存器写           IWDG_SetPrescaler(IWDG_Prescaler_64);                           //64分频 一个周期1.6ms   
    <li class="alt">    IWDG_SetReload(1250);                                           //最长12位 [0,4096] 1250*1.6 = 2s           IWDG_ReloadCounter();                                           //喂狗   
    <li class="alt">    //使能开门狗           IWDG_Enable();  
    <li class="alt">          if (BKP_ReadBackupRegister(BKP_DR5) == 0xabcd)  
    <li class="alt">    {              GPIO_SetBits(GPIOA,GPIO_Pin_12) ;  
    <li class="alt">        BKP_WriteBackupRegister(BKP_DR5,0);          }  
    <li class="alt">    else          {  
    <li class="alt">        GPIO_ResetBits(GPIOA, GPIO_Pin_12) ;              BKP_WriteBackupRegister(BKP_DR5,0xabcd);  
    <li class="alt">    }         }  
    <li class="alt">else      {  
    <li class="alt">    //检查唤醒标志是否设置,判断是否首次启动           if (PWR_GetFlagStatus(PWR_FLAG_WU) == RESET)  
    <li class="alt">    {              //首次启动   
    <li class="alt">        //初始化备份寄存器               //BKP_DeInit();   
    <li class="alt">              //RTC功能开启   
    <li class="alt">        //使能外部晶振               RCC_LSEConfig(RCC_LSE_ON);  
    <li class="alt">        //等待外部晶振准备好               while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);  
    <li class="alt">                  //设置RTC时钟为外部晶振   
    <li class="alt">        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);            
    <li class="alt">        //使能RTC时钟               RCC_RTCCLKCmd(ENABLE);  
    <li class="alt">        //等待RTC_CTL寄存器中的RSF位(寄存器同步标志)被硬件置1               RTC_WaitForSynchro();  
    <li class="alt">        RTC_WaitForLastTask();          
    <li class="alt">        //使能闹钟中断                  RTC_ITConfig(RTC_IT_ALR, ENABLE);    
    <li class="alt">        RTC_WaitForLastTask();          
    <li class="alt">        //分频系数为1,即最小时间单位1/2^15 = 30.5us               RTC_SetPrescaler(RTC_PRESCALE);    
    <li class="alt">        RTC_WaitForLastTask();        
    <li class="alt">        //启动独立看门狗               IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);                   //访问之前要首先使能寄存器写   
    <li class="alt">        IWDG_SetPrescaler(IWDG_Prescaler_64);                           //64分频 一个周期1.6ms               IWDG_SetReload(1250);                                           //最长12位 [0,4096] 1250*1.6 = 2s   
    <li class="alt">        IWDG_ReloadCounter();                                           //喂狗               //使能开门狗   
    <li class="alt">        IWDG_Enable();                  
    <li class="alt">        if (BKP_ReadBackupRegister(BKP_DR6) == 0xabcd)              {  
    <li class="alt">            GPIO_ResetBits(GPIOA, GPIO_Pin_11) ;                  BKP_WriteBackupRegister(BKP_DR6,0);  
    <li class="alt">        }              else  
    <li class="alt">        {                  GPIO_SetBits(GPIOA,GPIO_Pin_11) ;  
    <li class="alt">            BKP_WriteBackupRegister(BKP_DR6,0xabcd);              }                                             
    <li class="alt">    }          else  
    <li class="alt">    {                 //从待机模式中退出,有闹钟唤醒或者看门狗唤醒    
    <li class="alt">        //清除唤醒标志               RCC_ClearFlag();   
    <li class="alt">              if (BKP_ReadBackupRegister(BKP_DR7) == 0xabcd)  
    <li class="alt">        {                  GPIO_ResetBits(GPIOA, GPIO_Pin_8) ;  
    <li class="alt">            BKP_WriteBackupRegister(BKP_DR7,0);              }  
    <li class="alt">        else              {  
    <li class="alt">            GPIO_SetBits(GPIOA,GPIO_Pin_8) ;                  BKP_WriteBackupRegister(BKP_DR7,0xabcd);  
    <li class="alt">        }          }  
    <li class="alt">}        
    <li class="alt">//延时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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版