【WCH蓝牙系列芯片】-基于CH582开发板—蓝牙主机睡眠模式,串口唤醒收发数据
-------------------------------------------------------------------------------------------------------------------------------------
在使用蓝牙主机的时候,有时需要通过宏定义开启睡眠模式,从而达到降低芯片的功耗。蓝牙的睡眠是由协议栈自行管理的,在芯片睡眠状态下是无法进行数据收发,需要将芯片唤醒之后,才能进行数据收发。
蓝牙芯片的sleep/shut down模式仅支持IO和RTC唤醒,如果想要在芯片睡眠模式下,由串口进行收发数据,就得在接收之前将串口切换为普通的GPIO口, 当有数据过来时,串口的GPIO口会产生由高电平到低电平的信号,将这个电平变化的信号作为触发GPIO中断的判断,从而唤醒芯片。
在触发GPIO中断里置一个标志位,通过这个标志位在uint32_t CH58X_LowPower(uint32_t time)函数中退出睡眠,这样串口能够收发数据,接收完成后将串口再切换为普通的GPIO,等待下一次的数据到来进行唤醒,接收数据。
在主机程序中,添加PB4和PB7的串口0 的初始化,并添加PB4和PB7的GPIO的外部中断初始化,在中断函数中,定义一个标志位。
在SLEEP.C中,通过判断标志位return 0退出睡眠进行唤醒
唤醒后,切换为串口中断初始化。
当串口发送数据时,会睡眠唤醒,一直处于醒着的状态,可以一直串口收发数据;将串口读取出的数据,通过串口再发送出去。
在串口中断中添加检查是否匹配目标字节序列的措施,这样可以通过串口发送特定的数据,对应不同的标志位结束串口操作,进入睡眠模式。
这里设置退出的串口字符串“*****”。
在蓝牙主机中,通过一个TMOS的任务,以一秒的循环去判断进入睡眠的条件
通过串口观察,休眠的状态和串口收发的状态
串口在发送第一包数据时,由于是需要唤醒,所以会是乱码或者是丢包的数据,从第二包开始就会正常的收发数据,通过发送结束串口的收发标志,打印数据可以看出打印的信息,进入睡眠的标志。