![shequ.stmicroelectronics.cn](./template/st_v1/static/img/logo2.png)
# P2 a3 \5 K2 U8 { 上篇文章中我用RTC定时,实现了定时从standby模式下唤醒,但是有个问题,定时时间太短了。 如果我选择把RTC时钟(32.768KHz)进行16分频,从代码函数的入参counter的类型为U32,可知其最大值为0xFFFF。所以代入公式:0xFFFF = max定时时间 * (32768 / 16),解得max定时时间 = 31(s)& u5 ]0 s4 N1 D0 o, @, z, ^4 b 如果时钟源选择1Hz,那么最大定时时间也就0xFFFF(s) = 18(H)3 L6 e& D$ c4 N 如果我要拿这个来做日历的定时刷新,只需要在一天的00:00唤醒,刷新即可,如果用上文的方法一天至少要唤醒2次,其中有一次是完全无意义的。 所以今天我要来玩一下RTC的闹钟,他就没有这个问题了,只有在RTC时钟与你设置的定时时间一致时你才会被唤醒 工程的话就用上一篇那个 0 i% w( y: y. ^ ' `8 Q1 V7 v2 b. Z 一.Cube修改9 g- v/ s, o3 g' U; e 然后来到RTC界面,把上次打开的wkup关掉,把闹钟A打开# L% {! h' K3 e1 i3 s ![]() 5 c9 D8 X2 m( t, w; M9 ~/ ^. N 接下来到参数界面配置一下参数。我要把默认RTC的时间设置成23点59分30秒。然后闹钟触发时间配置成0点0分0秒 ![]() : }& G# A2 a' ^" C9 q ![]() - E* A4 O; X5 b 然后要把NVIC开一下 ![]() , t8 q' g2 f$ }, b; [ 然后生成代码(图略)# m9 t3 ~7 t6 X3 X 二.代码修改# F+ i+ p9 [* S; w8 W 代码几乎不用修改,只要加一句话即可,如下
![]() & `$ S: u7 P3 k( `% w& k, e 运行效果: ![]() 首次上电后过了30S,就到了我设置的0点0分0秒,此时就会被闹钟唤醒,打印的时间也正确。之后他就又去睡觉了,并且我观察了好几分钟都没有被唤醒。应该是达到了我今天的目的。 工程:
![]() |
【免费申请】智能连接与感知:探索STEVAL-STWINKT1BA多功能无线平台
【NUCLEO-U083RC评测】⑨电子墨水屏RTC低功耗日历Demo
【NUCLEO-U083RC评测】⑦RTC&STANDBY WKUP功能及功耗测试
【NUCLEO-U083RC评测】⑥RTC
【NUCLEO-U083RC评测】⑤低功耗定时器LPTIM
【NUCLEO-U083RC评测】④RNG随机数发生器
【NUCLEO-U083RC评测】③AES加解密测试
【NUCLEO-U083RC评测】串口printf输出
【NUCLEO-U083RC评测】1.MSI时钟,Sleep,stop,standy,shutdown四种低功耗模式测试
【NUCLEO-U083RC评测】+串口printf打印