关于TSWUTC值越小,就越干扰其他中断唤醒的问题 | 结案
单片机型号: STC8H4K64TL,固件版本号: 7.4.3U硬件电路:触摸按键 + 外部32.768晶振驱动RTC + 低功耗深度休眠+ I/O口P51中断;
休眠进入条件:按键连续30秒空闲;
休眠唤醒条件:触摸按键唤醒、RTC闹钟唤醒、P51中断唤醒;
问题现象:
当把TSWUTC设置的比较小例如1时,则出现概率性RTC唤醒失败、P51中断唤醒失败,
而触摸则每次都能唤醒成功。如果把值改大例如255,出现问题的概率会大大降低,
但无法确认是否百分百解决;
此问题历史回顾:
1、首帖:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7504,结论:排除IRCDB的影响;
2、二贴:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7929,结论:排除TSWAIT的影响,把TSWUTC改大只是降低问题出现的概率;
图片是RTC唤醒失败的场景 miaoyahan 发表于 2024-5-18 17:26
图片是RTC唤醒失败的场景
正常应该是要17:24:00唤醒的,但实际没有醒来 测试代码是在
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4628
基础上修改而来的,
具体测试思路是:
1、只保留触摸唤醒、RTC秒针唤醒、uart1接收唤醒,其他唤醒全部关掉主要避免其他干扰;
2、设置最小值TSWUTC=1来测试,触摸唤醒对RTC唤醒的干扰程度,通过现象寻找TSWUTC取值方法;
3、程序首次启动,打印“STC8H4K64TLR 触摸按键测试程序”,用来判断设备是否重启;
4、而后进入休眠状态;
5、因为设置了RTC的秒中断,所以会每秒钟唤醒一次,同时串口打印当前rtc时间;
6、期间也可以通过触摸按键的方式进行唤醒;
通过以上逻辑,实测后发现当TSWUTC=1时,程序首次启动RTC就无法唤醒休眠,如果此时用触摸按键唤醒后可能RTC会正常唤醒一段时间,但最后仍然是有唤醒失败的概率。
现在有个最大的疑惑就是:如何准确的来确定TSWUTC这个值,从而保证RTC百分百可以唤醒?而官方手册中只写了频率太快会引起进入休眠失败,但没写具体的取值方法。
问题彻底结案,原因为:
在低功耗模式下,芯片内部的触摸按键唤醒模块,
会周期性的把系统时钟由"停振状态"改为"振荡状态",
而其他中断唤醒的前提条件"停振状态",如果在改变振荡状态期间,
正好发生了RTC中断会导致唤醒失败。
解决方案只能是牺牲功耗使用专门低功耗定时器循环唤醒来规避这个问题。
miaoyahan 发表于 2024-5-27 09:34
问题彻底结案,原因为:在低功耗模式下,芯片内部的触摸按键唤醒模块,会周期性的把系统时钟由"停振状态"改 ...
那也就是说 在使用触摸按键的单片机低功耗时就不能使用定时唤醒是这个意思么0.0 _奶咖君_ 发表于 2024-5-27 09:41
那也就是说 在使用触摸按键的单片机低功耗时就不能使用定时唤醒是这个意思么0.0 ...
如果只是触摸唤醒那不用管,如果是:触摸唤醒 + 其他唤醒,就一定需要打开低功耗定时唤醒,否则其他唤醒源可能出现唤醒失败的情况。 miaoyahan 发表于 2024-6-11 09:57
如果只是触摸唤醒那不用管,如果是:触摸唤醒 + 其他唤醒,就一定需要打开低功耗定时唤醒,否则其他唤醒 ...
你说的功耗定时唤醒,是不是掉电唤醒定时器? sky999 发表于 2024-7-14 01:46
你说的功耗定时唤醒,是不是掉电唤醒定时器?
楼主的结论就是掉电唤醒定时器
页:
[1]