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

关键字:stm32wb,ble私有协议,定制
目录预览
1.引言
2.stm32cubemx 实现步骤
3.测试平台搭建及功能测试
4.小结
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应用。
完整内容请点击“阅读原文”下载原文档。
订阅号关注stm32
视频号
b站账号
原文标题:应用笔记 | stm32wb基于custom template实现客户定制ble私有协议
文章出处:【微信公众号:stm32单片机】欢迎添加关注!文章转载请注明出处。

OPPOR11什么时候上市最新消息:天王代言OPPOR11手机热销或成定局,OPPOR11配置、价格提前看
什么是磁盘分区与逻辑卷管理
华为海思有望超越联发科,排进全球前15
直流有刷电机原理详解
明年起至2023年期间 全球圆柱形锂离子电池市场将以18.28%的复合年增长率增长
应用笔记 | STM32WB基于Custom Template实现客户定制BLE私有协议
指纹识别市场被看淡 2019年渗透率仅63%
ARTM-8多路智能温度巡检仪
激光雷达初创公司AEye宣布获得了4000万美元B轮融资
大数据新趋势:追踪“数字足迹”
iPhone最新消息:曾是最保值的苹果,现在是降价最快的iPhone7,史上降价最快苹果手机
赛灵思28nm:点燃设计创新的激情
凌力尔特公司推出一款双通道同步降压型 DC/DC 控制器 LTC3887
小米8青春版评测 性价比家族出了个高颜值
SC23 | 研究人员竞相使用 NVIDIA CUDA Quantum 大力推进研究工作
宝马慕尼黑工厂斥资6.5亿欧元转型生产纯电动汽车
踏歌智行入选“2021中国自动驾驶产业科技创新TOP10”
声光报警器电路设计方案汇总(五款模拟电路设计原理图详解)
常用视频格式标准介绍
如何在STL中存取背景数据块呢?