【WCH蓝牙系列芯片】-基于CH32V208开发板—串口唤醒蓝牙低功耗

-------------------------------------------------------------------------------------------------------------------------------------

利用CH32V208开发板,通过宏定义开启蓝牙低功耗HAL_SLEEP模式。
    蓝牙芯片sleep/shut down模式仅支持IO和RTC唤醒,如果IO只接了串口比如PA2/PA3(UART2),在睡眠前需将串口模式切换为普通IO,并设置唤醒
    程序中设置两种外部中断,一种是普通IO口的外部中断,先初始化外部中断0,通过GPIOA的对应的外部中断线0,为下降沿触发。
    另一种是串口RX口作为普通IO中断唤醒口,在串口接收数据前,先将串口接收口作为外部中断唤醒,当串口接收数据时,先触发中断唤醒,然后再进行数据接收,当接收完毕后,又切换为中断唤醒口,进入睡眠。

 

    HAL_SLEEP宏开启,是由蓝牙协议栈管理进入睡眠函数BLE_LowPower,并执行该函数的PWR_EnterSTOPMode_RAM_LV才会睡眠,进入低功耗模式,因此可以在刚进入CH58X_LowPower的时候做标志,选择是否执行LowPower_Sleep函数。
    在SLEEP.C中uint32_t BLE_LowPower(uint32_t time) 函数中,用于使设备进入低功耗模式。通过标志位来确定是否进入低功耗模式,当退出低功耗模式后,需要调试串口的初始化操作。

在从机peripheral.c中添加一个TMOS任务, 通过判断标志位执行对应的操作,利用switch函数flag_sleep的状态。
    当flag_sleep=0,执行延时1秒,打印数据

    当GPIO——PA0按下低电平后,睡眠唤醒后,置flag_sleep=1后,串口发送数据0x67、0x66、0x34、 0x99

 

    当串口发送数据时,先进行唤醒,在接收数据,通过串口中断处理中,判断串口发送数据的帧头和帧尾,将数据存放在数据缓冲包中,再通过flag_sleep=2,将接收的数据通过串口再发送出去。

     通过串口打印数据去观察串口唤醒后发送数据的准确性

posted on 2024-03-05 10:32  凡仕  阅读(169)  评论(0编辑  收藏  举报