你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L476之RTC使用注意

[复制链接]
catch2000 发布时间:2017-6-8 14:52
最近在使用STM32L476的RTC功能时,
发现在重新设置日期和时间后,
虽然时间已经更新为设置的时间,
但是日期没有改变为最新的日期。
只有重新复位后,RTC_DR的内容才被刷新。

阅读手册才发现,

STM32L476 RTC.png

默认设置下,读取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;


收藏 评论2 发布时间:2017-6-8 14:52

举报

2个回答
wolfgang2015 回答时间:2017-6-9 10:47:26
初始化之后没有 Enable?或者 Start RTC的操作?只有Reset?
catch2000 回答时间:2017-6-10 10:44:31
wolfgang2015 发表于 2017-6-9 10:47
初始化之后没有 Enable?或者 Start RTC的操作?只有Reset?

在RTC的HAL库中没有找到相关的Enable操作,
你是指这里缺少了哪一个Enable操作呢?

当前的初始化确实只进行了这些操作。
if (HAL_RTC_Init(&hrtc) != HAL_OK) {
    return VC_ER_FATIL;
  }
没有额外调用其他的操作。


在COMP中设置好之后需要调用HAL_COMP_Start,
才能使能COMP,
这个在HAL库中找到了。

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版