stm32g431,用外部32768晶振,读取内部rtc时钟。 主循环里基本都屏蔽掉了,串口接收中断和定时器中断也都关了。只剩
结果串口读上来的数一直不变。但进入调试状态,则可以看到内部rtc寄存器的TR寄存器是变化的,rtcTime这个结构体里的数也是变化的。串口收上来的数也变化,但不是一秒一秒的连续变化,而是有时候持续是某个读数,然后跳过了几秒。 也怀疑过晶振的问题,因为用示波器探头测量晶振管脚,观测不到波形。后来网上搜了下,说是32768负载能力较弱,不容易测到。 但既然调试状态下TR寄存器有变化,而且RCC相关寄存器里的LSERDY标志位是被置位的,应该不是晶振的问题。 |
要先读时间再读日期,不要先读日期
RTC本身有秒中断函数 进入秒中断函数以后调用串口2发送数据就可以了
现在这种while一直循环读取 rtc都不正常了吧 HAL_RTC_GetTime这个函数里是什么写法
循环一直读 串口一直发这种写法肯定有问题
RTC秒中断函数没用过...
我搜的几个例程都是直接用HAL_RTC_GetTime( )这个函数,里面其实就是把TR数据读出来放到时间数据结构体里。
秒中断没用过? 那你这个时间是怎么变化的?
RTC只是定时时钟 产生秒中断以后再中断里进行时间处理 产生的时钟
你在看看程序吧 是不是有什么函数没有配置的
不开秒中断,rtc寄存器数也是走的啊,直接读寄存器里的数就是rtc时间,我是这么理解的。
结果还是一样,非调试状态下,串口收上来的数不变;
调试状态下,串口上来的数变化,但有时候会隔几秒才变。
HAL_RTC_GetTime(&hrtc, &rtcTime, RTC_FORMAT_BIN);
之前只是读时间,所以出错了。改成读日期+读时间,就可以了。但不知道为什么那样不行,为什么这样行?
--------------------------------------------------------------
搜到了,函数说明:
* @note You must call HAL_RTC_GetDate() after HAL_RTC_GetTime() to unlock the values in the higher-order calendar shadow registers to ensure consistency between the time and date values.
Reading RTC current time locks the values in calendar shadow registers until Current date is read to ensure consistency between the time and date values.
意思是好像读了才更新?