应用笔记 | STM32WB基于Custom Template实现客户定制BLE私有协议

发布者:AdventureSeeker最新更新时间:2024-09-12 来源: elecfans关键字:STM32WB  Custom  Template  私有协议 手机看文章 扫描二维码
随时随地手机看文章
01

引言


STM32WB55是一款支持BLE5.x的双核高性能MCU,针对BLE的应用固件包STM32Cube_FW_WB_V1.xx.xxProjectsP-NUCLEO-WB55.NucleoApplicationsBLE里面也提供了大量的例程,目前支持的标准GAP服务例程在STM32CubeMX中已有列出,或可以在固件包STM32Cube_FW_WB_V1.xx.xx MiddlewareSTSTM32_WPANlesvc中找到。然而,在实际的STM32WB意向客户中,使用BLE私有协议来开发Profile非标产品的客户占了绝大部分。读者可以去查看BLE_p2pServer、BLE_Custom等例程,对于需要添加自定义ATT属性和服务的应用,现有例程里面STM32CubeMX是无法自定义添加ATT属性和服务。但笔者发现,其实使用STM32CubeMX的Custom Template是能实现上述功能的。


本文的目的旨在使用STM32CubeMX以及Custom Template例程基于STM32WB55-Nucleo实现基于BLE私有协议的通用通信框架,使客户快速上手进行产品开发,且可以直接应用在产品上,应用框架的设计如下图所示。另外,本文还对BLE协议栈的下载和升级注意事项做了详细指导,如果读者不熟悉这些内容,可以先行阅读。



如上图所示,使用手机APP与STM32WB进行BLE私有协议通信,一共设计了4种类型的数据访问:读/写、只写、只读、通知,这4种访问类型基本可以覆盖大部分数据访问场景


02

STM32CubeMX实现步骤


2.1 创建BLE工程添加并配置外设


请在搭建工程之前,下载安装最新的STM32CubeMX和STM32CubeWB


2.1.1 在STM32CubeMX中点击“File”/“New Project”在弹出对话框中输入“STM32WB55RG”创建一个新工程



2.1.2 工程配置如下图所示,配置工程名字、保存路径、选择编译工具、调整堆栈大小和选择需要的STM32CubeWB的库文件(缺省为已安装的最新版本)。



2.1.3 系统配置:调试口



2.1.4 外设配置:添加外部高速晶振(HSE)和低速晶振(LSE)



2.1.5 外设配置:调试打印串口USART,手动将USART1引脚重映射到PB6/PB7



使能USART1的TX的DMA功能和USART1的全局中断



2.1.6 外设配置:使能HESM,它完全由BLE stack管理



2.1.7 外设配置:使能RF,它完全由BLE stack管理。



2.1.8 外设配置:使能IPCC,它完全由BLE stack管理。只需同时使能它的RX/TX中断即可。



2.1.9 外设配置:使能RTC,同时选择WakeUp为“Internal WakeUp”和WakeUp中断。



2.1.10 外设配置:配置时钟



2.1.11 外设配置:NVIC的配置



至此,外设的配置和添加部分已经完成。


2.2 BLE协议栈的添加及配置


2.2.1 协议栈配置:使能BLE协议栈



2.2.2 协议栈配置:禁止“Custom P2P Server”并使能“Custom Template”自定义GATT通用模板



2.2.3 协议栈配置:新建一个GATT服务,其名称为“My_Data_Server'



2.2.4 协议栈配置:GATT服务基本配置



2.2.5 协议栈配置:配置GATT读&写 服务特征及属性值



2.2.6 协议栈配置:配置GATT写 服务特征及属性值



2.2.7 协议栈配置:配置GATT读 服务特征及属性值



2.2.8 协议栈配置:配置GATT通知 服务特征及属性值



2.2.9 协议栈配置:配置GATT广播参数配置



2.2.10 协议栈配置:BLE配对参数设置



2.2.11 协议栈配置:BLE协议栈调试及打印配置(需依次序配置)



2.3 生成工程代码并初步测试


2.3.1 点击“GENERATE CODE”生成工程代码



2.3.2 在生成的代码中添加BLE Trace&Debug初始化代码


2.3.3 在“main.c”文件中取消“MX_UART_Init(void)”的“static”属性


2.3.4 在“app_entry.c”文件中增加“Debug”模块的初始化代码“APPD_Init()”。



2.3.5 下载代码到STM32WB55-NUCLEO中运行。此时,在手机的蓝牙列表中,已经能成功地搜索添加的BLE设备。说明Debug和BLE协议栈已经成功运行。



2.4 添加BLE Stack应用代码


为了便于对后续添加代码的理解,我们先将Central(手机)与STM32WB进行BLE通信的数据交互概括如下。所以需要将用户代码添加到Custom_STM_Event_Handler()、Custom_STM_App_Notification()中。



BLE应用代码添加:定义用户数据缓存。

在“custom_app.c”文件中定义4个用户缓存区数组。



BLE事件驱动代码添加:


在“custom_stm.c”文件中的“Custom_STM_Event_Handle r(void*Event)”中依次为WRITE_READ_DATA_BUF、WRITE_DATA_BUF、NOTIFY_DATA_BUF特征和属性添加stack层的事件驱动代码,以使BLE数据从stack层传递到app层。


添加特征1 Events:WRITE_READ_DATA_BUF(即User_Write_Read_Data[]对应的写&读操作句柄)请求驱动代码。



上图对应的代码文本如下所示:




上图对应的代码文本如下图所示:



添加特征2 Events驱动:WRITE_DATA_BUF(即User_Write_Data []对应的写操作句柄)代码。



上图对应的代码文本如下图所示:



添加特征3 Events驱动:READ_DATA_BUF(即User_Read_Data[]对应的写操作句柄)代码



上图对应的代码文本如下图所示:



添加特征4 Events驱动:NOTIFY_DATA_BUF(即User_Notify_Data[]对应的写操作句柄)请求驱动已经由STM32CubeMX自动完成了。NOTIFY_DATA_BUF不用再手动添加。



BLE应用数据代码添加:


在“custom_app.c”文件中的Custom_STM_App_Notification(Custom_STM_App_Notification_evt_t*pNotification)”添加代码,以将BLE数据上传到4个User_xxx_Data[]缓冲区,依次添加代码如下。



2.5 修改BLE最大数据包传输长度


如果不修改,BLE单包长度最大仅为23字节


1. 在“app_conf.h”中修改BLE stack最大数据包长度(CFG_BLE_MAX_ATT_MTU)



2. 在“app_ble.c”文件SVCCTL_UserEvtFlowStatus_t_SVC CTL_App_Notification(void*pckt)中添加红色部分代码。



至此,所有代码更改完成。


03

测试平台搭建及功能测试


3.1 使用STM32CubeProgrammer BLE协议栈安装(升级)


升级ST-LINK固件以保证与STM32CubeProgrammer驱动是匹配的



查看当前FUS版本,并将FUS升级到最新版本



如果当前FUS版本是0.5.3,FUS固件使用“stm32wb5x_FUS_fw_for_fus_0_5_3.bin”,否则FUS固件使用“stm32wb5x_FUS_fw.bin”,强烈建议阅读BLE协议栈及FUS升级详细说明“STM32Cube_FW_WB_V1.13.3Projects STM32WB_Copro_Wireless_BinariesSTM32WB5xRelease_Notes.html”。



升级(安装)BLE协议栈,根据MCU型号选择相应的固件和下载地址



3.2 测试平台搭建及验证


3.2.1 在Android安卓应用市场下载安装“BLE调试助手”



3.2.2 可发现设备“MY_STM32WB”,并点击“CONNECT”后可以发现application特征和属性访问服务,如下图所示。



3.2.3 设置BLE最大单包传输长度为256字节,否则L2CAP层传输超过23字节将自动分包。



3.2.4 手机app写数据访问(User_Write_Read_Data[64])测试



3.2.5 手机App读数据访问(User_Write_Read_Data[64])测试



3.2.6 手机App写User_Write_Data[64]测试



3.2.7 手机App读User_Read_Data[64]测试。



3.2.8 通知数据访问(User_Notify_Data[64])测试



至此,整个验证和测试过程完成。


04

小结



BLE经过多年的发展和迭代,BLE协议本身已是一个很复杂和庞大的协议族,如果希望开发自定义Service和GATT应用时,若对底层协议不熟悉的话还是较为困难的。但是由于STM32良好的生态,特别是借助于我们的STM32CubeMX+STM32Cube_FW_ WB固件包,使得我们可以快速、高效地开发出各种BLE应用。




关键字:STM32WB  Custom  Template  私有协议 引用地址:应用笔记 | STM32WB基于Custom Template实现客户定制BLE私有协议

上一篇:实战经验 | 移植 SBSFU 到 STM32G070 的过程
下一篇:STM32平台下的FreeRTOS中断配置

推荐阅读最新更新时间:2026-03-25 11:22

传奇虎360接近达成最终私有协议
    12月2日,有消息称,以奇虎360董事长周鸿祎为首的投资财团,正接近与奇虎360达成最终的私有化协议。协议内容有可能是,投资方计划以每股约77美元的价格收购奇虎360,交易总额或达到90亿美元。 对此,21世纪经济报道记者第一时间向奇虎360科技有限公司求证,对方回应称目前关于其私有化进程“没有具体细节可供披露”。 今年6月17日,奇虎360公司曾宣布董事会接到了一份来自董事长兼CEO周鸿祎、中信证券、红杉资本在内的多家投资者不具约束力的私有化要约,每股美国存托股票(ADS)报价77美元。但由于该要约是非约束性要约,周鸿祎牵头的投资者集团可以修改要约条款,或撤销该要约。 上述消息称,奇虎360最终的私有化协议有望
[手机便携]
基于汽车CAN总线私有协议OBD接口破解方法及经验
目前就汽车协议破解来说,行业的没有人做,做个人爱好的,某宝上就有。因为车厂指令不同,硬件产品都不一样。有破解方法,把OBD总线上的数据抓下来,一个一个分析,比如针对某款车,或者某个车系,一个一个去试,其中,需要把CAN总线的数据全抓下来。我作为个人爱好,给大家讲下汽车私有协议破解方法和规避的一些问题。 汽车私有协议破解工具: 利用破解工具CANBUS监听器采集和读取CAN总线上的数据,因不同的车,升窗的指令不同的,所以我们要具体车型具体分析,这个EST718盒子其实可以干很多事情,比如破解读取车门状态、里程、尾箱、车灯、自动大灯、雨刮器等等,相对来说,越发达的汽车ECU,获取的数据越多,同时也包涵车速转速等汽车支持的所有数据项,
[嵌入式]
戴尔达成244亿美元私有协议
    北京时间2月5日晚间消息,戴尔公司刚刚宣布,公司创始人迈克尔-戴尔(Michael Dell)与银湖资本将以每股13.65美元的价格收购戴尔公司,交易规模将达到244亿美元,这是自金融危机以来全球最大规模的杠杆收购私有化交易。   据悉,戴尔董事会周一晚对该交易进行了投票。交易完成后,迈克尔将继续担任公司CEO,同时也是公司最大股东,此前他已经拥有公司近16%的股份。正如媒体此前所报道,微软为该交易投资20亿美元。   协议规定,除了迈克尔和银湖,还包括微软在内的投资财团将以每股13.65美元的价格对戴尔公司进行私有化。与最初传出该消息时的戴尔股价相比,该私有化价格溢价25%。   据戴尔截至1月11日的企业价值计算,这一购
[手机便携]
STM32WB:多协议+安全SoC的开路先锋
自2018年第一颗无线MCU系列STM32WB问世,STM32便迈入无线进击路。ST不断推出一系列具备强大无线连接能力的STM32产品,全面支持各种短距离(Zigbee、WiFi、蓝牙、Z-wave)、广域网通信标准(LoRa、SigFox、EC-GSM、LTE-M、NB-IoT 等),从产品、模组、封装、安全、认证到软硬件生态系统,ST为物联网应用提供了360度无缝解决方案,助用户顺利在物联网世界里乘风破浪、开疆拓土。 ▲ST为物联网连接提供360度无缝解决方案 STM32无线MCU现有两条产品线: STM32WL是全球首颗内置LoRa收发器的SoC,能够加快LoRa IoT智能设备开发,满足广域物联网通信需求; STM32
[单片机]
<font color='red'>STM32WB</font>:多<font color='red'>协议</font>+安全SoC的开路先锋
ST推出超低功耗性能STM32WB双核无线MCU
意法半导体的STM32WBx5 *双核无线微控制器(MCU)配备Bluetooth® 5、OpenThread和ZigBee®3.0**连接技术,同时兼备超低功耗性能。 通过整合意法半导体的STM32L4 Arm® Cortex®-M4 MCU的功能与意法半导体内部开发的由一颗Cortex-M0 +专用内核管理的射频芯片,STM32WBx5既注重节能降耗,又能同时执行无线协议和实时任务,是远程传感器、可穿戴跟踪器、楼宇自动化控制器、计算机外围设备、无人机和其它物联网设备的理想选择。 数据安全功能强化了STM32WBx5的物联网首选微控制器的美誉度。安全功能包括客户密钥存储(CKS)、公钥授权(PKA)以及无线MAC层
[单片机]
ST推出超低功耗性能<font color='red'>STM32WB</font>双核无线MCU
STM32家族新成员—STM32WB双核无线芯片
STM32家族新成员—STM32WB双核无线芯片 2018年10月12日,意法半导体在北京召开媒体发布会,隆重发布并介绍了STM32系列的第12个新成员—STM32WB。STM32WB的发布对STM32来说有着重大的意义,正如意法半导体中国区微控制器事业部市场及应用总监曹锦东所说“未来整个产业的发展是面向物联网产业的,物联网产业里不能缺少无线的产品线,STM32产品更不能缺乏跟无线产品相关的IP,STM32WB的发布将会帮助STM32进入无线领域,并加强STM32在物联网市场的影响力。” 意法半导体中国微控制器事业部市场及应用总监 曹锦东 正在本次发布会中,意法半导体STM32超低功耗和网络微控制器市场经
[单片机]
STM32家族新成员—<font color='red'>STM32WB</font>双核无线芯片
STM32F103C8T6使用MDK 4.12中Custom_HID的修改方法
目的,由上位机发送64字节,设备回应3个字节,功能自定。。 板子使用的是最小核心板,MCU为STM32F103C8T6。 USB的D-和D+分别接到PA11(USBDM)和PA12(USBDP)上,PA12(USBDP)即D+通过跳线使上拉1.5K电阻到VCC(3.3V)。 1:打开MDK4.12,打开 C:KeilARMExamplesSTSTM32F10xUSBLibDemosCustom_HIDproject目录下的Custom_HID项目文件。 2:选择菜单 Project- Options for Target 'STM3210E-EVAL' 在Device选项卡里选择 STM32F103C8。 在Out
[单片机]
Achronix的Speedcore™ Custom Blocks定制单元块
   Achronix 今日宣布为其e FPGA  IP解决方案推出Speedcore custom blocks定制单元块。下面就随嵌入式小编一起来了解一下相关内容吧。      Achronix  Speedcore eFGPA嵌入式 FPGA 可加速数据密集的人工智能(AI)/机器学习、5G移动通信、汽车先进驾驶员辅助系统(ADAS)、数据中心和网络应用; Speedcore custom blocks定制单元块可以大幅度地提升性能、功耗和面积效率,并支持以前在 FPGA 独立芯片上无法实现的功能。利用Speedcore custom blocks定制单元块,客户可以获得ASIC级的效率并同时保持FPGA的灵活性,从而带来
[嵌入式]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved