|
最近在使用STM32L476的RTC功能时, 发现在重新设置日期和时间后, 虽然时间已经更新为设置的时间, 但是日期没有改变为最新的日期。 只有重新复位后,RTC_DR的内容才被刷新。 阅读手册才发现,
默认设置下,读取RTC_TR和RTC_DR都是读的shadow registers中的值。 虽然按照理论说,这两个寄存器会在两个RTCCLK周期内被刷新, 但是不知何故,在自己的应用中RTC_TR刷新了,RTC_DR一直没有刷新。 除非复位重启。 所以,需要设置RTC_CR中的BYPSHAD标志,直接读取calendar registers的内容。 避免设置后,RTC_DR的内容没有被更新。 那么这里有一个疑问, 实际应用中如果访问shadow registers是否存在隐患(或者确实是在初始化的时候,漏掉了某些设置,参考附注), 相比于direct access访问shadow registers的优点在哪里? 附: 在访问shadow registers的初始化设置如下: hrtc.Init.HourFormat = RTC_HOURFORMAT_24; hrtc.Init.AsynchPrediv = RTC_ASYNCH_PREDIV; hrtc.Init.SynchPrediv = RTC_SYNCH_PREDIV; hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; direct access的初始化设置如下: hrtc.Init.HourFormat = RTC_HOURFORMAT_24 | RTC_CR_BYPSHAD; hrtc.Init.AsynchPrediv = RTC_ASYNCH_PREDIV; hrtc.Init.SynchPrediv = RTC_SYNCH_PREDIV; hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; |
STM32L4R9 QuadSPI Flash通讯速率优化解析 32位总线的DMA传输适配核心方案
【STEVAL-STWINKT1B评测】运行Datalog固件并记录运行时间
【STEVAL-STWINKT1B评测】数字麦/模拟麦对比测试+音频配套上位机软件开发
【板卡评测】STEVAL-STWINKT1B读取 ACC/GYRO/MAG 实时数据
小白也能明白的STM32的低功耗与唤醒机制
【STM32入门学习路径指南】(四步走)
STM32和Arduino对比,谁更耐打?
STM32系统中2种数据掉电保护的方法
STM32 LL为什么比HAL高效?
STM32小白入门指南:从基础到OTA实现方案
微信公众号
手机版
在RTC的HAL库中没有找到相关的Enable操作,
你是指这里缺少了哪一个Enable操作呢?
当前的初始化确实只进行了这些操作。
if (HAL_RTC_Init(&hrtc) != HAL_OK) {
return VC_ER_FATIL;
}
没有额外调用其他的操作。
在COMP中设置好之后需要调用HAL_COMP_Start,
才能使能COMP,
这个在HAL库中找到了。