DA14683的蓝牙相关配置
勤基科技 陈杰明
导入工程
首先,我们通过开发环境的左上角 File->Import导入Demo例程。如下:
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104347830-1380389145.png)
修改广播信息
打开pxp_reporter_task.c
打开pxp_reporter_task.c
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104357116-411364628.png)
修改设备名
在pxp_reporter_task.c找到以下函数:
在pxp_reporter_task.c找到以下函数:
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104405138-1641552370.png)
标记出来的语句是把PX_REPORTER_DEFAULT_NAME这个变量copy到name_buf里面就是把变量赋值给设备名的buf。至于PX_REPORTER_DEFAULT_NAME在哪里设置,我们可以在pxp_reporter_config.h里面找到:
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104415009-472296826.png)
我们直接修改这个定义即可修改设备名。
最后在task任务实体里面可以看到调用的地方:
最后在task任务实体里面可以看到调用的地方:
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104423473-932571443.png)
修改MAC地址
一般情况下比较少用到,因为我们调试样板的时候都是用默认的MAC地址,而量产的时候是有量产工具烧录MAC地址的。
一般情况下比较少用到,因为我们调试样板的时候都是用默认的MAC地址,而量产的时候是有量产工具烧录MAC地址的。
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104433120-1777915880.png)
广播间隔和参数
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104439929-638637188.png)
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104447076-1024528197.png)
调用上图的接口,可以修改广播间隔和广播参数。
添加服务
我们在pxp_reporter_task里面添加一个SPS服务,该服务在SDK已经是写好了的。
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104505928-784024116.png)
可以在pxp_reporter->sdk->ble_service->src里面找到sps.c,就可以看到这个服务的所有内容。
服务UUID
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104511674-2109943901.png)
在sps…文件开头处有服务UUID的宏定义。
第一个是sps服务的UUID
第二个是发送特征的UUID
第三个是接收特征的UUID
第四个是流控特征的UUID
如果用户想自定义UUID,可以在此处修改。
第一个是sps服务的UUID
第二个是发送特征的UUID
第三个是接收特征的UUID
第四个是流控特征的UUID
如果用户想自定义UUID,可以在此处修改。
属性
在sps_init函数中可以看到特征值初始化和创建属性的相关操作:
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104523760-57047205.png)
如果需要修改属性和添加属性,则 | 上相关的属性即可。
可供用户设置的属性如下,在ble_gatt.h中:
可供用户设置的属性如下,在ble_gatt.h中:
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104529220-746660022.png)
数据接收
在sps.c中,可以找到数据接收的Handler
在sps.c中,可以找到数据接收的Handler
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104535495-624175306.png)
上面这个函数是接收函数,手机write数据给到RX特征的时候,数据将由底层返回到这个函数中。用户直接获取value指针即可获取到手机发送过来的数据。
If条件语句里面的内容实际上是把接收到的内容传递给回调函数(rx_data)但是我们初始化这个服务的时候,传入的回调函数是NULL,所以此处可以忽略。
If条件语句里面的内容实际上是把接收到的内容传递给回调函数(rx_data)但是我们初始化这个服务的时候,传入的回调函数是NULL,所以此处可以忽略。
数据发送
同样在sps.c,可以找到数据发送的接口:
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104546088-231510582.png)
这个函数最终调用的其实是以下函数:
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104553906-1466219753.png)
此处默认使用NOTIFY发送方式,如需要改为INDICATE,把ble_gatts_send_event的第三个形参改成GATT_EVENT_INDICATION就可以。Sp_service_t 结构体内容如下:
![](https://img2018.cnblogs.com/blog/1501498/201811/1501498-20181127104602689-1310407883.png)
通过调用以上接口,我们即可实现数据从芯片发送到手机。
Dialog技术讨论,QQ群871600668