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

【实战经验】STM32CubeL4 固件库 V1.13.0 版的 RTC 唤醒问题

[复制链接]
eefishing 发布时间:2019-6-18 23:36
前言
* g) j! l: Y& j( r. _ 因为 STM32L4 极其出色的低功耗性能,越来越多的用户在使用 STM32L4 系列开发产品。谈到低功耗,自然就少不了低功耗模式。进入低功耗模式,自然需要能够唤醒。很多用户在产品开发中会使用 RTC 的定时唤醒从低功耗状态。 2 |) [( J; Q+ B
问题 某客户在其产品的设计中,使用了 STM32L476RGT6。客户使用 RTC 的定时唤醒来将系统从 STOP2 模式中唤醒,但是发现无法唤醒。
- u% n) P+ a/ s/ b, z调研
/ N2 C7 T8 L1 N0 o1.了解问题8 F9 \4 r' Y- g; V/ }; _* o% ^
客户参考\STM32Cube_FW_L4_V1.13.0\Projects\NUCLEO-L476RG\Examples\PWR\PWR_STOP2_RTC 的代码,加入其工程项目中,发现无法使用 RTC 将系统从 STOP2 模式中唤醒。电路跟客户以前的板子没有区别,觉得不会是电路的问题。为了验证问题,使用了 NUCLEO-L476RG 板来跑这段例程,结果,发现此例程并没有如 readme.txt 中描述的那样,进入STOP2 模式后经过大约 33 秒的时间后唤醒。按照 readme.txt 的说明,应该是 LED 先闪烁 5 秒,然后熄灭,进入 STOP2 模式,RTC 定时 33 秒后将系统唤醒,再回到闪灯,如此循环。但是,实际上这个例程的结果是 LED 闪烁 5 秒后进入 STOP2模式后就再也没有见到 LED 闪烁了,即死在 STOP2 模式了。 3 U5 I, e  I8 P1 p
2.分析问题4 l* Q( ?4 L. u' F& {
为进一步确认问题,使用另一版本的固件库的相关例程\STM32Cube_FW_L4_V1.12.0\Projects\NUCLEOL476RG\Examples\PWR\PWR_STOP2_RTC 进行验证,结果却发现功能是正常的。难道客户描述有误?下载跟客户相同的STM32CubeL4 版本库,即用 STM32Cube_FW_L4_V1.13.0 来进行验证,发现客户描述的问题确实存在。也就是说,V1.12.0 和 V1.13.0 在这个例程上存在差异。检查 main.c 源代码,并没有存在区别。所以,猜测驱动代码出问题了。可能时没有产生中断去唤醒 STOP2 模式,所以特别来检查一下 main.c 中调用的 RTC 唤醒定时器中断的配置函数。
2 B$ g1 d& `% k6 e* ~3 JHAL_RTCEx_SetWakeUpTimer_IT(&RTCHandle, 0x0FFFF, RTC_WAKEUPCLOCK_RTCCLK_DIV16); 0 L  ^; Z" l- m$ s' v
0 a* r4 i9 V, K, {" x/ h4 ]& w
HAL_RTCEx_SetWakeUpTimer_IT()函数位于 stm32l4xx_hal_rtc_ex.c 中。对比 V1.12.0 版本和 V1.13.0 版本中的这个函数,发现在 V1.13.0 为了加入对 STM32L412 和 STM32L422 的支持,对此函数内容进行了修改。最后发现,在 V1.13.0 版本中,修改后的这个函数出现了一个 Bug:
! [* K/ {/ n6 q3 H8 P4 H0 c  i' o- S
...........
- U! |& x: @# \! H8 \
想了解更多,请下载原文阅读

2 _5 t0 d5 J7 J/ e6 W! _5 T: r
赞 收藏 评论1 发布时间:2019-6-18 23:36

举报

1个回答
3111272 回答时间:2019-6-24 12:24:18
关键时候还是撸寄存器最靠谱
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版