深入学习STM32WB15CC蓝牙芯片的特性与应用

由于项目选型需要,初次接触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芯片的蓝牙应用初步代码生成。后续可以根据需要,各个方面再做深入修改。

物联沃分享整理
物联沃-IOTWORD物联网 » 深入学习STM32WB15CC蓝牙芯片的特性与应用

发表评论