HAL_SLEEP开启后串口中断无法接收数据

一个使用串口中断接收外部设备数据的应用。

在开启 HAL_SLEEP 之前,通讯一切正常。

开启 HAL_SLEEP 后,串口中断无法正常接收外部设备发来的数据。

机器的其他操作都正常  :  按键,pwm输出,adc采集.

就是串口中断 失效了。


image.png


和这位用户的情况基本一致。

image.png


image.png


给出的解决方案是再休眠前将串口修改为io并且设置为唤醒。

唤醒后再将io恢复为串口。


 解决方案中的操作我不太理解:


睡眠前需要将串口设置为普通io:  我只是开启了 HAL_SLEEP 。 没有主动调用休眠,是系统自动进入休眠,我应该在哪里进行该操作呢?


唤醒后将io重新设置为串口:我不知道系统是在哪进行休眠的, 所以我应该在怎么恢复呢?

系统的休眠是由协议栈管理的,在进行休眠时无法进行数据接收,因此会收不到数据。

芯片通过宏开启睡眠。在接收数据之前将串口模式切换为GPIO,当有数据过来,GPIO会产生由高电平到低电平的信号,可以由这个信号作为判断,触发GPIO中断从而唤醒。唤醒后将GPIO再切换为串口来接收数据,此时需要注意在lowpower函数中置一个标志进行退出睡眠,否则又无法接收到数据了。接收完成后再切换为GPIO进行判断下一次是否有数据过来从而唤醒。

这是大致的流程,相应的程序目前暂未提供,后续如提供会第一时间在此贴回复。


我的设备为蓝牙从机,在上电后处于待机状态。在待机状态下,只需要进行广播,等待app连接。但是需要超低功耗。

app连接后,app控制设备开机。开机后,设备就不需要考虑功耗问题了。

直到app控制设备关机,蓝牙断开,重新进入待机,等待app再次连接。



能不能设置,在待机的情况下让 HAL_SLEEP 生效, 开机后,让HAL_SLEEP失效呢 ?

或者有其他方案处理我的这种应用环境吗?


留一个邮箱,这里提供一个程序作为参考。


个人信息保护,已隐藏


已发送至邮箱,请查收。


请也发一份给我参考,谢谢。个人信息保护,已隐藏



已发送至邮箱,请查收。


这边也需要一份例程,麻烦给发一下,谢谢。个人信息保护,已隐藏


也发我一下邮箱 个人信息保护,已隐藏


已发送至邮箱,请查收。


也发我一下,个人信息保护,已隐藏


请查看该博客进行下载:

CH582芯片Sleep模式串口唤醒接收数据 - SweetTea_lllpc - 博客园 (cnblogs.com)



只有登录才能回复,可以选择微信账号登录