概述
STM32WB系列微控制器代表了STMicroelectronics在無線技術領域的新一代創新,集成了Bluetooth 5.0、Zigbee和Thread等多種無線通信協議。而在這些無線應用中,監測和管理連接狀態顯得尤為關鍵。確保可靠連接不僅對于數據的實時傳輸至關重要,而且在面對低功耗需求、設備管理和故障診斷時,都有著不可或缺的作用。
本文將深入探討STM32WB的連接狀態監測機制。首先會討論為什么需要監測連接狀態,然后介紹STM32WB提供的相關工具和技術。隨后,會詳細解釋如何使用這些工具來實時跟蹤和管理連接狀態,以及如何解讀和響應不同的連接狀態事件。通過這些內容,能夠更好地理解和利用STM32WB的無線連接功能,為其應用帶來更高的可靠性和效率。
最近在弄ST的教程,需要樣片的可以加群申請:615061293/925643491 。
硬件準備
首先需要準備一個開發板,這里我準備的是自己繪制的開發板,需要的可以進行申請。 主控為STM32WB55RGV6
視頻教學
[https://www.bilibili.com/video/BV1ENmpYREfu/]
樣品申請
[https://www.wjx.top/vm/OhcKxJk.aspx#]
源碼下載
[https://download.csdn.net/download/qq_24312945/90044072]
參考程序
[https://github.com/CoreMaker-lab/STM32WB55_SENSOR]
[https://gitee.com/CoreMaker/STM32WB55_SENSOR]
選擇芯片型號
配置時鐘源
HSE與LSE分別為外部高速時鐘和低速時鐘,在本文中使用外置的時鐘源,故都選擇Crystal/Ceramic Resonator選項,如下所示:
配置時鐘樹
RTC時鐘配置
RF wakeup時鐘配置
查看開啟STM32_WPAN條件
可以看到,需要開啟RF、RTC、RCC、IPCC、HSEM。
配置HSEM
硬件信號量(HSEM)模塊用于管理多個進程之間共享的訪問權限和資源同步。
資料下載鏈接:https://www.stmcu.jp/wp/wp-content/uploads/files/presentation-ja/STM32WB/17_STM32WB-System-Hardware-Semaphore-(HSEM)_J.pdf
開啟HSEM如下。
配置IPCC
通信控制器(IPCC)模塊的主要用于cpu之間的信號消息交換。
資料下載鏈接:https://www.st.com/content/ccc/resource/training/technical/product_training/group0/d3/17/dc/8a/bf/ef/4f/10/STM32WB-System-Inter-Processor-communication-controller-IPCC/files/STM32WB-System-Inter-Processor-communication-controller-IPCC.pdf/jcr:content/translations/en.STM32WB-System-Inter-Processor-communication-controller-IPCC.pdf
開啟如下所示。
配置RTC
啟動RF
開啟藍牙
配置為自定義模板。
命名設備名,輸入myDevice
配置BLE GATT,輸入mySVC
配置mySVC,輸入myCharWrite
LED配置
查看原理圖,對應LED分別為PB0,PB1,PB5。
配置如下所示。
設置工程信息
工程文件設置
參考文檔
下圖展示了 BLE 協議棧中的事件回調函數 以及這些事件的作用和觸發位置,特別是在處理 BLE 應用中的 ACI 事件時,用戶可以選擇兩種不同的方法來處理事件:
使用“switch case”事件處理程序
使用事件回調框架
圖中列出了幾個主要事件回調:
● hci_disconnection_complete_event():連接結束事件,適用于 GAP 中的中央設備或外設。
● hci_le_connection_complete_event():建立連接完成事件,表示兩個設備之間的連接成功建立,適用于 GAP 中的中央設備或外設。
● aci_gatt_attribute_modified_event():當 GATT 客戶端修改了服務器端的某個屬性時,服務器端會觸發該事件,適用于 GATT 的服務器端。
● aci_gatt_notification_event():當 GATT 服務器端發送通知給客戶端時,在客戶端生成該事件,適用于 GATT 的客戶端。
● aci_gatt_indication_event():當 GATT 服務器端向客戶端發送指示(Indication)時,在客戶端生成該事件,適用于 GATT 客戶端。
● aci_gap_pass_key_req_event():在配對過程中需要提供密鑰時觸發,安全管理器應用層應在接收到事件后調用 aci_gap_pass_key_resp() 進行密鑰的反饋,適用于 GAP 中的中央設備或外設。
● aci_gap_pairing_complete_event():配對過程成功或失敗后觸發,適用于 GAP 中的中央設備或外設。
● aci_gap_bond_lost_event():當設備的綁定關系丟失時觸發,通常是由于遠端設備刪除了綁定信息。應用層在接收到該事件后,可以調用 aci_gap_allow_rebond() 以允許設備重新綁定,適用于 GAP 外設。
● aci_att_read_by_group_type_resp_event():當客戶端請求讀取組類型時,返回包含符合讀取條件的屬性句柄和類型的響應,適用于 GATT 客戶端。
● aci_att_read_by_type_resp_event():當客戶端請求讀取指定類型的屬性時,返回包含符合讀取條件的屬性值和類型的響應,適用于 GATT 客戶端。
● aci_gatt_proc_complete_event():表示 GATT 流程已完成,適用于 GATT 客戶端。
● hci_le_advertising_report_event():在掃描過程中發現設備時觸發,報告掃描到的設備信息,適用于 GAP 中的中央設備。
這些事件為 BLE 應用中的配對、綁定、安全管理和 GATT 操作提供了重要的反饋機制。開發者可以通過這些事件在應用層實現相應的業務邏輯。
SVCCTL_App_Notification
SVCCTL_App_Notification函數是一個藍牙事件處理器,用于響應和處理STM32WB BLE堆棧中發生的各種事件。
該代碼實現了一個 BLE 事件回調函數 SVCCTL_App_Notification,用于處理 STM32WB BLE 應用中的各種 BLE 事件。主要邏輯分為以下幾個部分:
斷開連接事件 (HCI_DISCONNECTION_COMPLETE_EVT_CODE):
○ 當連接斷開時觸發該事件。
連接事件 (HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE):
○ 當 BLE 連接成功建立時觸發該事件。
連接更新事件 (HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE):
○ 當連接參數更新完成時觸發,打印更新后的連接參數。
廠商特定事件 (HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE):
○ 處理各種 GAP 和 GATT 相關的自定義事件:
■ 按鍵通知 (ACI_GAP_KEYPRESS_NOTIFICATION_VSEVT_CODE)
■ 密碼請求 (ACI_GAP_PASS_KEY_REQ_VSEVT_CODE):當需要密碼時,通過調用 aci_gap_pass_key_resp 提供固定的 PIN。
■ 數字比較 (ACI_GAP_NUMERIC_COMPARISON_VALUE_VSEVT_CODE):進行數字比較并確認。
■ 配對完成 (ACI_GAP_PAIRING_COMPLETE_VSEVT_CODE):檢查配對狀態并打印結果。
■ GATT 指示 (ACI_GATT_INDICATION_VSEVT_CODE):當服務器發送指示時,確認接收。
在HCI_DISCONNECTION_COMPLETE_EVT_CODE中添加一個LED控制函數。
/* USER CODE BEGIN HCI_EVT_LE_CONN_COMPLETE */
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);
/* USER CODE END HCI_EVT_LE_CONN_COMPLETE */
在HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE中添加一個LED控制函數。
/* USER CODE BEGIN HCI_EVT_LE_CONN_COMPLETE */
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET);
/* USER CODE END HCI_EVT_LE_CONN_COMPLETE */
在主程序中添加LED初始化程序。
/* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET);
/* USER CODE END 2 */
結果演示
通過手機和STM32WB建立連接和斷開連接可以查看到LED電平變化。
連接上LED1亮燈,LED2滅燈。
斷開藍牙鏈接。
連接上LED1滅燈,LED2亮燈。
審核編輯 黃宇
-
微控制器
+關注
關注
48文章
7552瀏覽量
151417 -
藍牙
+關注
關注
114文章
5823瀏覽量
170313 -
STM32
+關注
關注
2270文章
10900瀏覽量
355983 -
BLE
+關注
關注
12文章
660瀏覽量
59406 -
STM32WB55
+關注
關注
0文章
26瀏覽量
1324
發布評論請先 登錄
相關推薦
評論