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

STM32F2xx RTC启动不了,求助!!!!

[复制链接]
tanghtctc 提问时间:2014-7-4 13:53 /
 
用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;
}

 
收藏 评论10 发布时间:2014-7-4 13:53

举报

10个回答
feel-376797 回答时间:2014-7-4 20:40:15

RE:STM32F2xx RTC启动不了,求助!!!!

查查看晶振有没有起振。
tanghtctc 回答时间:2014-7-4 21:07:46

回复:STM32F2xx RTC启动不了,求助!!!!

回复第 2 楼 于2014-07-04 20:40:15发表:
查查看晶振有没有起振。 

多谢多谢!
我就是怕不起振,换成了内部振荡器HSI,代码里检查时钟是否ok的地方过去了,死在了后面一步。。。。
可mcu 回答时间:2014-7-5 02:36:15

RE:STM32F2xx RTC启动不了,求助!!!!

勘误手册中提到了,RTC晶振在潮湿的情况下会不起振,pcb设计的时候需要特殊关注,还要加辅助起振的电阻。lse晶振一定要选7pf的。勘误手册上有。我用103做开发的时候遇到过这个问题。
可mcu 回答时间:2014-7-5 02:38:49

RE:STM32F2xx RTC启动不了,求助!!!!

而且rtc晶振起振本身就慢,有时候甚至是秒级别。晶振频率越高起振时间越短。还是接时钟芯片吧。
可mcu 回答时间:2014-7-5 02:40:41

RE:STM32F2xx RTC启动不了,求助!!!!

看错了,呵呵 你用的lsi呀 不好意思
有缘于你 回答时间:2014-7-12 08:02:38

RE:STM32F2xx RTC启动不了,求助!!!!

是时钟还没稳定就使能吧
aaa999kk 回答时间:2014-7-17 17:06:33

RE:STM32F2xx RTC启动不了,求助!!!!

启动主要看晶振..
feixiang20 回答时间:2014-7-18 01:27:40

RE:STM32F2xx RTC启动不了,求助!!!!

控制住时钟以后再测试下
kernelshell 回答时间:2014-11-17 18:27:22
有人在么?我这里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
shuidi_wangdan 回答时间:2020-3-2 13:57:48
kernelshell 发表于 2014-11-17 18:27
有人在么?我这里STM32F205的RTC也是这个情况,就死在了这个函数RTC_EnterInitMode()里面的,
    /* Wai ...

10楼,你最后解决了吗?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版