久芯网

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

avatar 望柳村 提问时间: 2023-08-14 08:13:01 / 未解决

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 }


如需获得 STM32L151 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

7个回答
  • avatar 望柳村
    回答时间: 2023-08-14 08:37:44

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

  • avatar 废鱼
    回答时间: 2023-08-14 08:56:46

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

  • avatar 望柳村
    回答时间: 2023-08-14 09:21:51
    废鱼 发表于 2021-12-17 10:11
    楼主您好,先确认是否写入到DR0中数据,另外复位时,RTC是否有持续的供电。如果确认走的是if (RTC_Read ...

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

  • avatar butterflyspring
    回答时间: 2023-08-14 09:54:27

    做个测试验证吧,复位后先打印出来RTC的时间,看看是什么状态。再分析问题大概在哪个方面。

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

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

  • avatar 望柳村
    回答时间: 2023-08-14 10:48:50
    butterflyspring 发表于 2021-12-17 11:12
    做个测试验证吧,复位后先打印出来RTC的时间,看看是什么状态。再分析问题大概在哪个方面。 ...

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

  • avatar 废鱼
    回答时间: 2023-08-14 11:18:08

    其他的芯片有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)

会员中心 微信客服
客服
回到顶部