一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

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

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

概述

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

硬件準備

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

在這里插入圖片描述

視頻教學(xué)

[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)模塊用于管理多個進程之間共享的訪問權(quán)限和資源同步。
開啟HSEM如下。
在這里插入圖片描述

配置IPCC

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

在這里插入圖片描述

配置RTC

在這里插入圖片描述

啟動RF

在這里插入圖片描述

開啟藍牙

在這里插入圖片描述

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

命名設(shè)備名

在這里插入圖片描述

配置BLE GATT

在這里插入圖片描述

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

LED配置

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

在這里插入圖片描述

配置PB0、PB1為輸出IO。

在這里插入圖片描述

設(shè)置工程信息

在這里插入圖片描述

工程文件設(shè)置

在這里插入圖片描述

參考文檔

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

在這里插入圖片描述

SVCCTL_App_Notification

SVCCTL_App_Notification函數(shù)是一個藍牙事件處理器,用于響應(yīng)和處理STM32WB BLE堆棧中發(fā)生的各種事件。
事件處理的主要內(nèi)容:

  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. 廠商特定調(diào)試事件 (HCI_VENDOR_SPECIFIC_DEBUG_EVT_CODE)

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

在HCI_DISCONNECTION_COMPLETE_EVT_CODE中添加一個IO翻轉(zhuǎn)函數(shù)。

/* 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翻轉(zhuǎn)函數(shù)。
在這里插入圖片描述

ACI_HAL_GET_LINK_STATUS

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

在這里插入圖片描述

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

在這里插入圖片描述

在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;//斷開連接計數(shù)器

/* 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左右之后斷開連接,遍歷連接狀態(tài)數(shù)組,查找任何標記為已連接的連接(例如,值為0x02或0x05)。
對于每個已連接的狀態(tài),從連接句柄數(shù)組中取得相應(yīng)的連接句柄,并使用hci_disconnect函數(shù)來斷開連接。

/* 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;
				
				// 定義存儲連接狀態(tài)和連接句柄的數(shù)組
				uint8_t linkStatus[8];
				uint16_t linkHandles[8];
				tBleStatus status;
				// 獲取當(dāng)前的連接狀態(tài)
				status = aci_hal_get_link_status(linkStatus, linkHandles);
				// 檢查是否成功獲取連接狀態(tài)
				if (status == BLE_STATUS_SUCCESS) {
						// 遍歷所有可能的連接
						for (int i = 0; i < 8; i++) {
								// 判斷當(dāng)前連接是否處于Peripheral或Central角色
								if (linkStatus[i] == 0x02 || linkStatus[i] == 0x05) { 
										// 斷開與此連接句柄關(guān)聯(lián)的連接
										hci_disconnect(linkHandles[i], 0x13); // 使用適當(dāng)?shù)臄嚅_原因
								}
						}
					}
				// 重置連接標志
				connect_flag=0;
			}
		}
		HAL_Delay(1);
		
  }
  /* USER CODE END 3 */

hci_disconnect

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

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

結(jié)果演示

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

在這里插入圖片描述

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 藍牙
    +關(guān)注

    關(guān)注

    115

    文章

    5976

    瀏覽量

    172717
  • BLE
    BLE
    +關(guān)注

    關(guān)注

    12

    文章

    684

    瀏覽量

    60243
  • 藍牙連接
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    3817
  • STM32WB55
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    1536
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    STM32WB55開發(fā)(4)----配置串口打印Debug調(diào)試信息

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

    STM32WB55開發(fā)板單板設(shè)計

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

    STM32WB55是如何在RT-Thread系統(tǒng)上移植的

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

    STM32WB55開發(fā)板的功能是什么?

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

    STM32WB55的相關(guān)資料推薦

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

    如何控制stm32wb55的電源呢

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

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

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

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

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

    STM32WB55開發(fā)板(一)單板設(shè)計-硬件介紹

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

    STM32WB55 藍牙協(xié)議棧運行流程解析

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

    STM32WB55在RT-Thread系統(tǒng)上移植官方藍牙BLE功能

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

    stm32wb55 基于rtt的ble sample制作過程

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

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

    本項目旨在利用 STM32WB55 微控制器的藍牙低功耗(BLE)功能,實現(xiàn)與手機 APP 的無線連接。通過配置時鐘源、啟動關(guān)鍵模塊(如 RCC、RTC、RF、IPCC 和 HSEM),以及啟用
    的頭像 發(fā)表于 12-16 16:06 ?1129次閱讀
    <b class='flag-5'>STM32WB55</b>RG<b class='flag-5'>開發(fā)</b>(<b class='flag-5'>3</b>)----生成 BLE 程序<b class='flag-5'>連接</b>手機APP