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

技术笔记-STM32CubeL4 固件库V1.13.0版的RTC唤醒

[复制链接]
eefishing 发布时间:2019-6-21 12:49
因为STM32L4极其出色的低功耗性能,越来越多的用户在使用STM32L4系列开发产品。谈到低功耗,就少不了低功耗模式。进入低功耗模式,自然需要能够唤醒。很多用户在产品开发中会使用RTC把系统从低功耗模式定时唤醒。

# L6 S2 j+ y( ~* |+ F
问题

2 i/ j5 \' f  Y! h
客户在产品的设计中,使用STM32L476RGT6。客户使用RTC的定时唤醒来将系统从STOP2模式中唤醒,但是发现无法唤醒。
8 h' A1 A: P! ?+ A7 u2 F
调研

; t8 n6 Q+ n  D. [4 j- o+ X
01
了解问题

1 y# b1 K2 s. Y5 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模式了。


7 G6 m$ H2 G' c  E1 Y+ i
02
分析问题
: `" a- I0 K& L/ g* n' \. \8 q
为进一步确认问题,使用另一版本的固件库的相关例程\STM32Cube_FW_L4_V1.12.0\Projects\NUCLEO-L476RG\Examples\PWR\PWR_STOP2_RTC进行验证,结果却发现功能是正常的。难道客户描述有误?下载跟客户相同的STM32CubeL4版本库,即用STM32Cube_FW_L4_V1.13.0来进行验证,发现客户描述的问题确实存在。也就是说,V1.12.0和V1.13.0在这个例程上存在差异。检查main.c源代码,并没有存在区别。所以,猜测驱动代码出问题了。可能时没有产生中断去唤醒STOP2模式,所以特别来检查一下main.c中调用的RTC唤醒定时器中断的配置函数。
1.jpg
(点击图片可放大查看)
HAL_RTCEx_SetWakeUpTimer_IT()函数位于stm32l4xx_hal_rtc_ex.c中。对比V1.12.0版本和V1.13.0版本中的这个函数,发现在V1.13.0为了加入对STM32L412和STM32L422的支持,对此函数内容进行了修改。最后发现,在V1.13.0版本中,修改后的这个函数出现了一个Bug:
2.jpg
在L912行的位置,也就是针对非STM32L412/STM32L422的部分,它使用的语句是:
3.jpg
而在V1.12.0中,使用的是:
4.jpg
这个看起来就很明显了,在V1.13.0中使能的是事件,而非中断。所以导致了RTC唤醒定时器事件没有产生中断。

7 I0 e  G8 g; p. E7 W
03
问题解决

* Y% f: C0 V) B& `4 J
将L912行位置上的
5.jpg
修改为:
6.jpg
问题解决。

+ X5 N* x; r) [1 b
结论处理
7.jpg
收藏 评论1 发布时间:2019-6-21 12:49

举报

1个回答
Kevin_G 回答时间:2019-6-25 10:02:20
点赞,库越来越完善,离不开大神的支持。

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版