|
使用该MCU的亚秒寄存器进行亚秒计时,同步分频设置255,异步分频设置127。每100ms读取一次RTC计时数据。读取代码如下: uint8_t rtc_repeat_cnt; uint32_t rtc_ssr; uint32_t rtc_sec,rtc_sec_chk; dst->year = LL_RTC_DATE_GetYear(RTC); //年份 dst->month = LL_RTC_DATE_GetMonth(RTC); //月份 dst->day = LL_RTC_DATE_GetDay(RTC); //日期 dst->hour = LL_RTC_TIME_GetHour(RTC); //小时 dst->minute = LL_RTC_TIME_GetMinute(RTC); //分钟 //秒数和亚秒进行原子化读取 rtc_repeat_cnt = 0; do { rtc_sec = LL_RTC_TIME_GetSecond(RTC); rtc_ssr = LL_RTC_TIME_GetSubSecond(RTC); rtc_sec_chk = LL_RTC_TIME_GetSecond(RTC); rtc_repeat_cnt ++; if(rtc_repeat_cnt >= 5) //读取5次都不能获取正确的秒和亚秒,则以最后读取到的值为准 { break; } }while(rtc_sec != rtc_sec_chk); dst->second = rtc_sec ; //秒 //根据亚秒寄存器进行ms换算 if(rtc_ssr <= 255 { dst->sub_second = (255- rtc_ssr) * 1000 / (255+ 1); } else { dst->sub_second = 999; } 实际应用中,发现亚秒已经溢出了,计算的sub_second从九百多变为个位数,但是读取的秒值未加1,一般再读取1-3次,秒值会加1。单独看亚秒值的变化,与100ms的读取周期是相符的,RTC的计时也很准确,感觉就是亚秒寄存器的重装载和秒值加1未同步。 有人知道这是什么原因么? |
STM32F405ZGT6 批次22+ 问下这颗料,60度烘烤12小时后,出现鼓包,是怎么回事? 原厂有标准的烘烤温度范围 跟时长范围吗?
非官方开发板第一次下载成功,之后就各种失败
STM32H5F/E 相比 STM32F4 系列最大的优势是什么?
ST TOF问题请教
STM32F4的SPI端口,如何实现多通道输入?
STM32F4标准库USB例程CDC_HID_Composite问题:第一次识别成功,后续插入电脑均识别失败
STM32F407 Flash 故障
STM32F407使用LAN8720A进行网口通信
USBX在F407上创建CDC不能正常使用
STM32F407 音频输入输出时 IFFT 无法正常工作
微信公众号
手机版
你读取时间的循序跟目前反过来,即从亚秒、秒、分、时、日期的顺序来进行,且都读到。
这确实是个新的思路。不过我是每间隔100ms读取一次RTC时钟的,这个周期已经远大于RTCCLK了。有时需要读取3次,秒值才会增加,按说跟这个没有关系。回头我先试试吧。
我试过了,反过来读取,秒的进位和亚秒的溢出确实同步了。但是运行一天会慢5秒左右。改成从年份开始读取,就不会慢了。请问你有相关的经验么?