}// 读取RTC的当前时间voidMyRTC_ReadTime(void){time_ttime_cnt;structtmtime_date;// 获取RTC的计数器值time_cnt = RTC_GetCounter() +8*60*60;// 将秒数转换为tm结构体time_date = *localtime(&time_cnt);// 更新MyRTC_Time数组的元素MyRTC_Time[0] = time_date.tm_year +1900; MyRTC_Time...
printf("THE ALARM READY =%d \r\n",RTC_GetCounter());//输出此时的秒数 RTC_ClearITPendingBit(...
RTC_SetCounter(0x0);//设置RTC计数器的值 通过读取RTC计数器的值,可以将其转化为时:分:秒的形式打印出来。 同时,如果RTC是第一次被配置,用户需要输入时间,然后调用Time_Adjust( )将用户输入的时间转化到RTC计数值写到相应的寄存器中。
这是通过RTC_GetCounter();函数获取计数值,然后把这个计数值分别用小时、分钟、秒来表示的过程。最后还需要调用printf 函数把它显示出来。
RTC_CRL: 0位:进入秒中断后,可判断该位为1决定发生了中断,必须写0清除 3位:寄存器同步标志位,没有同步之前,不被允许修改RTC_CRT/CRL的值,必须先判断该位为1时,同步了。 4位:在修改RTC_CNT/RTC_ALR/RTC_PRL的值前,必须置该位为1,进入配置模式。
RTC_WaitForLastTask(); //等待最近一次对RTC寄存器的写操作完成 RTC_Get();//更新时间 return 0; } /* 得到当前的时间 成功返回0,错误返回其它 */ u8 RTC_Get(void) { static u16 dayCount=0; u32 secCount=0; u32 tmp=0; u16 tmp1=0; secCount=RTC_GetCounter(); tmp=secCount/86400;//得到...
由于后面要通过BKP_WriteBackupRegister()函数对BKP_DR1写操作,因此之前还需要进行一次RTC_WaitForLastTask(),这样,对时间的设置就完成了。剩下的代码,比较简单,主要是注意如下: RTCCount=RTC_GetCounter();//获得计数值并计算当前时钟/Computehours/ THH=RTCCount/3600;/Computeminutes/ ...
读取操作就是将计数器的值读取出来,调用库函数RTC_GetCounter()即可返回当前计数器的值。 2.2 写入 写入操作就是更新当前计数器的值,调用库函数RTC_SetCounter()即可更新当前计数器的值,注意调用RTC_SetCounter()完毕后需要调用RTC_WaitForLastTask()等待RTC寄存器写操作完成。
RTC全局中断: void RTC_IRQHandler() { if(RTC_GetITStatus(RTC_IT_ALR)!=RESET) //是否闹钟中断发生 { printf("THE ALARM READY =%d \r\n",RTC_GetCounter());//输出此时的秒数 RTC_ClearITPendingBit(RTC_IT_ALR); PWR_BackupAccessCmd(ENABLE); ...
uint32_t RTC_GetCounter(void) { uint16_t tmp = 0; tmp = RTC->CNTL; return (((uint32_t)RTC->CNTH << 16 ) | tmp) ; } /** * @brief Sets the RTC alarm value. * @param AlarmValue: RTC alarm new value. * @retval None ...