
上篇文章中我用RTC定时,实现了定时从standby模式下唤醒,但是有个问题,定时时间太短了。. s3 `( ~4 i. A ?$ y" ~ B e $ o: y- ^- k p9 j6 F0 P 如果我选择把RTC时钟(32.768KHz)进行16分频,从代码函数的入参counter的类型为U32,可知其最大值为0xFFFF。所以代入公式:0xFFFF = max定时时间 * (32768 / 16),解得max定时时间 = 31(s)* N, P( E N7 W( l ! X& S. {1 k) R+ [7 B 如果时钟源选择1Hz,那么最大定时时间也就0xFFFF(s) = 18(H)' y+ V" q4 P. X6 G8 L0 X- u 如果我要拿这个来做日历的定时刷新,只需要在一天的00:00唤醒,刷新即可,如果用上文的方法一天至少要唤醒2次,其中有一次是完全无意义的。 所以今天我要来玩一下RTC的闹钟,他就没有这个问题了,只有在RTC时钟与你设置的定时时间一致时你才会被唤醒- a+ y4 s4 T+ s/ b8 P7 i& s8 i 工程的话就用上一篇那个 4 {, w# |& a. n1 K; ?+ v, t6 Z ! Q. t) d3 [; x0 U; n1 U 一.Cube修改 L6 P9 ?5 u) N* s+ J 然后来到RTC界面,把上次打开的wkup关掉,把闹钟A打开$ I# g J$ r4 g ![]() : ]# ^* T) _$ Q1 B. |5 }' ~ 接下来到参数界面配置一下参数。我要把默认RTC的时间设置成23点59分30秒。然后闹钟触发时间配置成0点0分0秒 ![]() + z3 @4 o5 j0 ^: Z" D7 h ![]() 然后要把NVIC开一下 ![]() + o! R$ O/ b8 ^! ] 然后生成代码(图略); {6 S3 b! s2 m 二.代码修改 代码几乎不用修改,只要加一句话即可,如下
![]() ( U5 @3 D9 r5 X 运行效果: ![]() 首次上电后过了30S,就到了我设置的0点0分0秒,此时就会被闹钟唤醒,打印的时间也正确。之后他就又去睡觉了,并且我观察了好几分钟都没有被唤醒。应该是达到了我今天的目的。 工程:
![]() |
【STM32C0测评】Nucleo-C092开发板功耗测试
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(软件IIC)
【STM32C0测评】Nucleo-C092开发板IIC通信测试(硬件软件IIC一网打尽)
【STM32C0测评】Nucleo-C092开发板USART串口测试
【STM32N6570-DK评测】2.最简点灯
【STM32C0测评】Nucleo-C092开发板使用PWM控制板载LED呼吸灯
【STM32C0测评】Nucleo-C092板卡外部中断控制板载LED灯
【NUCLEO-U083RC评测】SLEEP_MODE、STOP_MODE、STANDBY_MODE简要测试
【NUCLEO-U083RC评测】⑥RTC