注意初始化的实现函数RTC_Configuration();,为什么那么写,请参考我们之前给出的“第一次使用RTC的配置工作总结”,然后进行时钟设置。 注意,因为我们需要进行写操作,所以根据固件库手册,要先调用RTC_WaitForLastTask(),等待标志位RTOFF被设置,保证在前一次写操作结束后才能进行。调用RTC_SetCounter(Time_Regulate());,...
调用RTC_SetCounter(Time_Regulate());,将计数值写入RTC计数器。 由于后面要通过BKP_WriteBackupRegister()函数对BKP_DR1写操作,因此之前还需要进行一次RTC_WaitForLastTask(),这样,对时间的设置就完成了。剩下的代码,比较简单,主要是注意如下: RTCCount=RTC_GetCounter();//获得计数值并计算当前时钟/Computehours/...
所以设置RTC时间或者获取RTC时间,就是设置RTC_CNT寄存器或者获取RTC_CNT寄存器的值。 所以封装的设置时钟的函数RTC_Set(),就是求得设定的时间与1970年1月1日 00:00:00之间的秒数,然后通过RTC_SetCounter()函数,写入RTC_CNT寄存器即可。 注意 每次操作RTC_CNT时应该要使能PWR 和 BKP 时钟,允许访问BKP域,否则会...
void RTC_SetCounter(uint32_t CounterValue) { RTC_EnterConfigMode(); /* Set RTC COUNTER MSB word */ RTC->CNTH = CounterValue >> 16; /* Set RTC COUNTER LSB word */ RTC->CNTL = (CounterValue & RTC_LSB_MASK); RTC_ExitConfigMode(); } /** * @brief Gets the RTC counter value. ...
RTC_ITConfig(RTC_IT_SEC, ENABLE); //又是等待上一次对RTC寄存器的写操作完成 RTC_WaitForLastTask(); //32768晶振预分频值是32767,不过一般来说晶振都不那么准 RTC_SetPrescaler(32776);//如果需要校准晶振,可修改此分频值 RTC_WaitForLastTask();
RTC_CRL: 0位:进入秒中断后,可判断该位为1决定发生了中断,必须写0清除 3位:寄存器同步标志位,没有同步之前,不被允许修改RTC_CRT/CRL的值,必须先判断该位为1时,同步了。 4位:在修改RTC_CNT/RTC_ALR/RTC_PRL的值前,必须置该位为1,进入配置模式。
void RCC_RTCCLKCmd(FunctionalState NewState)//时钟使能 RTC配置函数(预分频,计数值: void RTC_SetPrescaler(uint32_t PrescalerValue);//预分频配置:PRLH/PRLL void RTC_SetCounter(uint32_t CounterValue);//设置计数器值:CNTH/CNTL void RTC_SetAlarm(uint32_t AlarmValue);//闹钟设置:ALRH/ALRL ...
RTC_SetPrescaler(32767);RTC_SetCounter(0); //初始值设定为0s RTC_WaitForLastTask();RTC_SetAl...
if (RTC_GetCounter() == 0x00015180) //获取RTC计数器的值 RTC_SetCounter(0x0);//设置RTC计数器的值 通过读取RTC计数器的值,可以将其转化为时:分:秒的形式打印出来。 同时,如果RTC是第一次被配置,用户需要输入时间,然后调用Time_Adjust( )将用户输入的时间转化到RTC计数值写到相应的寄存器中。
RTC_SetCounter(secCount);//设置RTC计数器的值 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...