OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6191|回复: 8

ALIENTEK MiniSTM32 RTC例程防死机版本

[复制链接]

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-6 22:57:18 | 显示全部楼层 |阅读模式
在外部RTC晶振不起振的情况下,启动外部8M晶振的128分频作为RTC的时钟来源。可以有效解决死机问题。供大家参考,当然程序还可以更加完善。
仅修改RTC_Init函数,修改后代码如下:
//实时时钟配置,添加了防止外部RTC晶振不起振导致的实时时钟死机的设计
//首先尝试使用LSE作为RTC时钟源,在尝试失败后,启用HSE/128作为RTC时钟源
//初始化RTC时钟,同时检测时钟是否工作正常   
//返回0:正常
//其他:错误代码
u8 RTC_Init(void)
{
//检查是不是第一次配置时钟
u8 temp=0;
  RCC->APB1ENR|=1<<28;     //使能电源时钟    
RCC->APB1ENR|=1<<27;     //使能备份时钟    
PWR->CR|=1<<8;           //取消备份区写保护
if(BKP->DR1!=0X5050)//第一次配置
{  
RCC->BDCR|=1<<16;        //备份区域软复位   
RCC->BDCR&=~(1<<16);     //备份区域软复位结束    
   RCC->BDCR|=1<<0;         //开启外部低速振荡器 
   while((!(RCC->BDCR&0X02))&&temp<250)//等待外部时钟就绪  
{
temp++;
delay_ms(10);
};
if(temp>=250)RCC->BDCR|=3<<8;//HSE/128作为RTC时钟 8M/128=62.5Khz
   else RCC->BDCR|=1<<8; //LSI作为RTC时钟  
RCC->BDCR|=1<<15; //RTC时钟使能  
  while(!(RTC->CRL&(1<<5))); //等待RTC寄存器操作完成  
    while(!(RTC->CRL&(1<<3))); //等待RTC寄存器同步  
    RTC->CRH|=0X01;     //允许秒中断
    while(!(RTC->CRL&(1<<5))); //等待RTC寄存器操作完成  
RTC->CRL|=1<<4;             //允许配置  
if(temp>=250)
{
RTC->RLH=0X0000;
RTC->RLL=62500-1; //HSE/128=62500,取62500-1 
}else
RTC->RLH=0X0000;
RTC->RLL=32768-1;      //时钟周期设置(有待观察,看是否跑慢了?)理论值:32767  
}    
RTC_Set(2012,9,7,13,16,55); //设置时间  
RTC->CRL&=~(1<<4);          //配置更新
while(!(RTC->CRL&(1<<5)));  //等待RTC寄存器操作完成  
BKP->DR1=0X5050;  
printf("FIRST TIME\n");
}else//系统继续计时
{
    //while(!(RTC->CRL&(1<<3)));//等待RTC寄存器同步  
    RTC->CRH|=0X01;    //允许秒中断
    while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成
printf("OK\n");
}      
MY_NVIC_Init(0,0,RTC_IRQChannel,2);//优先级设置    
RTC_Get();//更新时间 
return 0; //ok
}


完整工程见附件,另外如果还是死机,请把开发板的后备电池取了,并重新上电。

ALIENTEK MINISTM32 实验11 RTC实时时钟实验.rar

93.3 KB, 下载次数: 873

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-6-30 16:34:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

13

主题

314

帖子

0

精华

高级会员

Rank: 4

积分
713
金钱
713
注册时间
2012-7-20
在线时间
102 小时
发表于 2013-6-30 23:09:38 | 显示全部楼层
RTC问题太多,还是用个时钟芯片好
互联网,智能设备爱好者,欢迎讨论任何有意思的想法。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-12-18
在线时间
2 小时
发表于 2015-9-26 17:10:15 | 显示全部楼层
问下 原子 哥   如果 第一次 RTC 配置的是 外部32.768KHZ 晶振 成功 而 在 系统运行过程中 32.768KHZ 停止震荡 而且系统没有断电 (BKP->DR1=0X5050) 这样RTC是不是就不能切换到外部高速8MHZ 的 晶振上了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2015-9-28 22:45:03 | 显示全部楼层
回复【4楼】kpzh2006:
---------------------------------
RTC从来都不能切换到外部8M晶振的...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-12-18
在线时间
2 小时
发表于 2015-10-6 09:30:35 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
帖子中说 “在外部RTC晶振不起振的情况下,启动外部8M晶振的128分频作为RTC的时钟来源 ”

也就是 说 只有在是重新上电的的情况下(因为 不掉电 RAM 中的数据 不会丢失 (BKP->DR1=0X5050)  ),才能切换到 启动外部8M晶振的128分频作为RTC的时钟来源
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2015-10-6 15:36:16 | 显示全部楼层
回复【6楼】kpzh2006:
---------------------------------
是的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-12-18
在线时间
2 小时
发表于 2015-10-6 17:52:48 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
原子哥 请教一个问题 现在 我做了个东西 用的是 外部32.768KHZ晶振做时钟源 但是发现外部32.768KHZ晶振有时不起振,

原来为了省电用的是Standby模式 但是由于32.768KHZ 不起振 想用 退而求其次 用外部8M晶振 做RTC 时钟源 系统 进入 
sleep 模式(HSE外部晶振不会停止 RTC 不会丢失)来达到省电 又保证系统RTC 运行 正常 的目的 不知这样做可不可行 或者有别的更好的办法没?

现在硬件硬件改动不了 只能在现有的硬件基础上软件做修改
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
 楼主| 发表于 2015-10-10 18:48:22 | 显示全部楼层
回复【8楼】kpzh2006:
---------------------------------
最好外加一个RTC芯片吧,RTC芯片有很便宜的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 04:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表