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

一个老话题: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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版