最近被一个睡眠唤醒的问题烦躁了很久,特此记录下来供参考
此芯片为51内核的,因为有RTC功能,所以不能使用断电来实现关机,只能通过进入睡眠状态来实现关机,开机使用睡眠唤醒。
遇到2个问题:
1,睡眠唤醒执行的程序位置
2,睡眠唤醒需要有按键唤醒,闹钟唤醒,插USB唤醒
问题1
开始咨询的时候,代理商告诉唤醒的位置为进入睡眠后的下一行代码,测试总是出现一些奇怪的现象,要按很久才能进入开机。
最终发现睡眠唤醒的位置为重头执行,即main函数重新开始执行
问题2
有4个IO可用来设置为睡眠的唤醒IO,拉高唤醒脚就可以实现睡眠唤醒。将唤醒脚和开关按键连到一起,就可以实现按键唤醒的功能。
RTC唤醒为系统内置的,这里不做说明,需要特殊处理的就是开机后要判断闹钟的标志,确认是否是闹钟开机。
USB唤醒:
1) 刚开始的时候与唤醒IO连接,可以唤醒。但是开机后,唤醒IO还要实现关机按键功能,如果与USB连接就会不停发关机消息
2) 检测USB检测脚,如果有USB连接就屏蔽关机消息。但是按键长按实现关机功能,短按却有其他功能
3) 有4个IO可以用来做唤醒脚,用一个IO做按键唤醒,另外一个IO做USB唤醒。但是经过测量发现,USB连到另外唤醒脚上,也会导致按键使用的唤醒IO拉高,芯片内部将4个IO是连通的
4)芯片除了用IO控制唤醒外,还有另外一个WAKEUP脚不用软件设置直接拉高也能唤醒。使用这个脚做USB唤醒,测试发现可行。
5) 测试的时候发现连适配器的USB(即充电用的火牛)可以唤醒,但是连PC的USB却无法唤醒,量的时候发现2种情况下电流不一样大,适配器的电压一般是5V,而电脑一般是4点几,所以要把电阻调的适合2种USB才可以。
(关于无RTC的关机,芯片上电就会从main开始执行,开关按键和USB都是执行上电的动作。)