用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; } |
RE:STM32F2xx RTC启动不了,求助!!!!
回复:STM32F2xx RTC启动不了,求助!!!!
查查看晶振有没有起振。
多谢多谢!
我就是怕不起振,换成了内部振荡器HSI,代码里检查时钟是否ok的地方过去了,死在了后面一步。。。。
RE:STM32F2xx RTC启动不了,求助!!!!
RE:STM32F2xx RTC启动不了,求助!!!!
RE:STM32F2xx RTC启动不了,求助!!!!
RE:STM32F2xx RTC启动不了,求助!!!!
RE:STM32F2xx RTC启动不了,求助!!!!
RE:STM32F2xx RTC启动不了,求助!!!!
/* 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