当前位置: 首页 > article >正文

STM32WB55RG开发(5)----监测STM32WB连接状态

STM32WB55RG开发----5.生成 BLE 程序连接手机APP

  • 概述
  • 硬件准备
  • 视频教学
  • 样品申请
  • 源码下载
  • 参考程序
  • 选择芯片型号
  • 配置时钟源
  • 配置时钟树
  • RTC时钟配置
  • RF wakeup时钟配置
  • 查看开启STM32_WPAN条件
  • 配置HSEM
  • 配置IPCC
  • 配置RTC
  • 启动RF
  • 开启蓝牙
  • LED配置
  • 设置工程信息
  • 工程文件设置
  • 参考文档
  • SVCCTL_App_Notification
  • 结果演示

概述

STM32WB系列微控制器代表了STMicroelectronics在无线技术领域的新一代创新,集成了Bluetooth 5.0、Zigbee和Thread等多种无线通信协议。而在这些无线应用中,监测和管理连接状态显得尤为关键。确保可靠连接不仅对于数据的实时传输至关重要,而且在面对低功耗需求、设备管理和故障诊断时,都有着不可或缺的作用。

本文将深入探讨STM32WB的连接状态监测机制。首先会讨论为什么需要监测连接状态,然后介绍STM32WB提供的相关工具和技术。随后,会详细解释如何使用这些工具来实时跟踪和管理连接状态,以及如何解读和响应不同的连接状态事件。通过这些内容,能够更好地理解和利用STM32WB的无线连接功能,为其应用带来更高的可靠性和效率。

最近在弄ST的教程,需要样片的可以加群申请:615061293/925643491 。

硬件准备

首先需要准备一个开发板,这里我准备的是自己绘制的开发板,需要的可以进行申请。
主控为STM32WB55RGV6

在这里插入图片描述

视频教学

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

STM32WB55RG开发(5)----监测STM32WB连接状态

样品申请

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

源码下载

参考程序

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 事件时,用户可以选择两种不同的方法来处理事件:

  1. 使用“switch case”事件处理程序
  2. 使用事件回调框架

图中列出了几个主要事件回调:
● 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 事件。主要逻辑分为以下几个部分:

  1. 断开连接事件 (HCI_DISCONNECTION_COMPLETE_EVT_CODE):
    ○ 当连接断开时触发该事件。
  2. 连接事件 (HCI_LE_CONNECTION_COMPLETE_SUBEVT_CODE):
    ○ 当 BLE 连接成功建立时触发该事件。
  3. 连接更新事件 (HCI_LE_CONNECTION_UPDATE_COMPLETE_SUBEVT_CODE):
    ○ 当连接参数更新完成时触发,打印更新后的连接参数。
  4. 厂商特定事件 (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亮灯。

在这里插入图片描述


http://www.kler.cn/a/410395.html

相关文章:

  • 丹摩征文活动|实现Llama3.1大模型的本地部署
  • 【Leetcode 每日一题】146. LRU 缓存(c++)
  • strupr(arr);模拟实现(c基础)
  • 开发工具 - VSCode 快捷键
  • 解!决!vscode!Path Intellisense 失效!不起作用问题!!
  • Linux:自定义Shell
  • C#里怎么样访问文件时间
  • 《Shader入门精要》透明效果
  • Qt笔记-获取HTTP的POST请求提交的数据时需要注意的地方(2024-09-02)
  • 加菲工具 - 好用免费的在线工具集合
  • newpipe搜索崩溃Ljava/lang/String;Ljava/nio/charset/Charset;
  • 多维数组与特殊矩阵:存储与压缩
  • wkhtmltopdf的安装与使用
  • 【参会邀请】第二届大数据与数据挖掘国际会议(BDDM 2024)邀您相聚江城!
  • 高标准农田智慧农业系统建设方案
  • 数字信号处理实验报告四:IIR数字滤波器设计及软件实现
  • 【spark】pyspark kerberos 案例,即pyspark-utils客户端工具类
  • CentOS7卸载node
  • C51相关实验
  • 基于RAG的text2sql解决方案vanna-ai 私有化部署使用实战
  • 【已解决】python面试、竞赛编程问题:最长递增子序列和旅行商问题(TSP)
  • C 语言学习-06【指针】
  • 探索1688关键词API接口:Python爬虫的高效之旅
  • I2C学习
  • Elasticsearch向量搜索:从语义搜索到图搜图只有一步之遥
  • 【C#】CancellationTokenSource 为任务或线程提供一种优雅的方式来支持取消操作