/**
* @brief Waits until last write operation on RTC registers has finished.
* @note This function must be called before any write to RTC registers.
* @param None
* @retval None
*/
void RTC_WaitForLastTask(void)
{
/* Loop until RTOFF flag is set */
while ((RTC->CRL & RTC_FLAG_RTOFF) == (uint16_t)RESET)
{
}
}
RTC_GetCounter()
函数,获取当前RTC内部计数器的计数值,然后将其转化为24小时制RTC_SetCounter(HH*3600+MM*60+SS);(此时会自动设置秒触发中断RTC_IT_SEC为一秒触发一次才可以
)
RTC的秒中断功能类似SysTick系统滴答的功能。RTC秒中断功能其实是每计数一次就中断一次。注意,秒中断并非一定是一秒的时间,它是由RTC时钟源和分频值决定的“秒”的时间,当然也是可以做到1秒钟中断一次。
设置“RTC秒中断”的原理:
1、RTC时钟源,总共有三类:可任意选择,并配置成任意秒数为周期
RCC_RTCCLKSource_LSE
RCC_RTCCLKSource_LSI
RCC_RTCCLKSource_HSE_Div128
本文实例代码是:RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);
使用“RCC_RTCCLKSource_HSE_Div128”作为时钟源(高速时钟源),也就是外部高速时钟的128分频,也就是每秒8M/128(62500)个脉冲;
当然,我们也可以选择另外两个时钟源,也就是使用低速时钟源,一般应用在RTC闹钟可RTC日历等都使用低速时钟源。
2、RTC分频:
本文实例代码是:RTC_SetPrescaler(62500);
这个值是和上面对应的,因为我们这里是实现真正的1秒钟中断一次。
3、RTC中断:
RTC中断有三种:
RTC_IT_SEC秒中断(一个周期中断一次,自己进行配置)
RTC_IT_ALR闹钟中断
RTC_IT_OW(计数)溢出中断
本文实例是:RTC_ITConfig(RTC_IT_SEC, ENABLE);
使能RTC_IT_SEC秒中断。