吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32WB55開發(3)----斷開藍牙連接

嵌入式單片機MCU開發 ? 來源:嵌入式單片機MCU開發 ? 作者:嵌入式單片機MCU開 ? 2023-12-01 15:43 ? 次閱讀

概述

嵌入式領域中,STM32WB 系列微控制器以其雙核架構和強大的無線連接能力而著稱。特別是其藍牙5.0的功能使得這款微控制器非常適合那些需要低功耗和高性能無線連接的應用。然而,在實際的應用中,合理和有效地管理藍牙連接是非常關鍵的,尤其是當設備需要斷開或重新建立連接時。
本文將針對STM32WB平臺,提供如何利用其HAL庫和Bluetooth stack來斷開藍牙連接的方法。我們將首先了解如何通過aci_hal_get_link_status函數獲取當前的藍牙連接狀態,然后,我們將使用hci_disconnect函數來斷開這些連接。
最近在弄ST的課程,需要樣片的可以加群申請:615061293 。

硬件準備

首先需要準備一個開發板,這里我準備的是WB55RG 的開發板:

在這里插入圖片描述

視頻教學

[https://www.bilibili.com/video/BV1U14y16712

樣品申請

[https://www.wjx.top/vm/OhcKxJk.aspx#

源碼下載

[https://download.csdn.net/download/qq_24312945/88324454]

選擇芯片型號

在這里插入圖片描述

配置時鐘

HSE與LSE分別為外部高速時鐘和低速時鐘,在本文中使用外置的時鐘源,故都選擇Crystal/Ceramic Resonator選項,如下所示:
在這里插入圖片描述

配置時鐘樹

在這里插入圖片描述

RTC時鐘配置

在這里插入圖片描述
RFWKP時鐘配置

在這里插入圖片描述

查看開啟STM32_WPAN條件

可以看到,需要開啟RF、RTC、RCC、IPCC、HSEM。
在這里插入圖片描述

配置HSEM

硬件信號量(HSEM)模塊用于管理多個進程之間共享的訪問權限和資源同步。
開啟HSEM如下。
在這里插入圖片描述

配置IPCC

通信控制器(IPCC)模塊的主要用于cpu之間的信號消息交換。
開啟如下所示。

在這里插入圖片描述

配置RTC

在這里插入圖片描述

啟動RF

在這里插入圖片描述

開啟藍牙

在這里插入圖片描述

配置為自定義模板。
在這里插入圖片描述

命名設備名

在這里插入圖片描述

配置BLE GATT

在這里插入圖片描述

配置SVC
在這里插入圖片描述

LED配置

查看原理圖可以得知PB0為藍色LED,PB1為綠色LED。

在這里插入圖片描述

配置PB0、PB1為輸出IO。

在這里插入圖片描述

設置工程信息

在這里插入圖片描述

工程文件設置

在這里插入圖片描述

參考文檔

https://wiki.st.com/stm32mcu/wiki/Connectivity:STM32WB_HeartRate
HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE事件可以判斷是否構建完成。

在這里插入圖片描述

SVCCTL_App_Notification

SVCCTL_App_Notification函數是一個藍牙事件處理器,用于響應和處理STM32WB BLE堆棧中發生的各種事件。
事件處理的主要內容:

  1. 斷開連接事件 (HCI_DISCONNECTION_COMPLETE_EVT_CODE)
  2. 元事件 (HCI_LE_META_EVT_CODE)
  3. 這部分處理了幾個子事件,如HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE(連接更新完成)和HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE(新的連接建立完成)。
  4. 廠商特定調試事件 (HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE)

"在HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE事件中,我們能夠判斷Bluetooth Low Energy(BLE)設備是否已成功建立了一個新的連接。相反,在HCI_DISCONNECTION_COMPLETE_EVT_CODE事件里,我們可以確認是否一個已存在的連接已經被斷開。這兩個事件為我們提供了監控BLE連接狀態的重要手段,從而使我們能夠更好地管理設備的連接生命周期。"

在HCI_DISCONNECTION_COMPLETE_EVT_CODE中添加一個IO翻轉函數。

/* USER CODE BEGIN EVT_DISCONN_COMPLETE */
			HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
      /* USER CODE END EVT_DISCONN_COMPLETE */

在這里插入圖片描述
在HCI_DISCONNECTION_COMPLETE_EVT_CODE中添加一個IO翻轉函數。
在這里插入圖片描述

ACI_HAL_GET_LINK_STATUS

aci_hal_get_link_status函數描述中,它返回的Link_Status數組有8個元素,這意味著該設備可以管理最多8個Bluetooth Low Energy(BLE)連接。每一個元素代表一個可能的BLE連接的狀態。
因此,當你想獲取每一個BLE連接的狀態并據此執行某些操作(例如斷開連接)時,你需要循環遍歷這8個可能的連接。

在這里插入圖片描述

在ble_hci_le.h中有該函數的說明,要使用這個函數獲取當前連接的句柄并隨后斷開連接,可以這樣做:
聲明兩個數組來存儲函數返回的連接狀態和連接句柄。
調用aci_hal_get_link_status函數獲取這些值。
遍歷連接狀態數組,查找任何標記為已連接的連接(例如,值為0x02或0x05)。
對于每個已連接的狀態,從連接句柄數組中取得相應的連接句柄,并使用hci_disconnect函數來斷開連接。

在這里插入圖片描述

在main.c中添加ble_hci_le.h文件。

/* USER CODE BEGIN Includes */

#include "ble_hci_le.h"
/* USER CODE END Includes */

在main.c中添加變量。

/* USER CODE BEGIN 0 */
uint8_t connect_flag=0;//連接成功標志位
uint32_t connect_num=0;//斷開連接計數器

/* USER CODE END 0 */

在app_ble.c中引用connect_flag變量,可以在連接成功侯讓該標志位為1。

/* USER CODE BEGIN Includes */
extern uint8_t connect_flag;//連接成功標志位
/* USER CODE END Includes */

可以在HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE(連接更新完成)事件中添加標志位定義,將connect_flag置位位1。

/* USER CODE BEGIN HCI_EVT_LE_CONN_COMPLETE */
					HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
					connect_flag=1;
          /* USER CODE END HCI_EVT_LE_CONN_COMPLETE */

在這里插入圖片描述
在主程序中延時5S左右之后斷開連接,遍歷連接狀態數組,查找任何標記為已連接的連接(例如,值為0x02或0x05)。
對于每個已連接的狀態,從連接句柄數組中取得相應的連接句柄,并使用hci_disconnect函數來斷開連接。

/* Init code for STM32_WPAN */
  MX_APPE_Init();

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    MX_APPE_Process();

    /* USER CODE BEGIN 3 */
		//檢查連接標志,如果連接成功,則進行處理
		if(connect_flag)
		{
			if(connect_num< 5000)
				connect_num++;
			else
			{
				connect_num=0;
				// 初始化連接句柄變量
				uint16_t Connection_Handle1=0;
				
				// 定義存儲連接狀態和連接句柄的數組
				uint8_t linkStatus[8];
				uint16_t linkHandles[8];
				tBleStatus status;
				// 獲取當前的連接狀態
				status = aci_hal_get_link_status(linkStatus, linkHandles);
				// 檢查是否成功獲取連接狀態
				if (status == BLE_STATUS_SUCCESS) {
						// 遍歷所有可能的連接
						for (int i = 0; i < 8; i++) {
								// 判斷當前連接是否處于Peripheral或Central角色
								if (linkStatus[i] == 0x02 || linkStatus[i] == 0x05) { 
										// 斷開與此連接句柄關聯的連接
										hci_disconnect(linkHandles[i], 0x13); // 使用適當的斷開原因
								}
						}
					}
				// 重置連接標志
				connect_flag=0;
			}
		}
		HAL_Delay(1);
		
  }
  /* USER CODE END 3 */

hci_disconnect

這是一個藍牙HCI (Host Controller Interface) 命令的函數實現,名為 hci_disconnect。HCI是藍牙規范中定義的一個接口,允許主機與藍牙控制器之間的通信。
在這里插入圖片描述

在ble_hci_le.h中有該函數的說明,要使用這個函數終止現有的藍牙連接,可以這樣做:
對應的參數有:
Connection_Handle:這是一個標識符,指明要斷開的連接。其有效值范圍為 0x0000 到 0x0EFF。
Reason:這是一個表示終止連接原因的參數。以下是可能的原因及其值:
0x05: 認證失敗 (Authentication Failure)
0x13: 遠程用戶終止了連接 (Remote User Terminated Connection)
0x14: 由于資源不足,遠程設備終止了連接 (Remote Device Terminated Connection due to Low Resources)
0x15: 由于關閉電源,遠程設備終止了連接 (Remote Device Terminated Connection due to Power Off)
0x1A: 不支持的遠程特性 (Unsupported Remote Feature)
0x3B: 不可接受的連接參數 (Unacceptable Connection Parameters)
所以可以用0x13進行藍牙斷開。
在這里插入圖片描述

結果演示

通過手機和STM32WB建立連接,然后等待可以看見是否能正確獲取句柄。
在這里插入圖片描述

在這里插入圖片描述

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 藍牙
    +關注

    關注

    114

    文章

    5869

    瀏覽量

    171228
  • BLE
    BLE
    +關注

    關注

    12

    文章

    670

    瀏覽量

    59598
  • 藍牙連接
    +關注

    關注

    0

    文章

    12

    瀏覽量

    3765
  • STM32WB55
    +關注

    關注

    0

    文章

    26

    瀏覽量

    1375
收藏 人收藏

    評論

    相關推薦

    STM32WB55開發(1)----套件概述

    所使用的器件是我們自行設計的開發板,該開發板是基于 STM32WB55 系列微控制器所構建。STM32WBXX_VFQFPN68 不僅是一款評估套件,它還集成了眾多現代化的無線通信技術
    的頭像 發表于 12-01 15:40 ?1899次閱讀
    <b class='flag-5'>STM32WB55</b><b class='flag-5'>開發</b>(1)----套件概述

    STM32WB55開發(2)----修改藍牙地址

    在嵌入式藍牙開發中,特別是針對STM32WB系列,修改或配置藍牙設備地址是常見的需求。不論是為了實現特定的測試、滿足隱私要求,還是為了區分開發
    的頭像 發表于 12-01 15:42 ?953次閱讀
    <b class='flag-5'>STM32WB55</b><b class='flag-5'>開發</b>(2)----修改<b class='flag-5'>藍牙</b>地址

    STM32WB55開發(4)----配置串口打印Debug調試信息

    STM32WB55系列微控制器上進行開發時,實時監控應用程序的運行情況和調試潛在問題是至關重要的。使用串口(USART/UART)進行Debug信息打印是一種簡便、高效的方法。下面是如何在STM32WB55上配置串口來打印調試
    的頭像 發表于 12-01 15:48 ?1411次閱讀
    <b class='flag-5'>STM32WB55</b><b class='flag-5'>開發</b>(4)----配置串口打印Debug調試信息

    STM32WB55開發板單板設計

    STM32WB55開發板(一)單板設計-硬件介紹目錄STM32WB55開發板(一)單板設計-硬件介紹前言簡介參數介紹MCU方面開發板方面
    發表于 08-06 08:15

    STM32WB55是如何在RT-Thread系統上移植的

    STM32WB55在RT-Thread系統上移植官方藍牙BLE功能硬件環境:(1)開發板:ST官方的stm32wb55-st-nucleo開發
    發表于 08-24 07:20

    STM32WB55開發板的功能是什么?

    STM32WB55開發板的功能是什么?
    發表于 11-08 06:36

    STM32WB55的相關資料推薦

    STM32WB55 藍牙協議棧運行流程解析簡介STM32WB55是ST公司近期推出的一顆雙核(M0+M4)無線MCU,主要應用在BLE領域,同時也可以運行thread和zigbee等無線協議棧。協議
    發表于 02-07 08:47

    如何控制stm32wb55的電源呢

    我想了解如何控制 stm32wb55 的電源。我正在運行來自最新 stm32cube 的 PWR_STANDBY_RTC 示例。在待機狀態下,我正在讀取 900 uA。這似乎很高。我應該期待什么?
    發表于 12-20 07:24

    stm32wb55 待機stop睡眠 喚醒后藍牙工作不正常

    stm32wb55 待機stop睡眠 喚醒后藍牙工作不正常? 進入待機睡眠,待機電流80微安那樣,通過外部io口喚醒后,接著用手機的藍牙連接stm
    發表于 06-16 21:14

    STM32WB55單片機的PCB和電路圖合集免費下載

    本文檔的主要內容詳細介紹的是STM32WB55單片機的PCB和電路圖合集免費下載。
    發表于 12-16 08:00 ?88次下載
    <b class='flag-5'>STM32WB55</b>單片機的PCB和電路圖合集免費下載

    STM32WB55開發板(一)單板設計-硬件介紹

    STM32WB55開發板(一)單板設計-硬件介紹目錄STM32WB55開發板(一)單板設計-硬件介紹前言簡介參數介紹MCU方面開發板方面
    發表于 12-01 18:06 ?20次下載
    <b class='flag-5'>STM32WB55</b><b class='flag-5'>開發</b>板(一)單板設計-硬件介紹

    STM32WB55 藍牙協議棧運行流程解析

    STM32WB55 藍牙協議棧運行流程解析簡介STM32WB55是ST公司近期推出的一顆雙核(M0+M4)無線MCU,主要應用在BLE領域,同時也可以運行thread和zigbee等無線協議棧。協議
    發表于 12-04 12:36 ?17次下載
    <b class='flag-5'>STM32WB55</b> <b class='flag-5'>藍牙</b>協議棧運行流程解析

    STM32WB55在RT-Thread系統上移植官方藍牙BLE功能

    STM32WB55在RT-Thread系統上移植官方藍牙BLE功能硬件環境:(1)開發板:ST官方的stm32wb55-st-nucleo開發
    發表于 12-04 12:51 ?17次下載
    <b class='flag-5'>STM32WB55</b>在RT-Thread系統上移植官方<b class='flag-5'>藍牙</b>BLE功能

    stm32wb55 基于rtt的ble sample制作過程

    stm32wb55 基于rtt的ble sample制作過程準備活動硬件stm32wb55 nucleo開發stm32wb55 dangle軟件rtthread
    發表于 12-20 19:39 ?13次下載
    <b class='flag-5'>stm32wb55</b> 基于rtt的ble sample制作過程

    STM32WB55RG開發(3)----生成 BLE 程序連接手機APP

    本項目旨在利用 STM32WB55 微控制器的藍牙低功耗(BLE)功能,實現與手機 APP 的無線連接。通過配置時鐘源、啟動關鍵模塊(如 RCC、RTC、RF、IPCC 和 HSEM),以及啟用
    的頭像 發表于 12-16 16:06 ?404次閱讀
    <b class='flag-5'>STM32WB55</b>RG<b class='flag-5'>開發</b>(<b class='flag-5'>3</b>)----生成 BLE 程序<b class='flag-5'>連接</b>手機APP
    真人百家乐打法| 新锦江百家乐官网娱乐场开户注册 | 金冠百家乐官网娱乐城| 博九百家乐官网娱乐城| 百家乐官网开户最快的平台是哪家| bet365网址主页| 皇廷娱乐| 云鼎百家乐官网现金网| 网上玩百家乐官网犯法| 澳门百家乐官网职业| 公海百家乐官网的玩法技巧和规则 | 网上的百家乐官网是假的吗| 基础百家乐官网博牌规| 玩百家乐五湖四海娱乐城| 沙龙百家乐娱乐场开户注册| 威尼斯人娱乐场cqsscgw88| 澳门百家乐论坛| 星空棋牌官方下载| 南通棋牌游戏中心| 3d俄罗斯轮盘| 百家乐官网787| 百家乐官网用品| 百家乐视频游戏双扣| 去澳门百家乐的玩法技巧和规则 | 大发888送58彩金| 台南市| 百家乐官网赌博破解方法| 2016虎和蛇合作做生意| 鑫鑫百家乐的玩法技巧和规则| 大发888wf娱乐场下载| 3U百家乐官网娱乐城| 百家乐官网稳一点的押法| 百家乐官网园棋牌| 百家乐高手论坮| 马牌百家乐的玩法技巧和规则 | 百利宫百家乐官网的玩法技巧和规则| 澳门百家乐送彩金| 百家乐百战百胜| 永利高投注网| 布加迪百家乐官网的玩法技巧和规则 | 百家乐官网谋略|