完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用LSI配置rtc的时候,发现配置不成功,配置失败后直接定时读rtc,发现时间没有增加,怀疑是时钟相关的问题。 我找到了ST官方1.0.0版本的STM32F2xx_StdPeriph_Lib,目前的配置基本和官方一样。常见的外设未配时钟的问题,我应该也避免了吧。 求各位大神看看问题在哪呢? 下面是首次配置部分的代码: (失败在RCC_RTCCLKCmd(ENABLE); if (ERROR == RTC_WaitForSynchro()) return 88; 如果注销掉这句同步,会继续失败在if(ERROR == RTC_Init(&RTC_InitTypeDef_Data)) return 233; 查看这个RTC_Init的代码实现,是在进入RTC_EnterInitMode中,查询出现超时) 代码如下: #define RTC_MAGIC 0xA5A5 #define RTCClockSource_LSI uint32_t rtc_config(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_AHB1Periph_BKPSRAM, ENABLE); PWR_BackupAccessCmd(ENABLE); if (RTC_ReadBackupRegister(RTC_BKP_DR0) != RTC_MAGIC) { LOG(DEBUG_LOG, "RTC not yet configured...."); return rtc_config_firsttime(); } else { LOG(DEBUG_LOG, "RTC have configured...."); return rtc_config_othertime(); } } static uint32_t rtc_config_firsttime(void) { RTC_InitTypeDef RTC_InitTypeDef_Data; RTC_TimeTypeDef default_time; RTC_DateTypeDef default_data; RCC_BackupResetCmd(ENABLE); RCC_LSICmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) { } RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); // E. Enable RTC Clock RCC_RTCCLKCmd(ENABLE); if (ERROR == RTC_WaitForSynchro()) return 88; // F. enable second interrupt //RTC_ITConfig(RTC_IT_TS, ENABLE); // G. Set RTC prescaler: set RTC period to 1sec RTC_InitTypeDef_Data.RTC_HourFormat = RTC_HourFormat_24; RTC_InitTypeDef_Data.RTC_AsynchPrediv = 99; RTC_InitTypeDef_Data.RTC_SynchPrediv = 319; if(ERROR == RTC_Init(&RTC_InitTypeDef_Data)) return 233; if (ERROR == RTC_WaitForSynchro()) return 100; // I. set default time default_time.RTC_Hours = DEFAULT_HOURS; default_time.RTC_Minutes = DEFAULT_MINUTES; default_time.RTC_Seconds = DEFAULT_SECONDS; default_time.RTC_H12 = RTC_H12_PM; if (ERROR == RTC_SetTime(RTC_Format_BIN, &default_time)) return 333; if (ERROR == RTC_WaitForSynchro()) return 101; default_data.RTC_WeekDay = DEFAULT_WEEKDAY; default_data.RTC_Month = DEFAULT_MONTH; default_data.RTC_Date = DEFAULT_DATE; default_data.RTC_Year = DEFAULT_YEAR; if (ERROR == RTC_SetDate(RTC_Format_BIN, &default_data)) return 334; if (ERROR == RTC_WaitForSynchro()) return 102; RTC_WriteBackupRegister(RTC_BKP_DR0, RTC_MAGIC); PWR_BackupAccessCmd(DISABLE); RCC_ClearFlag(); LOG(DEBUG_LOG, "RTC configured...."); return 0; } |
|
相关推荐
9个回答
|
|
查查看晶振有没有起振。
|
|
|
|
回复第 2 楼 于2014-07-04 20:40:15发表:
查查看晶振有没有起振。 多谢多谢! 我就是怕不起振,换成了内部振荡器HSI,代码里检查时钟是否ok的地方过去了,死在了后面一步。。。。 |
|
|
|
勘误手册中提到了,RTC晶振在潮湿的情况下会不起振,pcb设计的时候需要特殊关注,还要加辅助起振的电阻。lse晶振一定要选7pf的。勘误手册上有。我用103做开发的时候遇到过这个问题。
|
|
|
|
而且rtc晶振起振本身就慢,有时候甚至是秒级别。晶振频率越高起振时间越短。还是接时钟芯片吧。
|
|
|
|
看错了,呵呵 你用的lsi呀 不好意思
|
|
|
|
是时钟还没稳定就使能吧
|
|
|
|
启动主要看晶振..
|
|
|
|
|
|
|
|
有人在么?我这里STM32F205的RTC也是这个情况,就死在了这个函数RTC_EnterInitMode()里面的,
/* Wait till RTC is in INIT state and if Time out is reached exit */ do { initstatus = RTC->ISR & RTC_ISR_INITF; initcounter++; } while((initcounter != INITMODE_TIMEOUT) && (initstatus == 0x00)); Run运行后,会出现, 0x20017724 FFF9FFFF DCD 0xFFF9FFFF ; ? Undefined |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1187 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1122 浏览 2 评论
2223 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1311 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1735 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 05:54 , Processed in 0.755485 second(s), Total 90, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号