cw32L010 RTC唤醒问题
#21ic问答#想问下CW32L010 RTC唤醒问题,做心跳设计,心跳间隔在4~5分钟这样子,研究了下010的RTC,LSI 是32.8khz,AWTPR预分频16,AAR计算下来最长也就20s,那个日历唤醒写死了只有单位1的,只能自己算时间闹钟唤醒吗?会不会比较耗电? 以及有没有010的时间戳唤醒的example? CW32L010的RTC自动唤醒功能,就能实现长时间的间隔唤醒。
1、以PSC1 默认值为 0,PSC2 默认值为 0x3FFF,fTICKCLK = 2 Hz。
2、RTC_CR2.AWTSRC = 1, 选择唤醒定时器计数时钟来源为TICKCLK。
3、RTC_CR2.AWTPRS = 3, 唤醒定时器计数时钟预分频DIV16:2/16=1/8Hz。
4、RTC_AWTARR = 39,则自动唤醒定时器定时周期 =(RTC_AWTARR+1)/ (1/8)=320s。
pssyx 发表于 2024-12-27 16:53
CW32L010的RTC自动唤醒功能,就能实现长时间的间隔唤醒。
1、以PSC1 默认值为 0,PSC2 默认值为 0x3FFF,fT ...
感谢版主,原来是我没看懂手册,我去试试 pssyx 发表于 2024-12-27 16:53
CW32L010的RTC自动唤醒功能,就能实现长时间的间隔唤醒。
1、以PSC1 默认值为 0,PSC2 默认值为 0x3FFF,fT ...
版主,需要配置中断吗,按照你的代码,加上配置中断,程序就会卡主在这个RTC_ITConfig这里
RTC_Cmd(DISABLE); //停止RTC,保证正确访问RTC寄存器
CW_RTC->CR2_f.AWTEN = 1;
CW_RTC->CR2_f.AWTSRC = 1; // 配置TICKCLK时钟源
CW_RTC->CR2_f.AWTPRS = 3; // DIV分频16
CW_RTC->AWTARR_f.ARR = 9; // 90s
RTC_ClearITPendingBit(RTC_IT_ALL);
RTC_ITConfig(RTC_IT_AWTIMER, ENABLE);
NVIC_EnableIRQ(RTC_IRQn);
RTC_Cmd(ENABLE); fox1 发表于 2024-12-30 19:56
版主,需要配置中断吗,按照你的代码,加上配置中断,程序就会卡主在这个RTC_ITConfig这里
RTC_Cmd(D ...
版主,我把ITCONFIG改成 CW_RTC->IER_f.AWTIMER = 1; 代码不卡了,但是只开了GPIOA GPIOB RTC,而且GPIO未使用的引脚改成了高阻态,睡眠电流200ua,,请问你能帮我测试下我的代码吗?
fox1 发表于 2024-12-27 17:04
感谢版主,原来是我没看懂手册,我去试试
解决了版主,有个口漏电流,现在1ua了非常感谢 RTC自动唤醒功能,就能实现长时间的间隔唤醒。 请问,一个口漏电流这个是怎么检测到的?或者后续是怎么解决的呀? CW32L010的RTC模块确实有一些限制,特别是AWTPR预分频和AAR寄存器的设置 由于RTC的日历唤醒功能只能设置单位1的唤醒时间,你可以通过多次唤醒来实现这个功能 一般来说,你可以设置RTC在20秒后唤醒,然后在唤醒后再次设置RTC唤醒时间为20秒,重复多次直到达到4~5分钟的总时间。 在每次RTC唤醒后,使用一个软件计数器来记录唤醒次数,当计数器达到预设值(例如12次,对应4分钟)时,执行心跳任务 使用多次唤醒和软件计数器的方式会增加一些功耗,因为每次唤醒都会导致MCU从低功耗模式中退出,执行一些代码后再进入低功耗模式。不过,这种方式的功耗增加通常是可控的,具体取决于唤醒频率和唤醒后的处理时间。 多次唤醒和软件计数器会导致一些软件层面的问题发生 其实也是可以的 用多次唤醒和软件计数器 根据RTC的时钟源和预分频设置,计算并配置AWTIMER的自动唤醒时间。
例如,如果RTC的时钟源为LSI(32.8kHz),并且预分频为16,则可以通过设置AWTIMER的ARR值来实现所需的唤醒间隔。 设置RTC在较短的间隔(如20秒)内唤醒。
在每次RTC唤醒后,使用一个软件计数器来记录唤醒次数。
当计数器达到预设值(例如12次,对应4分钟)时,执行心跳任务。 尽量减少唤醒后执行的任务量,以缩短MCU在低功耗模式外的停留时间。
页:
[1]