|
使用该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未同步。 有人知道这是什么原因么? |
有没有STM32F405RG参考设计
LSM6DS3TR-C静止情况下使用MotionFX固件算出的欧拉角周期性异常跳动
全球论坛无法登录
STM32F429使用FMC接口扩展SDRAM
用STM32F407做U盘拖拽升级,目前BootLoader和实现U盘,后面就不知道怎么操作了。
STM32上电后会多次进入所有打开的定时器回调函数中,如何避免这样的情况?
STM32F427VIT6这款芯片所支持的摄像头模组的列表有不?
STM32F407 FLASH写入超过最大空间依旧能成功。
简单聊聊STM32的SPI外设
有没有好用的日志系统推荐
微信公众号
手机版
你读取时间的循序跟目前反过来,即从亚秒、秒、分、时、日期的顺序来进行,且都读到。
这确实是个新的思路。不过我是每间隔100ms读取一次RTC时钟的,这个周期已经远大于RTCCLK了。有时需要读取3次,秒值才会增加,按说跟这个没有关系。回头我先试试吧。
我试过了,反过来读取,秒的进位和亚秒的溢出确实同步了。但是运行一天会慢5秒左右。改成从年份开始读取,就不会慢了。请问你有相关的经验么?