stm32wb15cc蓝牙芯片学习

news2024/9/30 23:25:42

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全面分析低代码平台:各大热门产品详细对比

低代码平台彻底改变了企业构建和部署定制应用程序的方式。它们提供了一种用最少的代码,更快、更高效地开发软件的方法。使得公司在加快创新的同时节省了时间和资源。对于一些想进行数字化转型,选择低代码平台入门的中小企业来讲,应该选择哪个…

NTP时间服务器同步时钟系统安装汇总分享

在现代科技发展的背景下,各种设备的时间同步变得越来越重要。同步时钟管理系统的应用可以让多个设备在时间上保持一致,提高工作效率和安全性,为各个行业的发展提供了重要的支持。 一、同步时钟系统介绍 同步时钟管理系统的应用范围非常广泛&…

私有化部署的即时通讯软件:消息、文件安全加密,全面可控

如今,数字化转型进入纵深阶段,在企业数字化转型过程中,数据规模激增,结构更为复杂,数据零散化和安全性问题日益显著,使得众多企业在数据资产管理上面临不小的挑战。企业为提高内部沟通效率,通常…

C++源码分析完美转发

C源码分析完美转发 完美转发作用&#xff1a; 可以保持实参数据在函数中的左值或者右值类型。 不使用完美转发的后果 #include<iostream> using namespace std;// 容器里面元素的类型 class A { public:A() {}// 带左值引用参数的赋值函数A& operator(const A&…

24 KVM管理虚拟机-配置VNC-TLS登录

文章目录 24 KVM管理虚拟机-配置VNC-TLS登录24.1 概述24.2 操作步骤 24 KVM管理虚拟机-配置VNC-TLS登录 24.1 概述 VNC服务端和客户端默认采用明文方式进行数据传输&#xff0c;因此通信内容可能被第三方截获。为了提升安全性&#xff0c;openEuler支持VNC服务端配置TLS模式进…

在光伏行业的自动化生产中,EAP起到了什么作用?

随着可再生能源的快速发展和环保意识的增强&#xff0c;光伏行业作为一种清洁能源产业正迅速崛起。光伏生产过程的自动化已成为行业的追求和趋势。在光伏行业的自动化生产中&#xff0c;EAP&#xff08;设备自动化程序&#xff09;系统发挥着关键的作用&#xff0c;为生产线的运…

drawio@绘制带有latex公式的图表@示意图@流程图@白板模式whiteboard

文章目录 drawio绘制带有latex公式的图表示意图流程图白板模式whiteboard使用drawio小结 公式编辑Use mathematical typesetting in diagramsUse mathematical typesetting in diagramsTroubleshooting关于文本框元素公式渲染问题&#x1f388;Maths is not rendered 模式切换d…

【K哥爬虫普法】你很会写爬虫吗?10秒抢票、10秒入狱,了解一下?

我国目前并未出台专门针对网络爬虫技术的法律规范&#xff0c;但在司法实践中&#xff0c;相关判决已屡见不鲜&#xff0c;K 哥特设了“K哥爬虫普法”专栏&#xff0c;本栏目通过对真实案例的分析&#xff0c;旨在提高广大爬虫工程师的法律意识&#xff0c;知晓如何合法合规利用…

【TES745D】基于复旦微的FMQL45T900 全国产化ARM 核心模块(100%国产化)方案设计中文资料

板卡概述 TES745D 是一款基于上海复旦微电子FMQL45T900 的全国产化ARM 核心板。该核心板将复旦微的FMQL45T900&#xff08;与XILINX 的XC7Z045-2FFG900I 兼容&#xff09;的最小系统集成在了一个87*117mm 的 核心板上&#xff0c;可以作为一个核心模块&#xff0c;进行功能性扩…

主成分分析(PCA)直观理解与数学推导

近期在完成信息论的作业&#xff0c;发现网上的资料大多是直观解释&#xff0c;对其中的数学原理介绍甚少&#xff0c;并且只介绍了向量降维&#xff0c;而没有介绍向量重构的问题&#xff08;重构指的是&#xff1a;根据降维后的低维向量来恢复原始向量&#xff09;&#xff0…

Yolov5轻量化:MobileNetV3,轻量级骨架首选

1.轻量化网络简介 轻量化网络是指在保持模型性能的前提下,尽可能减小模型参数量和计算量的神经网络。这种网络通常被用于在移动设备等资源受限的场景中部署,以提高模型的实时性和运行效率。 轻量化网络的设计思路可以包括以下几个方面: 去除冗余层和参数:通过剪枝、蒸馏等技…

基于RT-Thread的lwip网卡优化笔记

基于RT-Thread的lwip网卡优化笔记 一、RT-Thread的lwip框架二、网卡驱动三、网卡吞吐速率测试四、网卡吞吐速率优化4.1 TCP参数优化4.2 lwip参数优化4.3 内存拷贝优化4.3.1 rt_memcpy优化4.3.2 使用uboot下的memcpy.S 4.4 网卡收发优化4.3.1 lwip发送优化4.4.2 网卡发送优化 一…

MyBatis查询各种类型数据该如何处理才能得到数据

文章目录 1、前言2、查询一个实体类对象字段名和属性名无法映射处理方式一&#xff1a;起别名方式二&#xff1a;使用全局配置文件配置映射规则方式三&#xff1a;自定义resultmap 3、查询一个list集合4、查询单个数据5、查询一条数据为map集合6、 查询多条数据为map集合方式一…

课程分享:华清远见联合NXP推出i.MX8M Plus开发与实践课程,超干超实用!

​课程名称&#xff1a; i.MX8M Plus开发与实践课程 课程介绍&#xff1a; i.MX8M Plus应用处理器是NXP推出的一款致力于推动机器学习&#xff08;ML&#xff09;&#xff0c;机器视觉&#xff0c;多媒体与工业边缘物联网应用的工业人工智能芯片。拥有4个ARM Cortex-A53核心…

远程桌面连接黑屏怎么解决?方法大全

远程桌面连接是一种非常有用的技术&#xff0c;它可以让用户从任何位置远程访问到其它计算机。然而&#xff0c;当你尝试连接到一个计算机时&#xff0c;你有可能会遇到远程桌面连接黑屏的问题。这个问题很常见&#xff0c;但是它可能会给你带来很多麻烦。在本文中&#xff0c;…

ssRender Plugin 基础

ssRender Plugin 基础 一.什么是Plugin ​ 插件(Plug-in,又称addin、add-in、addon或add-on,又译外挂)是一种遵循一定规范的应用程序接口编写出来的程序。其只能运行在程序规定的系统平台下&#xff08;可能同时支持多个平台&#xff09;&#xff0c;而不能脱离指定的平台单独…

Windows安装配置Tomcat服务器教程 -- 外网远程访问

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 转载自cpolar文章&#xff1a;外网访问本地Tomcat服务器【cpolar内网穿透】…

【SpringBoot】五:Web服务---SpringMVC---控制器

文章目录 1 控制器介绍2 控制器工作流程3 控制器中的方法4 匹配请求路径到控制器方法5 RequestMapping6 控制器方法参数类型与可用返回值类型7 接收请求参数8 验证参数8.1 Bean Validation8.2 分组校验8.3 ValidationAutoConfiguration 1 控制器介绍 &#xff08;1&#xff09…

【Linux Network】数据链路层

目录 认识以太网 以太网帧格式 认识MAC地址 对比理解MAC地址和IP地址 认识MTU MTU对IP协议的影响 MTU对UDP协议的影响 MTU对于TCP协议的影响 MSS和MTU的关系&#xff1a; 查看硬件地址和MTU ARP协议 ARP协议的作用 ARP协议的工作流程 ARP数据报的格式 DNS(Domain Name System) …

近期要做填报报表,使用Spreadsheet还是Finereport?

又是忙碌的五月呀~~近期接到一个项目&#xff0c;是一家商贸公司需要去采集销售部门的销售业绩据&#xff0c; 以往他们使用Excel表格线下去做报表填报&#xff0c;传统的报表体系效率低&#xff0c;文件杂&#xff0c;汇总难。下级部门上传数据需要以多个表格来上报&#xff0…