接着我们读取备份寄存器BKP_DR1 中的值来判断是否是第一次上电,如果不是则直接显示时钟,否则进行时间设置。当BKP_DR1的值不为0xAAAA,说明是第一次上电,此时需要对RTC进行初始化。注意初始化的实现函数RTC_Configuration();,为什么那么写,请参考我们之前给出的“第一次使用RTC的配置工作总结”,然后进行时钟设置。
数据寄存器DR:用于存储备份数据,STM32F103C8T6有10个数据寄存器(DR1-DR10),每个寄存器为16位(两个字节),总共20字节的存储空间。 控制寄存器(BKP_CR):用于控制BKP模块的功能。 状态寄存器(BKP_CSR):用于指示BKP模块的状态。 RTC时钟校准寄存器(BKP_CALR):用于校准RTC时钟。 9.6 BKP模块的使用示例 以下是一个简单...
最后往BKP_DR1这个寄存器中写入0XC0B4代表第一次RTC配置已经完成。当程序复位或者设备重新上电后它都不...
接着我们读取备份寄存器BKP_DR1中的值来判断是否是第一次上电,如果不是则直接显示时钟,否则进行时间设置。当BKP_DR1的值不为0xAAAA,说明是第一次上电,此时需要对RTC进行初始化。注意初始化的实现函数RTC_Configuration();,为什么那么写,请参考我们之前给出的“第一次使用RTC的配置工作总结”,然后进行时钟设置。...
比如我们可以在RTC初始化之后,对BKP_DR1寄存器写入一个值,比如0x5050,然后在 RTC_Init(void)函数开始处,先读取并判断BKP_DR1寄存器的值是否为0x5050,进而可以知道系统的RTC是否有VBAT外部电源维持供电。 STM32时钟系统 参考《STM32中文参考手册》中对STM32的时钟系统的详细说明。
BKP_WriteBackupRegister( BKP_DR1, 0x5055 ); //向指定的后备寄存器中写入用户程序数据 } else ...
RTC_SetPrescaler(32767); RTC_WaitForLastTask(); RTC_Set(2015,1,26,0,0,0); BKP_WriteBackupRegister(BKP_DR1, 0X5050); 11, 如果时钟已被设置过(RTC没有断电) while(!(RTC->CRL&(1<<3)));//等待同步 RTC->CRH|=0X01;//开中断
并修改后备寄存器1的值为0XA5A5。 else表示已经设置了系统时间,打印上次系统复位的原因,并使能RTC秒中断 */ if (BKP_ReadBackupRegister(BKP_DR1) != RTC_SEQ_ID) { /* Backup data register value is not correct or not yet programmed (when
RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE); // 启用 BKP 外设时钟 // 2. 允许访问备份区域(防止修改 RTC 配置时无法写入备份寄存器) PWR_BackupAccessCmd(ENABLE); // 启用对备份寄存器的访问 if( BKP_ReadBackupRegister(BKP_DR1)!= 0xABCD) ...
在BKP写入数据的时候需要先打开时钟,使能备份寄存器访问RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE kdkashd 2018-10-16 09:10:20 为什么编译后会出现bkp_DR1没有定义的问题? $58JU6GETM.png如上图,我将RTC部分代码复制到原有的μcos的工程中,并且已经加载了stm32f10x_bkp...