一、资料收集
NUCLEO-WBA55CG 在ST官网链接
https://www.st.com.cn/zh/evaluation-tools/nucleo-wba55cg.html
该链接可以下载用户手册 和 开发板原理图,下图是用户手册,基础开发有这两个资料就够了。
二、初始化蓝牙
个人比较喜欢从头初始化一个干净的工程,不太喜欢直接用例程,因为例程套了一层BSP,把基本的LED IO、串口等再给封装了一套又一套的。
注:以下的流程是个失败的流程,不知道那一步出问题了,奇奇怪怪坑非常多的,难搞!所以后面只能基于例程修改了。
1、失败的新建BLE工程
开启SWD调试口(PS:ST官方BLE例程都不初始化SWD接口导致每次都要拉高Boot才能再次下载很恶心)
配置时钟
配置RAM
配置ICACHE
使能ADC的芯片内置的温度传感器通道
使能RF
使能RTC(有大坑)
参考例程要设置为31,但是这里只能设置为60。要设成和例程一样的31,就必须要先配置RTC的时钟源,CubeMX中没有任何提示,应用手册也没写怎么改,就坑。
最后也是搞好了,巨坑
使能CRC RNG
蓝牙成功配置好了,在按照提示使能TIM16
直接使能TIM16即可
使能串口
选择BLE的调试串口
配置广播名
配置好广播之后就可以有个初始功能了,但是编译会提示缺少一些定义
缺少的是UART的一些定义,对比发现需要取配置GDMA,
1、为什么串口必须要去配置DMA,并且没有文档提示,也没有生成代码提示,如果必须要就应该提示啊?
2、为什么不允许不用DMA呢?就使用普通串口的话也应该有一套对应的代码。
生成代码后就会出现各种大天坑 和 各种编译报错等问题,非常无语,搞了一个多星期,做了各种尝试都没成功就没记录了,投降。
例如:
一开始GPDMA使能了2个
后面就莫名其妙的好了(大概率是升级了cube mx)好不容易配置好,又有新的报错,不搞了,太废时间了。
最近ST的BLE相关的cube mx应该都有大坑,配置了几个系列都是这样的,非常无语,浪费时间!!!
2、修改例程
下文是选择P2P数据收发例程,直接修改成我要的服务 和 广播,相当于跳过初始化蓝牙。
修改广播名
修改短UUID 服务FF01
添加收数据(write) UUID FF02 的服务
为什么不能不定长接收数据,必须要给定长度,而且必须发送固定长度的才能接收到,不然收不到数据,非常奇葩,为什么原厂要这样设计,不太理解。
个人觉得肯定可以接收不定长的数据的,不可能必须固定长的,但是要去折腾,后面等有空了研究一下。
添加发送数据(Notify) UUID FF03的服务,这立的长度就无所谓的,后面改发送数据的接口就可以了。
直接编译通过,最近都不会去手贱从头配置蓝牙工程了,浪费半个月,无语。
编译烧录
三、数据收发实验
书接上文,在完成配置后,编译、烧录后,用手机APP 扫描广播、连接、交互数据。
1、扫描广播 与 发现服务
广播名、自定义服务的UUID 和 特征都和上文配置的一致,没有问题,运行正常!!
2、收发数据
2.1、打印接收数据
查阅代码后,找到了下图的位置,并且添加打印代码,将接收的数据都打印出来了。
接受都到的数据打印LOG如下:
2.2、发送数据给手机APP
查阅代码后,发现了发送数据的接口,但是这个接口看着不爽,不知道为什么发送数据接口要填OPCode,填handle还能理解,填OPCode不懂为什么,所以直接改造。
自己DIY的代码
调用发送数据接口,在接收数据后,回复手机 66 88
实验后手机APP显示效果如下:
以上就是蓝牙数据收发的全流程了。