WCH沁恒单片机
直播中

李骏鹏

7年用户 1182经验值
私信 关注
[问答]

HAL_SLEEP开启后串口中断无法接收数据怎么解决?

一个使用串口中断接收外部设备数据的应用。
在开启 HAL_SLEEP 之前,通讯一切正常。
开启 HAL_SLEEP 后,串口中断无法正常接收外部设备发来的数据。
机器的其他操作都正常  :  按键,pwm输出,adc采集.
就是串口中断 失效了。





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






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


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


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


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

回帖(1)

云甫太

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

举报

更多回帖

发帖
×
20
完善资料,
赚取积分