STM3f10x的RTC时能触及到的寄存器有RCC,BKP和RTC这三个大类寄存器;其间RCC首要操控了实时时钟和备份区的电源使能和时钟使能;RTC模块和时钟装备体系的寄存器是在后备区域的(即BKP),经过BKP后备区域来存储RTC装备的数据能够让在体系复位或待机形式下唤醒后RTC里边装备的数据保持不变;为此备份区还得触及一个寄存器PWR,电源办理寄存器,备份区的写保护位在PWR->CR的第八位。
因为整个RTC都是坐落后备区,并且RTC的APB1总线和内核的APB1总线是独立的,所以在体系复位和唤醒时,RTC和BKP的那些时钟不必重新装备;他们只受Backup domain software reset这个位和体系彻底掉电的影响。所以呢;RTC只需有备用电池,它能够彻底独立作业。
如图一和图二所示
|
图一
图二
我们要清楚f10x系列的RTC算不上一个真实意义上的RTC,它仅仅一个计数器,精度上不免差强人意,所以规划要注意是否满意计时要求。
假如是要完结实时时刻以上一切的寄存器都要有相应设置,假如只用秒中止,那么只需要设置RCC和RTC的寄存器就能够了。
以下以完结实时时钟为例解说初始化进程。
- 检测后备区是否已有有用符号
BKP->DR1 != 0x5050;//(DR1 TO DR42)
- 库函数
BKP_ReadBackupRegister(BKP_DR1) != 0x5050;
- 敞开电源办理和备份区时钟
(RCC->APB1ENR |=1<<28;//POWER);
(RCC->APB1ENR |=1<<27;//BACKUP);
- 库函数
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
- 撤销备份去写保护
(PWR->CR |=1<<8;//WP);
- 库函数
- 复位后备区一切寄存器
RCC->BDCR |=1<<16;
RCC->BDCR &=~(1<<16);
- 库函数
- 敞开外部32k晶振
RCC->BDCR |=1<<0;
- 库函数
- 32k晶振是否正常作业
- 库函数
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);
- 挑选32k为RTC时钟并使能RTC
- 库函数
- 等候RTC操作和同步完结
- 库函数
- 使能秒中止
- 库函数
RTC_ITConfig(RTC_IT_SEC, ENABLE);
- ;
- 装备RTC
- 答应装备
//set time—
- 库函数
BKP_WriteBackupRegister(BKP_DR1, 0X5050);
- 假如时钟已被设置过(RTC没有断电)
- 等候同步
- 开中止
- 等候操作完结
- 库函数
RTC_ITConfig(RTC_IT_SEC, ENABLE);
最终装备RTC中止优先级。