由于项目选型需要,初次接触stm32的蓝牙芯片,需要总体做一些学习。也记些笔记,防止遗忘。
一、主要的ST的蓝牙芯片
简单介绍一下主要ST的蓝牙芯片
1.1. STM32WB系列
这个系列的芯片是一个双核的MCU,相当于一个普通的STM32 MCU和一个处理蓝牙各种协议栈的CPU核。(某些型号的芯片还处理Thread, 802.15.4MAC协议)。CPU1通过接口访问CPU2,CPU2只能烧录ST给的加密BIN文件,无法自行修改。由于两个CPU核,计算能力比较强,外设接口也比较丰富。可操作的空间比较大。但涉及到2个CPU的同步,调用。相对软件复杂度会高一些。
1.2 BlueNRG-LP系列
该系列蓝牙芯片是一个单CPU的Soc, 不用跟STM32WB系列那样在两个核之间做同步,调换。认为操作应该相对简单一些。但提供的外设能力比较弱。
二、 STM32WB15CC学习
通过对硬件,软件的综合考虑,认为STM32WB15CC是比较适合项目的需求的。所以就重点对该芯片做了一些学习。
2.1 资料的获取
STM32WB15CC datasheet:
STM32WB15CC - Ultra-low-power dual core Arm Cortex-M4 MCU 64 MHz, Cortex-M0+ 32 MHz with 320 Kbytes of Flash memory, Bluetooth LE 5.3, AES-256 - STMicroelectronics
STM32WB15CC 文档:
STM32WB15CC - Ultra-low-power dual core Arm Cortex-M4 MCU 64 MHz, Cortex-M0+ 32 MHz with 320 Kbytes of Flash memory, Bluetooth LE 5.3, AES-256 - STMicroelectronics
STM32WB15CC 工具:
STM32WB15CC - Ultra-low-power dual core Arm Cortex-M4 MCU 64 MHz, Cortex-M0+ 32 MHz with 320 Kbytes of Flash memory, Bluetooth LE 5.3, AES-256 - STMicroelectronics
开发板及相关的文档,工具:
NUCLEO-WB15CC - STM32 Nucleo-64 development board with STM32WB15CC, supports Arduino, ST Morpho connectivity - STMicroelectronics
以上的官网的资料;
以下是网络上一些有用的参考技术博客(大都是针对STM32WB55的,但也能借鉴,都差不多):
STM32WB简介 - 知乎
STM32WB55_NUCLEO开发(2)----使用STM32CubeMX 生成的简单 BLE 应用程序连接手机APP_哔哩哔哩_bilibili
三、SDK包的学习
3.1 下载
下载链接:
STM32CubeWB - STM32Cube MCU Package for STM32WB series (HAL, Low-Layer APIs and CMSIS, USB, File system, RTOS, BLE, Thread and Zigbee stacks - and examples running on ST boards) - STMicroelectronics
主要是看这个包里面的东西,这个包实际上可理解为是给STM32Cube系列工具使用的一个仓库。
下载STM32Cube IDE或者STM32Cube MX, 然后去配置STM32WB系列的芯片时,就会自动或者手动下载这个软件包。
所以你手动下载或者通过STM32Cube工具去下载,都一样。
主要是这个软件包有很多值得学习的东西,这个才是比较重要的。现在ST开发生态比开始好多了,各种工具用起来也是比较好用。开发门槛可以说低了不少。
3.2 了解整个SDK的功能
打开这个SDK(暂且叫SDK吧),首先去找Documentation。
里面有一个STM32CubeWBGettingStarted.pdf,介绍了STM32WB系列芯片的架构,各个组件的功能,如何使用这个SDK包。觉得有时间可以通读一遍。
看完基本就知道每个目录对应是什么,大致可以对整个SDK有一个初步的了解。
然后关注点应该在demo上面,先找出一些示例代码,看看如何去运行,然后才能在这个基础上面去做一些修改,逐渐熟悉整个芯片,最后才能根据产品要求融合进功能,优化代码,做出产品。
示例代码在Projects目录里面,自然看看NUCLEO-WB15CC里面的示例。每个目录代表什么意思,可以看4 Getting started with STM32CubeWB(WM2550文档,也就是STM32CubeWBGettingStarted.pdf的第18页,整节都在介绍projects示例代码每个目录的作用,及如何开始自己的项目)。ST的文档是相对良心。国内的芯片还是需要加油,比如杰理的蓝牙芯片,文档就特别混乱。实在不是同个级别的。支持国产芯片,但国产芯片也需努力啊。
我主要看Projects\NUCLEO-WB15CC\Applications\BLE\BLE_HeartRate\STM32CubeIDE里面代码,这个需要通过STM32CubeIDE打开。STM32CubeIDE的安装就不再说明了,网络技术博客还是比较多。
3.3 熟悉具体某个应用的代码
接下来就是需要知道具体的代码的框架是怎样的,每个文件代表什么意思。这个时候就需要看另外一个文档了。
在SDK的根目录下,有一个Release_Notes.html,打开可以看见整个SDK的总览,里面可以链接到不同的目录下的的Release_Notes.html,还提供了文档的下载链接。通过看这个html,对整个框架可以更加熟悉。
在这个html里面,我找到了一份文档《AN5289 : Building wireless applications with STM32WB Series microcontrollers》
点击就可以直接下载,下载完之后,可以在这个文档中看见怎么去创建一个无线的应用。对无线应用的框架及相关的代码文件名称都有一个比较明确的说明,还有一些相关的接口。
对应几个应用例子,也给出了相应的框图,对重要的代码文件还做了大致的框架说明。有了这个文档,基本可以了解软件的组织架构。对应每个文件,该如何修改。有一个比较明确的方向。
基本上看这些,可以建立起一个初步的印象。
接下来,就需要实操一下,建立基于NUCLEO-WB15CC开发板的首个低功耗蓝牙应用。
四、通过STM32CubeIDE创建一个低功耗蓝牙应用
4.1 准备工作
实现这个目的需要准备下面的硬件和软件
1. STM32CubeIDE,这个开发工具直接在官网下载就可以了。工具还是比较强大,开发STM32我觉得基本没有问题,调试应该也不错。基本可以媲美MDK-ARM,甚至开发难度和配置难度还小一些。具体安装过程应该不会太复杂。都是傻瓜式操作。不再说明。STM32CubeIDE - Integrated Development Environment for STM32 - STMicroelectronics
2. NUCLEO-WB15CC开发板,没得讲,淘宝太多了。原厂愿意提供最好。
4.2 开始创建
点击Create a New STM32 project
弹出选型框,选择STM32WB15CCU6
填写名字和路径
选择Yes
这样就弹出了熟悉的STM32CubeMX配置界面
配置RCC
配置RTC
配置RF天线
配置时钟,该时钟为基本配置,具体修改根据电路图进行
打开STM32_WPAN,也就是蓝牙的中间组件
可以看见,开始是灰色的,设置不了。把鼠标移动到STM32_WPAN上面,可以看见出来一个提示,提醒还需要打开RF, RTC, RCC, IPCC & HSEM。那么就需要再打开IPCC & HSEM。
打开IPCC,保证两个CPU核之间的通信。
打开HSEM, HSEM是硬件信号量,保证两个CPU核同步问题,或者其他的功能,具体可以看 《AN5289 : Building wireless applications with STM32WB Series microcontrollers》的4 STM32WB software architecture,有对信号量的一些描述。
顺便打开一下UART串口调试,开发板上,UART1与ST-Link连接,通过USB即可看见相关的串口。
在UART配置界面再添加一下DMA配置
把MX_USART1_UART_Init去掉。
打开STM32_WPAN的BLE,即可出来低功耗蓝牙的相关配置
各种配置可以慢慢熟悉,几个重点的配置说明一下。
蓝牙协议栈配置为Full或者Light跟选择下载的bin文件有很大关系。
对于STM32WB15CC,有如下bin文件。
该文件需要通过STM32CubeProgrammer烧录到芯片的某个地址上面。这个跟选择的bin文件有很大关系。具体烧录网上 有针对STM32WB55的烧录方法。方法差不多,只是STM32WB15CC应该不用烧录FUS,因为对应的文件里面没有FUS固件。STM32WU55蓝牙开发学习笔记(2)-协议栈更新_stm32wb55蓝牙开发_D_cutter的博客-CSDN博客
接下来创建一个空白的用户模板,可以看见多出来BLE GATT和BLE Advertising菜单,并且打了X号,说明里面需要配置一下。
点击BLE GATT,Number of services填入1,创建一个GATT的service, 填入名称。菜单栏有多出一个TEST,就是我们刚刚创建的TEST service
点击TEST 进入service配置,这里就是低功耗蓝牙里面熟悉的GATT配置了,有service, characteristic,对characteristic1填写一个名字,其他的可先不管,这里只是做一个示例。这样TEST就变绿的。
配置BLE Advertising,这里是蓝牙广播的相关配置,属于GAP的范畴,这里配置一个蓝牙名称即可。
最后在Configuration配置一下串口的调试,和debug追踪。这个开启有先后顺序,看见哪个能开启就先开启即可。
最后点击保存,即可创建出相应的代码。
打开串口调试的相关操作:这里及以上步骤参考了这位大神的文章,或者说全抄过来了,只是替换成了STM32WB15CC,请看原文章或者视频:
STM32WB55_NUCLEO开发(2)----使用STM32CubeMX 生成的简单 BLE 应用程序连接手机APP_哔哩哔哩_bilibili
STM32WB55_NUCLEO开发(2)----使用STM32CubeMX 生成的简单 BLE 应用程序连接手机APP - 知乎
main.c中添加
/* USER CODE BEGIN Includes */
#include "stm32_seq.h"
/* USER CODE END Includes */
.....
//while循环中添加:
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
MX_APPE_Process();
/* USER CODE BEGIN 3 */
UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
}
/* USER CODE END 3 */
}
app_entry.c中添加初始化 APPD_Init()
void MX_APPE_Init( void )
{
......
/* USER CODE BEGIN APPE_Init_1 */
APPD_Init();
/* USER CODE END APPE_Init_1 */
......
}
以上配置完之后基本处于可以编译的状态。把开发板通过USB插入电脑。点击执行按钮开始编译。
编译完成弹出配置框,点击OK即可。然后会自动下载到开发板里面。前提是ST-Link已经安装好了。不然会提醒你安装ST-Link相关的驱动。
下载完之后可以看见如下的信息,说明已经完成烧录了。
打开手机,可以看见TEST-STM32的蓝牙。说明已经成功建立的初步的蓝牙应用框架。
在进一步,用蓝牙调试工具(nRF.Connect.4.26.0.apk Tags · NordicSemiconductor/Android-nRF-Connect · GitHub)可以更清晰看见创建的service和characteristic。
这是创建的service和characteristic,UUID都为0,
串口信息自然也可以查询到,先看看电脑设备管理器里面是否有串口,没有的话,ST-Link驱动没装好,通过STM32CubeIDE如下界面进行驱动更新和安装
打开串口,可以看见交互的信息,并且显示出刚才创建的service和characteristic:
至此,就完成了STM32WB15CC芯片的蓝牙应用初步代码生成。后续可以根据需要,各个方面再做深入修改。