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

一个老话题:STM32F1的RTC上电不起振问题?新发现?

[复制链接]
下弦月-339376 提问时间:2017-10-12 10:52 /
本帖最后由 下弦月-339376 于 2017-10-12 10:58 编辑

量产的产品,之前就偶尔出现屏幕上电不亮,最近越来越多。连电脑发现是卡死在 等待RTC时钟:  /* Loop until RSF flag is set */ while ((RTC->CRL & RTC_FLAG_RSF) == (uint16_t)RESET)

我用示波器测,不亮的屏幕,确实有些是外部32768没波形。但有些也有,屏幕也不亮。

网上查,说是F1的RTC做的不太好,比较挑晶体。必须是6pf的。但看有网友说是换了6pf也会出问题,还有人说是低温下,问题更多。

偶然发现,不亮的屏幕,如果把电池扣掉,那每次都可以点亮了???

然后就又继续搜索到这个 http://blog.csdn.net/jinchengzhou/article/details/53036560,说是因为没有执行RTC_Configuration()


刚好我的程序就是这样写的:所以我想问一下,之前大家碰到的RTC不起振,是不是也是只要每次都执行一次RTC_Configuration就好了?
我这个程序,就是如果上电碰到A5A5标志位,就直接走下边去了,没有再次初始化RTC,然后就卡死了。如果每次都初始化就好了,但时间也就复位了


初始化RTC

初始化RTC
收藏 1 评论10 发布时间:2017-10-12 10:52

举报

10个回答
馒头弟 回答时间:2018-6-5 09:16:09
本帖最后由 馒头弟 于 2018-6-5 09:50 编辑

用过,偶尔不起振,低温下不起振的频率更高,之前没有做处理,被骂死了。后面是初始化一定次数没成功就切内置的了 = =!

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

五哥1 回答时间:2018-4-30 07:26:00
建议看下勘误手册

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2018-6-5 09:32:45
本帖最后由 wenyangzeng 于 2018-6-5 09:33 编辑

   上电时,RTC寄存器写保护。要打开写操作,需要向RTC_WPR寄存器中写一个序列。
   先写入0xCA,再写入0x53即可关闭写保护。写别的数据将关闭写保护,比如写入0x00等。
   日历初始化和配置
   按照以下步骤设置RTC的时间日期以及对时钟输入的预分频:
1、设置初始化和状态寄存器RTC_ISR中的INIT为为1进入初始化模式。在这个模式下,RTC
   时间寄存器计数停止,可被更新
2、判断RTC_ISR中的INITF位,判断RTC是否已经被初始化过。当读出数据为1时,即可进入
   初始化模式。这个过程将持续大约两个RTC时钟周期
3、为了得到1Hz的计数器时钟,先对RTC_PRER寄存器中的同步分频值PREDIV_S[14:0]进行
   设置再对该寄存器中的一部分频值PREDIV_A[6:0]进行设置。即使只有一个分频值需要写入,
   另一个分频值也需要再写入一遍。
4、将要设置的时间和日期写入RTC_CR和RTC_DR的影子寄存器,在RTC_CR中设置时间格式。
5、向INTI位写入0,退出初始化模式。这时,RTC_DR和RTC_CR就会将日期信息从影子寄存
   器中加载到寄存器中,并在4个RTC时钟周期后自动开始运行。
  1. uint8_t RTC_Configuration(void)
  2. {
  3.         RTC_InitTypeDef RTC_InitStructure;
  4.        
  5.         uint16_t retry=0X1fFF;
  6.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟
  7.         PWR_BackupAccessCmd(ENABLE);        //使能后备寄存器访问
  8.        
  9.         if(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
  10.                                 RCC_LSEConfig(RCC_LSE_ON);
  11.         if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0x5050)                //是否第一次配置?
  12.         {
  13.                 RCC_LSEConfig(RCC_LSE_ON);//LSE 开启   
  14.                 while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)        //检查指定的RCC标志位设置与否,等待低速晶振就绪
  15.                         {
  16.                        
  17.                                 retry++;
  18.                                 Delay(10);
  19.                                 }
  20.                                
  21.                                 if(retry==0)        return 1;//LSE 开启失败.

  22.                 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);                //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟   
  23.                 RCC_RTCCLKCmd(ENABLE);        //使能RTC时钟

  24.     RTC_InitStructure.RTC_AsynchPrediv = 0x7F;//RTC异步分频系数(1~0X7F)
  25.     RTC_InitStructure.RTC_SynchPrediv  = 0xFF;//RTC同步分频系数(0~7FFF)
  26.     RTC_InitStructure.RTC_HourFormat   = RTC_HourFormat_24;//RTC设置为,24小时格式
  27.     RTC_Init(&RTC_InitStructure);

  28.                 RTC_Set_Time(20,25,56,RTC_H12_AM);        //设置时间
  29.                 RTC_Set_Date(17,1,16,4);                //设置日期
  30.          
  31.                 RTC_WriteBackupRegister(RTC_BKP_DR0,0x5050);        //标记已经初始化过了
  32.         }
  33. else
  34.        
  35.         {
  36.         RCC_RTCCLKCmd(ENABLE);
  37.   RTC_WaitForSynchro();  

  38. }
  39.         return 0;
  40. }
复制代码


评分

参与人数 1蝴蝶豆 +5 收起 理由
zero99 + 5

查看全部评分

五哥1 回答时间:2018-6-5 16:33:25
不起振的原因很多,比如我遇到过,电路设计有问题,原来是设计用内置晶振,节约两个IO口的,但是也布设32.768K晶振的位置,当发现内置不准时,又要用外置,结果有一大把产品外置晶振不工作,有些甚至把电路部分手工断开也不工作,设计的失败,根本无法挽救。程序只占一部分。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

yqsqqq 回答时间:2018-6-5 17:42:29
官方我记得有一篇说不起振的原因,电容匹配问题,你自己先用STM32CubeMX配置跑一个试试啊

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

yqsqqq 回答时间:2018-6-5 17:45:50
www.stmcu.com.cn

STM32F030低温下RTC不工作 - 实战经验
无薪税绵 回答时间:2018-6-5 20:54:07
我也碰到过,我觉得应该不是软件问题,
因为,换了个新的晶振就好了,
我反而觉得是晶振和电容不匹配,
建议,细调一下匹配电容。看看效果如何。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

KEY1 回答时间:2018-6-5 22:16:53
问题很有可能是 你初始化的地方有问题,或者是复位后对寄存器的处理不合适,
先看看经典例子的 初始化过程

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zhjb1 回答时间:2018-6-6 09:13:39
有源晶振也不贵,如果成本核算适合,加个有源晶振替换无源的什么问题都没有了。我在较高端设计上一概如此。有时不妨考虑采用陶瓷谐振器,那玩意的Q值相当高,需要串联电阻,并且价格比晶振还要便宜,批量不到0.1元。试试吧,别一条胡同走死了。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

feixiang20 回答时间:2018-6-8 01:16:59
都说这么多啦,那可以翻阅以下资料,内容过长
【STM32的RTC晶振不起振的原因及解决方法】
【STM32 RTC不起振分析】
【RTC模块不起振或起振不正常的实验及解决尝试】

所属标签

相似问题

官网相关资源

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