
目錄預(yù)覽
1.引言
2.STM32CubeMx 實(shí)現(xiàn)步驟
3.測(cè)試平臺(tái)搭建及功能測(cè)試
4.小結(jié)
STM32WB55是一款支持BLE5.x的雙核高性能MCU,針對(duì)BLE的應(yīng)用固件包STM32Cube_FW_WB_V1.xx.xxProjectsP-NUCLEO-WB55.NucleoApplicationsBLE里面也提供了大量的例程,目前支持的標(biāo)準(zhǔn)GAP服務(wù)例程在STM32CubeMX中已有列出,或可以在固件包STM32Cube_FW_WB_V1.xx.xx MiddlewareSTSTM32_WPANlesvc中找到。然而,在實(shí)際的STM32WB意向客戶中,使用BLE私有協(xié)議來開發(fā)Profile非標(biāo)產(chǎn)品的客戶占了絕大部分。讀者可以去查看BLE_p2pServer、BLE_Custom等例程,對(duì)于需要添加自定義ATT屬性和服務(wù)的應(yīng)用,現(xiàn)有例程里面STM32CubeMX是無法自定義添加ATT屬性和服務(wù)。但筆者發(fā)現(xiàn),其實(shí)使用STM32CubeMX的Custom Template是能實(shí)現(xiàn)上述功能的。
本文的目的旨在使用STM32CubeMX以及Custom Template例程基于STM32WB55-Nucleo實(shí)現(xiàn)基于BLE私有協(xié)議的通用通信框架,使客戶快速上手進(jìn)行產(chǎn)品開發(fā),且可以直接應(yīng)用在產(chǎn)品上,應(yīng)用框架的設(shè)計(jì)如下圖所示。另外,本文還對(duì)BLE協(xié)議棧的下載和升級(jí)注意事項(xiàng)做了詳細(xì)指導(dǎo),如果讀者不熟悉這些內(nèi)容,可以先行閱讀。

如上圖所示,使用手機(jī)APP與STM32WB進(jìn)行BLE私有協(xié)議通信,一共設(shè)計(jì)了4種類型的數(shù)據(jù)訪問:讀/寫、只寫、只讀、通知,這4種訪問類型基本可以覆蓋大部分?jǐn)?shù)據(jù)訪問場(chǎng)景
2.1 創(chuàng)建BLE工程添加并配置外設(shè)
請(qǐng)?jiān)诖罱üこ讨?,下載安裝最新的STM32CubeMX和STM32CubeWB
2.1.1 在STM32CubeMX中點(diǎn)擊“File”/“New Project”在彈出對(duì)話框中輸入“STM32WB55RG”創(chuàng)建一個(gè)新工程

2.1.2 工程配置如下圖所示,配置工程名字、保存路徑、選擇編譯工具、調(diào)整堆棧大小和選擇需要的STM32CubeWB的庫文件(缺省為已安裝的最新版本)。

2.1.3 系統(tǒng)配置:調(diào)試口

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

2.1.5 外設(shè)配置:調(diào)試打印串口USART,手動(dòng)將USART1引腳重映射到PB6/PB7

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

2.1.6 外設(shè)配置:使能HESM,它完全由BLE stack管理

2.1.7 外設(shè)配置:使能RF,它完全由BLE stack管理。

2.1.8 外設(shè)配置:使能IPCC,它完全由BLE stack管理。只需同時(shí)使能它的RX/TX中斷即可。

2.1.9 外設(shè)配置:使能RTC,同時(shí)選擇WakeUp為“Internal WakeUp”和WakeUp中斷。

2.1.10 外設(shè)配置:配置時(shí)鐘

2.1.11 外設(shè)配置:NVIC的配置

至此,外設(shè)的配置和添加部分已經(jīng)完成。
2.2 BLE協(xié)議棧的添加及配置
2.2.1 協(xié)議棧配置:使能BLE協(xié)議棧

2.2.2 協(xié)議棧配置:禁止“Custom P2P Server”并使能“Custom Template”自定義GATT通用模板

2.2.3 協(xié)議棧配置:新建一個(gè)GATT服務(wù),其名稱為“My_Data_Server"

2.2.4 協(xié)議棧配置:GATT服務(wù)基本配置

2.2.5 協(xié)議棧配置:配置GATT讀&寫 服務(wù)特征及屬性值

2.2.6 協(xié)議棧配置:配置GATT寫 服務(wù)特征及屬性值

2.2.7 協(xié)議棧配置:配置GATT讀 服務(wù)特征及屬性值

2.2.8 協(xié)議棧配置:配置GATT通知 服務(wù)特征及屬性值

2.2.9 協(xié)議棧配置:配置GATT廣播參數(shù)配置

2.2.10 協(xié)議棧配置:BLE配對(duì)參數(shù)設(shè)置

2.2.11 協(xié)議棧配置:BLE協(xié)議棧調(diào)試及打印配置(需依次序配置)

2.3 生成工程代碼并初步測(cè)試
2.3.1 點(diǎn)擊“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中運(yùn)行。此時(shí),在手機(jī)的藍(lán)牙列表中,已經(jīng)能成功地搜索添加的BLE設(shè)備。說明Debug和BLE協(xié)議棧已經(jīng)成功運(yùn)行。

2.4 添加BLE Stack應(yīng)用代碼
為了便于對(duì)后續(xù)添加代碼的理解,我們先將Central(手機(jī))與STM32WB進(jìn)行BLE通信的數(shù)據(jù)交互概括如下。所以需要將用戶代碼添加到Custom_STM_Event_Handler()、Custom_STM_App_Notification()中。

BLE應(yīng)用代碼添加:定義用戶數(shù)據(jù)緩存。
在“custom_app.c”文件中定義4個(gè)用戶緩存區(qū)數(shù)組。

BLE事件驅(qū)動(dòng)代碼添加:
在“custom_stm.c”文件中的“Custom_STM_Event_Handle r(void*Event)”中依次為WRITE_READ_DATA_BUF、WRITE_DATA_BUF、NOTIFY_DATA_BUF特征和屬性添加stack層的事件驅(qū)動(dòng)代碼,以使BLE數(shù)據(jù)從stack層傳遞到app層。
添加特征1 Events:WRITE_READ_DATA_BUF(即User_Write_Read_Data[]對(duì)應(yīng)的寫&讀操作句柄)請(qǐng)求驅(qū)動(dòng)代碼。

上圖對(duì)應(yīng)的代碼文本如下所示:


上圖對(duì)應(yīng)的代碼文本如下圖所示:

添加特征2 Events驅(qū)動(dòng):WRITE_DATA_BUF(即User_Write_Data []對(duì)應(yīng)的寫操作句柄)代碼。

上圖對(duì)應(yīng)的代碼文本如下圖所示:

添加特征3 Events驅(qū)動(dòng):READ_DATA_BUF(即User_Read_Data[]對(duì)應(yīng)的寫操作句柄)代碼

上圖對(duì)應(yīng)的代碼文本如下圖所示:

添加特征4 Events驅(qū)動(dòng):NOTIFY_DATA_BUF(即User_Notify_Data[]對(duì)應(yīng)的寫操作句柄)請(qǐng)求驅(qū)動(dòng)已經(jīng)由STM32CubeMX自動(dòng)完成了。NOTIFY_DATA_BUF不用再手動(dòng)添加。

BLE應(yīng)用數(shù)據(jù)代碼添加:
在“custom_app.c”文件中的Custom_STM_App_Notification(Custom_STM_App_Notification_evt_t*pNotification)”添加代碼,以將BLE數(shù)據(jù)上傳到4個(gè)User_xxx_Data[]緩沖區(qū),依次添加代碼如下。

2.5 修改BLE最大數(shù)據(jù)包傳輸長度
如果不修改,BLE單包長度最大僅為23字節(jié)
1. 在“app_conf.h”中修改BLE stack最大數(shù)據(jù)包長度(CFG_BLE_MAX_ATT_MTU)

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

至此,所有代碼更改完成。
3.1 使用STM32CubeProgrammer BLE協(xié)議棧安裝(升級(jí))
升級(jí)ST-LINK固件以保證與STM32CubeProgrammer驅(qū)動(dòng)是匹配的

查看當(dāng)前FUS版本,并將FUS升級(jí)到最新版本

如果當(dāng)前FUS版本是0.5.3,F(xiàn)US固件使用“stm32wb5x_FUS_fw_for_fus_0_5_3.bin”,否則FUS固件使用“stm32wb5x_FUS_fw.bin”,強(qiáng)烈建議閱讀BLE協(xié)議棧及FUS升級(jí)詳細(xì)說明“STM32Cube_FW_WB_V1.13.3Projects STM32WB_Copro_Wireless_BinariesSTM32WB5xRelease_Notes.html”。

升級(jí)(安裝)BLE協(xié)議棧,根據(jù)MCU型號(hào)選擇相應(yīng)的固件和下載地址

3.2 測(cè)試平臺(tái)搭建及驗(yàn)證
3.2.1 在Android安卓應(yīng)用市場(chǎng)下載安裝“BLE調(diào)試助手”

3.2.2 可發(fā)現(xiàn)設(shè)備“MY_STM32WB”,并點(diǎn)擊“CONNECT”后可以發(fā)現(xiàn)application特征和屬性訪問服務(wù),如下圖所示。

3.2.3 設(shè)置BLE最大單包傳輸長度為256字節(jié),否則L2CAP層傳輸超過23字節(jié)將自動(dòng)分包。

3.2.4 手機(jī)app寫數(shù)據(jù)訪問(User_Write_Read_Data[64])測(cè)試

3.2.5 手機(jī)App讀數(shù)據(jù)訪問(User_Write_Read_Data[64])測(cè)試

3.2.6 手機(jī)App寫User_Write_Data[64]測(cè)試

3.2.7 手機(jī)App讀User_Read_Data[64]測(cè)試。

3.2.8 通知數(shù)據(jù)訪問(User_Notify_Data[64])測(cè)試

至此,整個(gè)驗(yàn)證和測(cè)試過程完成。
BLE經(jīng)過多年的發(fā)展和迭代,BLE協(xié)議本身已是一個(gè)很復(fù)雜和龐大的協(xié)議族,如果希望開發(fā)自定義Service和GATT應(yīng)用時(shí),若對(duì)底層協(xié)議不熟悉的話還是較為困難的。但是由于STM32良好的生態(tài),特別是借助于我們的STM32CubeMX+STM32Cube_FW_ WB固件包,使得我們可以快速、高效地開發(fā)出各種BLE應(yīng)用。

關(guān)注STM32


原文標(biāo)題:應(yīng)用筆記 | STM32WB基于Custom Template實(shí)現(xiàn)客戶定制BLE私有協(xié)議
文章出處:【微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45500瀏覽量
670648 -
STM32
+關(guān)注
關(guān)注
2310文章
11162瀏覽量
373539
原文標(biāo)題:應(yīng)用筆記 | STM32WB基于Custom Template實(shí)現(xiàn)客戶定制BLE私有協(xié)議
文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
AN5289 使用 STM32WB 系列微控制器構(gòu)建射頻應(yīng)用筆記
LAT1215+如何讓 STM32WB 在沒有 LSE 時(shí)運(yùn)行 BLE 應(yīng)用程序
STM32WB 系列微控制器 OTA 和無線固件更新應(yīng)用筆記
MLPF-WB55-01E3:2.4 GHz低通濾波器的卓越之選
MLPF - WB55 - 01E3:2.4 GHz低通濾波器的深度解析
SIP協(xié)議和私有協(xié)議廣播區(qū)別
STM32WB1MMC藍(lán)牙低功耗模塊技術(shù)解析與應(yīng)用設(shè)計(jì)
STM32WB連接擴(kuò)展板技術(shù)解析:從硬件架構(gòu)到開發(fā)實(shí)踐
STM32WB09xE藍(lán)牙低功耗MCU技術(shù)解析
應(yīng)用筆記 | STM32WB基于Custom Template實(shí)現(xiàn)客戶定制BLE私有協(xié)議
評(píng)論