沁恒的BLE例程中有个BLE_UART的例程,还难得的见到文件
夹中的说明.txt文件
在整个的沁恒例程中很少看到对例程进行说明的,所以也希望沁恒官方能够对demo例程增加相应的说明,方便评测和学习者使用。
BLE的编程因为协议的原因,比较复杂,说实话,要不是有评测的压力或者产品的压力,估计自己很长时间都不会去啃这个。
BLE的demo编译后下载至开发板,跟以往例程不同的是,下载和验证的时间要延长了很多。
下载后,连接上串口
这个时候,打开手机端的BLE 调试助手(参考前面的评测例程, 【沁恒RISC-V内核 CH582】 5 蓝牙例程初次评测及环境搭建)
能够看到ch583_ble_uart,connect之后
接收的只要点击相应的读取按钮,就能读到相应的信息
Device Information这里基本都可以读取字符串的信息
而发送信息的只有一个
收到信息后,串口有接收到长度信息的提示
BLE RX DATA len:7
在代码稍稍修改了一下,就能显示接收到的信息了
为了测试方便,只处理字符串的信息
case BLE_UART_EVT_BLE_DATA_RECIEVED:
PRINT("BLE RX DATA len:%d\r\n",p_evt->data.length);
char * str = p_evt->data.p_data;
str[p_evt->data.length] = 0x00;
PRINT("BLE RX DATA:%s \n",p_evt->data.p_data);
//for notify back test
//to ble
uint16_t to_write_length = p_evt->data.length;
app_drv_fifo_write(&app_uart_rx_fifo,(uint8_t *)p_evt->data.p_data, &to_write_length );
tmos_start_task( Peripheral_TaskID, UART_TO_BLE_SEND_EVT,2);
//end of nofify back test
//ble to uart
app_uart_tx_data((uint8_t *)p_evt->data.p_data,p_evt->data.length);
break;
这样,就能打印接收到的具体字符串了
也是对评测做个更细致的测试
void app_uart_tx_data(uint8_t *data,uint16_t length)
{
uint16_t write_length = length;
if(strcmp(data,"LED1 ON")) HAL_TURN_ON_LED1();
if(strcmp(data,"LED1 OFF")) HAL_TURN_OFF_LED1();
app_drv_fifo_write(&app_uart_tx_fifo,data,&write_length);
}
这样,蓝牙能够控制的就比较多了。
至少GAPRole和GATT方面的编程,要等今后工作上稍微空闲点的时候再尝试了。
本帖最后由 kit7828 于 2022-4-11 14:46 编辑学习了,这个思路可以,过两天参考学习修改代码控制传送传感器数据。
引用: lugl4313820 发表于 2022-4-9 18:43 对蓝牙的掌握这么熟练,感谢分享,费心了,期待更优雅的作品。
感谢鼓励,总感觉GATT太难学了
引用: WCH_Risc5 发表于 2022-4-11 13:52 感谢提的意见,添加更多的注释我们会考虑的。
谢谢,一定好好评测