|
前言4 o1 Z2 S+ e# K" { 实时时钟(RTC)是一个独立的BCD 定时器/计数器,用来提供准确的日历和时间信息。准确性是其重要的指标。% L2 p. J% C+ `: q 1 i* ?( E4 V/ N3 X+ l# g1 d 问题/ `. a) r4 G0 X9 ]& U. [# |1 E 某客户在其产品的设计中,使用了STM32F429IIT6。客户在使用过程发现一个问题,虽然已经有使用电池对VBAT 进行供电, 但是在经常频繁的VDD 上下电之后,发现时钟会比准确的时间慢几秒钟。$ u h; E. U4 N {0 X 调研 1.了解问题2 S) a/ ^6 V2 J 向客户了解其使用的固件库,得知他的程序是参考STM32Cube_FW_F4_V1.3.0\Projects\STM324x9I_EVAL\Examples\RTC% f- i0 E: m( J1 K& ~( \* Q 中的RTC_Calendar 例程。于是找来STM32439I-EVAL2 来进行验证,测试发现,, J7 w0 ]3 Y, M. b& s' f2 | STM32Cube_FW_F4_V1.3.0\Projects\STM324x9I_EVAL\Examples\RTC 中的RTC_Calendar 例程确实存在频繁上下电会导4 l! P6 B$ J- e- K! Q( U 致时间变慢的情况;而对标准外设库0 a4 ~; h: C1 ?8 s; R: y6 O) b1 ~ STM32F4xx_DSP_StdPeriph_Lib_V1.4.0\Project\STM32F4xx_StdPeriph_Examples\RTC 中的RTC_Calendar 例程进行测试, 则不存在此问题。所以,怀疑STM32Cube_FW_F4_V1.3.0\Projects\STM324x9I_EVAL\Examples\RTC 中的RTC_Calendar 例程存在Bug。4 }7 B+ F" q, S . `0 K* X" L' d7 b1 F 2.问题分析 仔细阅读STM32Cube_FW_F4_V1.3.0\Projects\STM324x9I_EVAL\Examples\RTC 中的RTC_Calendar 例程,分析一下 main.c 主程序,“if(HAL_RTCEx_BKUPRead(&RtcHandle, RTC_BKP_DR0) != 0x32F2)”是用来判断RTC 是否是已经被配' x9 h8 F! M9 ^9 ]: @ 置过的,所以怀疑的重点可放在这之前的“if(HAL_RTC_Init(&RtcHandle) != HAL_OK)”中的HAL_RTC_Init()函数。& T0 e0 T- g' h5 x4 ^" T, M: E& I& L7 l 进入位于stm32f4xx_hal_rtc.c 中的HAL_RTC_Init()函数,再进入其调用的位于stm32f4xx_hal_msp.c 中的 HAL_RTC_MspInit()函数,在这个函数中,可以看到以下代码: 2 V+ |- n3 y( f* h' D/ X9 u: M 详细代码和解答请下载文档:https://www.stmcu.org.cn/document/detail/index/id-216744( r% e/ i) n8 s9 n2 u 更多实战经验文档:https://www.stmcu.org.cn/document/list/index/category-657" N5 h$ |+ {8 V- R3 y: J |
| 现在用库除非遇到问题很少有人去分析了。 |
微信公众号
手机版