一、资料收集
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显示效果如下:

以上就是蓝牙数据收发的全流程了。

 
					
				
 
			
			
			
						
			 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

