RTC中LSE开启失败问题

2019-07-20 23:47发布


这个retry 初始值 是127 ,每 10ms 增加1, 怎么会有 == 0 的情况呢? 这条语句怎么检测 LSE开启失败的? 分析不通求助。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-07-21 02:29
用我们的代码吧:
[mw_shl_code=c,true] u8 RTC_Init(void) { //检查是不是第一次配置时钟 u8 temp=0; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和BKP外设时钟 PWR_BackupAccessCmd(ENABLE); //使能后备寄存器访问 if (BKP_ReadBackupRegister(BKP_DR1) != 0x5050) //从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎 { BKP_DeInit(); //复位备份区域 RCC_LSEConfig(RCC_LSE_ON); //设置外部低速晶振(LSE),使用外设低速晶振 while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET&&temp<250) //检查指定的RCC标志位设置与否,等待低速晶振就绪 { temp++; delay_ms(10); } if(temp>=250)return 1;//初始化时钟失败,晶振有问题 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //设置RTC时钟(RTCCLK),选择LSE作为RTC时钟 RCC_RTCCLKCmd(ENABLE); //使能RTC时钟 RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成 RTC_WaitForSynchro(); //等待RTC寄存器同步 RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能RTC秒中断 RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成 RTC_EnterConfigMode();/// 允许配置 RTC_SetPrescaler(32767); //设置RTC预分频的值 RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成 RTC_Set(2015,1,14,17,42,55); //设置时间 RTC_ExitConfigMode(); //退出配置模式 BKP_WriteBackupRegister(BKP_DR1, 0X5050); //向指定的后备寄存器中写入用户程序数据 } else//系统继续计时 { RTC_WaitForSynchro(); //等待最近一次对RTC寄存器的写操作完成 RTC_ITConfig(RTC_IT_SEC, ENABLE); //使能RTC秒中断 RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成 } RTC_NVIC_Config();//RCT中断分组设置 RTC_Get();//更新时间 return 0; //ok } [/mw_shl_code]
正点原子
2楼-- · 2019-07-21 05:59
 精彩回答 2  元偷偷看……
北极圈的黄昏
3楼-- · 2019-07-21 10:04
retry==0  说明  没有进入那个while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET)  循环  换而言之  就是LSE开启不了  那就是说明LSE开启失败了啊
Hatton
4楼-- · 2019-07-21 14:11
 精彩回答 2  元偷偷看……
Hatton
5楼-- · 2019-07-21 16:26
回复【4楼】正点原子:
---------------------------------
原子哥,那个就是你们的代码啊,o(╯□╰)o , 探索者开发板自带代码。《精通STM32F4(库函数版)》 233页 代码。
xfaye
6楼-- · 2019-07-21 18:07
找了半天没找到为什么会retry++,原来是bug多谢原子哥。

一周热门 更多>