该问题由某客户提出,发生在 STM32F103RBT6 器件上。据其工程师讲述:其产品为车载 GPS 导航监 控设备,其中使用了STM32 作为主控器件,负责管理整个设备。在该产品的设计中,使用了 STM32 的 RTC,并将其计时显示在产品的屏幕上。 计时显示的更新是由 RTC 的秒中断来完成的,即由 RTC 的秒中断服务程序从 RTC 中读出新的时间并更新到相关的变量中,再触发屏幕刷新程序更新屏幕上的 显示。在测试时发现屏幕上显示时间的秒部分走时不均匀,时快时慢,甚至会丢掉某个中间值而发生 跳变。 对该显示时间做长时间计时的测量,发现其长时间计时是准确的,即秒长度的平均值是准确 的。将程序中的其它中断关掉,只保留 RTC 的秒中断,问题依旧。通过在 RTC 秒中断服务程序中加 入对 GPIO 翻转的代码来测量 RTC秒中断响应的时间间隔,发现其是均匀的,如图(一)所示,说明 并非 RTC 的秒中断响应不及时而导致显示时间的波动。
用同样的方法测量从 RTC 秒中断得到响应到完成屏幕上显示时间的更新所消耗的时间,结果为 1.56mS,如图(二)所示。这一延时不足以对屏幕上显示时间造成的可察觉的波动。到此,不知下一 步该如何定位问题原因,请求技术支持。
调研:
重复观察现象,如其所述。为了便于观察,修改代码,在每次从 RTC 读取新的时间之后,将保存时间 的变量通过 UART 打印到终端软件上。其结果如图(三)所示,与设备屏幕上的显示时间是一致的:
进一步修改代码,在每次从 RTC 读取时间数据之前加入 1mS 的等待,如表(一)所示,其中变量 timedisplay 由 RTC 的秒中断服务程序置“1”,触发该任务更新屏幕显示时间:
编译后重新测试,结果表明之前所述现象不再发生,如图(四)所示:
|