ch573芯片集成低功耗 2.4-GHz 无线通讯模块,包括 RF 收发器、基带和链路控制以及天线匹配网络,支持低功耗蓝牙 BLE。内部提供一百多个寄存器用于调节参数和控制过程及状态,官方优化的通讯协议栈和应用层 API,支持组网,支持各种主流操作系统下的上拉机开发,提供各 OS 下的 API 和 APP,具体信息参考官方ch573手册和大量的官方例程。
官方提供了几十个BLE例程供大家参考,这里以蓝牙串口为例,打开例程“BLE_UART”的工程文件:
按住ctrl,然后左键单机app_uart_init();函数:
记住上面两个串口以及对应的引脚,在接下来的APP调试中会用到:
打开工程后,点击项目,然后点击编译:
烧录后,使用USB-TTL连接开发板的串口1,即 PA8(RXD1)\PA9(TXD1),打开串口助手,波特率115200,然后按下复位,系统会打印初始化完成
手机应用商店直接搜索“BLE调试助手”,可以看到有一款沁恒官方的APP,点击下载安装:
打开上面下载的APP,点击连接,同时串口助手中也可以看到连接信息:
在发送后可以看到模块发送了三字节同时接收到了三字节,在串口助手中也可以看到接收的数据大小:
然后我们将USB-TTL连接开发板的串口1换成串口3,即 PA4(RXD3)\PA5(TXD3),然后再次重复上述的数据发送操作,系统可以显示接收的具体数据内容:
然后我们切换到数据接收界面,关闭“hex”并打开“接收通知数据”
至此BLE数据收发测试完成,接下来我们依托这个数据收发的工程完成自己的应用开发.
为了避免改用引起的错误,首先复制粘贴原来的工程项目,并命名为“CH573F_08_BLE_UART”
在上面的BLE蓝牙通信的使用中介绍到了蓝牙串口通过UART1打印日志调试信息,例如连接情况以及蓝牙串口接收数据的大小,并通过UART3完成蓝牙串口数据的收发,具体主要是体现在“peripheral.c”中的on_bleuartServiceEvt函数中,如下图所示:
写一个数据处理函数:
void PERSON_BLE_UART_DATA_HANDLE(uint8_t *data, uint16_t length);
在串口发送后的下方添加调用,并在下一函数实体中添加实现,例如将接收到的数据打印并根据接收的第一个字符控制LED的亮灭,如下图所示:
/******************************************************************
* 功能:蓝牙串口数据处理函数
* 参数:uint8_t *data,接收的数据; uint16_t length,接收的数据长度
* 返回值:无
******************************************************************/
void PERSON_BLE_UART_DATA_HANDLE(uint8_t *data, uint16_t length)
{
UART1_SendString(data,length);
UART1_SendString("\r\n",2);
PRINT("data[0]=%c",data[0]);
if(data[0]=='1')
{
GPIOB_ModeCfg(GPIO_Pin_15, GPIO_ModeOut_PP_5mA);//推挽输出最大5mA
GPIOB_ResetBits(GPIO_Pin_15);
UART1_SendString("LED turn on\r\n",sizeof("LED turn on\r\n"));
}
else if(data[0]=='0'){
GPIOB_ModeCfg(GPIO_Pin_15, GPIO_ModeOut_PP_5mA);//推挽输出最大5mA
GPIOB_SetBits(GPIO_Pin_15);
UART1_SendString("LED turn off\r\n",sizeof("LED turn off\r\n"));
}
}
烧录后,使用USB-TTL连接串口1引脚PA8(RXD1)\PA9(TXD1),打开串口助手,设置波特率115200,打开串口,然后按下复位键,等待APP连接后重复上一讲的数据发送,不同的是,发送的数据是单个字符“0”和“1”,如下所示: