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

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
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版