STM32WB55开发(3)----断开蓝牙连接

这篇具有很好参考价值的文章主要介绍了STM32WB55开发(3)----断开蓝牙连接。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

在嵌入式领域中,STM32WB 系列微控制器以其双核架构和强大的无线连接能力而著称。特别是其蓝牙5.0的功能使得这款微控制器非常适合那些需要低功耗和高性能无线连接的应用。然而,在实际的应用中,合理和有效地管理蓝牙连接是非常关键的,尤其是当设备需要断开或重新建立连接时。
本文将针对STM32WB平台,提供如何利用其HAL库和Bluetooth stack来断开蓝牙连接的方法。我们将首先了解如何通过aci_hal_get_link_status函数获取当前的蓝牙连接状态,然后,我们将使用hci_disconnect函数来断开这些连接。
最近在弄ST的课程,需要样片的可以加群申请:615061293 。

硬件准备

首先需要准备一个开发板,这里我准备的是WB55RG 的开发板:
stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

视频教学

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

STM32WB55开发(3)----断开蓝牙连接

样品申请

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

源码下载

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

选择芯片型号

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

配置时钟源

HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用外置的时钟源,故都选择Crystal/Ceramic Resonator选项,如下所示:
stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

配置时钟树

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

RTC时钟配置

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划
RFWKP时钟配置

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

查看开启STM32_WPAN条件

可以看到,需要开启RF、RTC、RCC、IPCC、HSEM。
stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

配置HSEM

硬件信号量(HSEM)模块用于管理多个进程之间共享的访问权限和资源同步。
开启HSEM如下。
stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

配置IPCC

通信控制器(IPCC)模块的主要用于cpu之间的信号消息交换。
开启如下所示。

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

配置RTC

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

启动RF

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

开启蓝牙

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

配置为自定义模板。
stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

命名设备名

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

配置BLE GATT

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

配置SVC
stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

LED配置

查看原理图可以得知PB0为蓝色LED,PB1为绿色LED。

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

配置PB0、PB1为输出IO。

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

设置工程信息

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

工程文件设置

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

参考文档

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

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

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 */

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划
在HCI_DISCONNECTION_COMPLETE_EVT_CODE中添加一个IO翻转函数。
stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

ACI_HAL_GET_LINK_STATUS

aci_hal_get_link_status函数描述中,它返回的Link_Status数组有8个元素,这意味着该设备可以管理最多8个Bluetooth Low Energy(BLE)连接。每一个元素代表一个可能的BLE连接的状态。
因此,当你想获取每一个BLE连接的状态并据此执行某些操作(例如断开连接)时,你需要循环遍历这8个可能的连接。

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

在ble_hci_le.h中有该函数的说明,要使用这个函数获取当前连接的句柄并随后断开连接,可以这样做:
声明两个数组来存储函数返回的连接状态和连接句柄。
调用aci_hal_get_link_status函数获取这些值。
遍历连接状态数组,查找任何标记为已连接的连接(例如,值为0x02或0x05)。
对于每个已连接的状态,从连接句柄数组中取得相应的连接句柄,并使用hci_disconnect函数来断开连接。

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

在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 */

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划
在主程序中延时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是蓝牙规范中定义的一个接口,允许主机与蓝牙控制器之间的通信。
stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

在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进行蓝牙断开。
stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

结果演示

通过手机和STM32WB建立连接,然后等待可以看见是否能正确获取句柄。
stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划

stm32wb55,stm32cube,#stm32wb,单片机,STM32CUBEMX,STM32WB,STM32WBA,BLE,APP,蓝牙,蓝牙连接,原力计划文章来源地址https://www.toymoban.com/news/detail-714893.html

到了这里,关于STM32WB55开发(3)----断开蓝牙连接的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32WB55_NUCLEO开发(12)----FUS 更新

    在 STM32WB 微控制器中,FUS(Firmware Upgrade Services)是用于固件升级的一种服务。这项服务可以让你更新设备上的无线栈固件(如蓝牙、Zigbee或 Thread 栈),以及无线 MCU (microcontroller unit) 的系统服务。 FUS 实质上是设备的一部分固件,它可以独立于主应用程序运行,主要负责安全

    2024年02月10日
    浏览(36)
  • STM32WB55_NUCLEO开发(11)----发送数据到手机

    本篇文章将详细介绍如何在上节配置的基础上,实现通过点击STM32WB开发板上的按键发送数据到手机上。 最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:6_15061293 。 首先需要准备一个开发板,这里我准备的是NUCLEO-WB55RG 的开发板: 听不到声音的请点击跳转进行观看。

    2024年02月01日
    浏览(44)
  • STM32WB55_NUCLEO开发(9)----接收手机数据点亮LED

    本篇文章主要介绍如何使用STM32CubeMX对生成STM32WB工程,并通过与STM32WB配对,向该特征写入一个任意字节,绿色LED会切换。 最近在弄ST和瑞萨RA的课程,需要样片的可以加群申请:6_15061293 。 首先需要准备一个开发板,这里我准备的是NUCLEO-WB55RG 的开发板: 听不到声音的请点击

    2024年02月01日
    浏览(45)
  • 内嵌功能强大、低功耗STM32WB55CEU7、STM32WB55CGU7 射频微控制器 - MCU, 48-UFQFN

    一、概述: STM32WB55xx多协议无线和超低功耗器件内嵌功能强大的超低功耗无线电模块(符合蓝牙® 低功耗SIG规范5.0和IEEE 802.15.4-2011标准)。该器件内含专用的Arm® Cortex® -M0+,用于执行所有的底层实时操作。这些器件基于高性能Arm® Cortex®-M4 32位RISC内核(工作频率可达64 MHz),

    2024年02月11日
    浏览(39)
  • 【STM32备忘录】【STM32WB系列的BLE低功耗蓝牙】一、测试广播配置搜不到信号的注意事项

    WB系列是双核单片机,用户写M4,无线协议栈使用M0 新买到手的单片机,需要自己刷入使用的无线协议栈 刷入无线协议栈的途径是通过一个叫FUS的东东,类似于bootloader,这个FUS新买的芯片通常已经刷好,但版本不一定是最新的(如果没有需要自己刷入) 刷入FUS和无线协议栈需要

    2024年03月16日
    浏览(58)
  • STM32FreeRTOS任务通知(STM32cube高效开发)

    1、任务通知可模拟队列和信号量 任务通知是FreeRTOS另外一种进程间通信技术。不需要创建任何中间对象,可以直接从任务向任务或ISR向任务发送通知,传递一个通知值任务通知可以模拟二值信号量、计数信号量、或长度为1的消息队列,使用任务通知,一般效率更高,消耗内

    2024年03月13日
    浏览(49)
  • 【STM32Cube开发记录】1-下载和安装STM32CubeIDE

    【STM32Cube开发记录】1-下载和安装STM32CubeIDE 【STM32Cube开发记录】2-STM32CubeProgrammer的使用 【STM32Cube开发记录】3-STM32CubeMX的使用 【STM32Cube开发记录】4-标准库 HAL库 LL库 【STM32Cube开发记录】5-寄存器和存储器映射 【STM32Cube开发记录】6-STM32核心功能 【STM32Cube开发记录】7-Debug调试功

    2024年01月17日
    浏览(44)
  • 安信可Ai-WB2系列模组/开发板连接AWS亚马逊云方法

    本文介绍Ai-WB2系列模组/开发板连接亚马逊云方法 Ai-WB2系列模组/开发板一个 Ai-WB2系列烧录软件,下载地址:点击下载 连接亚马逊云demo: (待发布) color{blue}(待发布) (待发布) USB转TTL串口板一个 1.注册亚马逊账号,登录AWS IoT控制台,注册地址(注册是时候需要企业名

    2024年01月17日
    浏览(43)
  • STM32CubeIDE开发(三十一), stm32人工智能开发应用实践(Cube.AI).篇一

    目录 一、cube.AI简介及cubeIDE集成        1.1 cube.AI介绍        1.2 cube.AI与cubeIDE集成与安装         1.3 cube.AI支持硬件平台         1.4 cube.AI应用的好处  二、FP-AI-SENSING1        2.1 FP-AI-SENSING1简介           2.2 FP-AI-SENSING1软件包支持硬件平台 三、FP-AI-SENSING1部署        

    2024年01月22日
    浏览(44)
  • STM32CubeIDE开发(三十三), stm32人工智能开发应用实践(Cube.AI).篇三

    目录 一、cube.AI实际项目应用 二、创建工程 2.1 工程配置 2.2 外设代码设计 2.3 传感器数据采集与输出源码设计 2.4 编辑下载程序,采集数据  三、模型训练 四、cube.AI配置及c模型生成 五、模型调用及测试         接篇二,前文都是采用FP-AI-SENSING1案例和配套的B-L475E-IOT01A开

    2024年01月17日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包