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

STM32L151 RTC时钟,程序复位后,时钟怎么从设置的起始钟点开始跑呢?

[复制链接]
望柳村 提问时间:2021-12-17 09:56 / 未解决

void RTC_Configuration(void) { //EXTI_InitTypeDef EXTI_InitStructure; //NVIC_InitTypeDef NVIC_InitStructure; RTC_InitTypeDef RTC_InitStructure;

/ Enable PWR and BKP clocks / RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

/ Reset RTC Backup Domain / RCC_RTCResetCmd(ENABLE); RCC_RTCResetCmd(DISABLE);

/ Allow access to rtc / PWR_RTCAccessCmd(ENABLE);

/ Enable LSE / RCC_LSEConfig(RCC_LSE_ON); / Wait till LSE is ready / while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {}

/ Select LSE as RTC Clock Source / RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);

/ Enable RTC Clock / RCC_RTCCLKCmd(ENABLE);

/ Wait for RTC registers synchronization / RTC_WaitForSynchro();

/ Configure the RTC data register and RTC prescaler /

RTC_InitStructure.RTC_AsynchPrediv = 0x7F; RTC_InitStructure.RTC_SynchPrediv = 0xFF; RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; RTC_Init(&RTC_InitStructure);

Set_DateTime(); }

u8 RtcInit(void) { //检查是不是第一次配置时钟 u8 flag = 0;

if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0xA55A) //从指定的后备寄存器中读出数据:读出了与写入的指定数据不相乎 { / RTC configuration / RTC_Configuration();

if(flag == 0)
{
  RTC_WriteBackupRegister(RTC_BKP_DR0, 0xA55A);
}

} else { / Enable the PWR clock / RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); / Allow access to RTC / PWR_RTCAccessCmd(ENABLE); / Wait for RTC APB registers synchronisation / RTC_WaitForSynchro(); }

RTC_IRQConfig();

return 0; //ok }

收藏 评论7 发布时间:2021-12-17 09:56

举报

7个回答
望柳村 回答时间:2021-12-17 09:58:16

我设置的初始时间是2021-12-12 8:0 程序运行一段时间复位后,并没有重新设置时间,但是还是从这个时间开始计数,这是为什么?

废鱼 回答时间:2021-12-17 10:11:04

楼主您好,先确认是否写入到DR0中数据,另外复位时,RTC是否有持续的供电。如果确认走的是if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0xA55A)这个支路,重新配置一下RTC。现在手头没有板子帮忙测试,只能远程帮忙测试。执行一下PWR_RTCAccessCmd(ENABLE);

望柳村 回答时间:2021-12-17 10:18:35

废鱼 发表于 2021-12-17 10:11
楼主您好,先确认是否写入到DR0中数据,另外复位时,RTC是否有持续的供电。如果确认走的是if (RTC_Read ...

[md]首先谢谢你的回复,程序复位后是先去判读DR0中数据,数据判断是正确的,没有执行重新配置时间。但是使用RTC_GetTime和RTC_GetDate 是从开始设置的时间走的

butterflyspring 回答时间:2021-12-17 11:12:18
做个测试验证吧,复位后先打印出来RTC的时间,看看是什么状态。再分析问题大概在哪个方面。
yangjiaxu 回答时间:2021-12-17 11:53:03

望柳村 发表于 2021-12-17 09:58
我设置的初始时间是2021-12-12  8:0  程序运行一段时间复位后,并没有重新设置时间,但是还是从这个时 ...

[md]因为你初始值是这个,复位之后程序会从最开始初始值这个数据开始呢

望柳村 回答时间:2021-12-17 12:42:52

butterflyspring 发表于 2021-12-17 11:12
做个测试验证吧,复位后先打印出来RTC的时间,看看是什么状态。再分析问题大概在哪个方面。
...

通过串口打印,发现,RTC_ReadBackupRegister(RTC_BKP_DR10) 读出的数据,不是写入的数据。就是说写入的数据时没有成功,但是debug调试时,可以看到写入成功了,读出的也一样。但是程序一reset就不一样了,很奇怪

废鱼 回答时间:2021-12-17 14:27:28

其他的芯片有VBAT引脚,这个必须有电才行。151我查资料,在下面几种情况下回发生数据丢失。外部按键reset理论不会丢失,如果是power reset就会丢失。

The RTC peripheral, RTC clock source selection (in RCC_CSR) and the backup registers are reset only when one of the following events occurs: 1.A software reset, triggered by setting the RTCRST bit in the RCC_CSR register (see Section 6.3.14) 2. Power reset (BOR/POR/PDR)

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