0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

嵌入式单片机MCU开发 ? 来源:嵌入式单片机MCU开发 ? 作者:嵌入式单片机MCU开 ? 2024-12-16 16:22 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

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

    文章

    8007

    浏览量

    157559
  • 蓝牙
    +关注

    关注

    116

    文章

    6109

    浏览量

    175032
  • STM32
    +关注

    关注

    2300

    文章

    11046

    浏览量

    367178
  • BLE
    BLE
    +关注

    关注

    12

    文章

    711

    浏览量

    65080
  • STM32WB55
    +关注

    关注

    0

    文章

    26

    浏览量

    1741
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32WB5MMG模块能否支持Thread转WIFI?

    请帮忙推荐一款可以WIFI转Sub-G/Zibber协议的芯片,希望做了无线认证。非常感谢。 1.STM32WB5MMG模块能否支持Thread转WIFI; 2.Nucleo-WBA55RG(主控
    发表于 06-04 07:21

    STM32WB5MMG模块能否支持Thread转WIFI?

    请帮忙推荐一款可以WIFI转Sub-G/Zibber协议的芯片,希望做了无线认证。非常感谢。 1.STM32WB5MMG模块能否支持Thread转WIFI; 2.Nucleo-WBA55RG(主控
    发表于 04-24 06:12

    STM32WB5MMG模块能否支持Thread转WIFI?

    请帮忙推荐一款可以WIFI转Sub-G/Zibber协议的芯片,希望做了无线认证。非常感谢。 1.STM32WB5MMG模块能否支持Thread转WIFI; 2.Nucleo-WBA55RG(主控
    发表于 04-22 08:22

    请问STM32WB55可以通过固件刷写的方式在芯片里预置key吗?

    我正在开发一款基于stm32wb55的产品。在实际用例中,希望通过芯片内置的key来解密数据,请问有没有可能通过固件/fus刷写的方式将这些key写入到芯片中?
    发表于 03-14 08:26

    STM32WB09KEV6TR生成的代码需要改哪些地方才能实现开启BLE?

    想问一下我利用STM32WB09KEV6TR生成的代码还需要改哪些地方才能实现开启BLE,并且发现GATT服务,麻烦大佬指点一下,我需要看哪些文档~
    发表于 03-13 06:58

    STM32WB09的开发板下载蓝牙的程序之后,手机的蓝牙检测不到是为什么?

    目前我手头上有一块STM32WB09的开发板,下载蓝牙的程序之后,手机的蓝牙检测不到?但是看到开发板上面的蓝色指示灯一闪一闪的? 这种情况下,会是底板MB1801D的问题吗? 排查问题应该从哪几方向入手?还有一个问题就是STM官
    发表于 03-11 07:07

    请问STM32WB55客户端应用接收的特征长度为什么更改无效呢?

    STM32WB55客户端应用接收的特征长度为什么更改无效呢?
    发表于 03-10 06:18

    调试STM32WB55 USB dongle的时候发现烧录蓝牙stack后插入USB无法识别怎么解决?

    调试STM32WB55 USB dongle的时候发现烧录蓝牙stack后插入USB无法识别。 然后我用dongle的SWD接口进行STLINK调试,发现FUS异常,为0.0.0,烧录bin提示错误,无法升级。 请问这个问题如何解决,还是说这个dongle已经变砖了..
    发表于 03-07 08:01

    STM32WB55RG使用USB ST-LINK连接电脑显示未知USB设备,更新驱动后也没有变化,是什么原因?

    STM32WB55RG使用USB ST-LINK连接电脑显示未知USB设备,更新驱动后也没有变化,这大概是哪里的问题?
    发表于 03-07 07:13

    STM32L476RG数据手册

    电子发烧友网站提供《STM32L476RG数据手册.pdf》资料免费下载
    发表于 03-04 15:30 ?1次下载

    STM32WL55JC到STM32WLE5CC的LoRaWAN_FUOTA移植

    电子发烧友网站提供《从STM32WL55JC到STM32WLE5CC的LoRaWAN_FUOTA移植.pdf》资料免费下载
    发表于 01-15 15:24 ?1次下载
    从<b class='flag-5'>STM32WL55</b>JC到<b class='flag-5'>STM32WLE5</b>CC的LoRaWAN_FUOTA移植

    STM32WB55RG开发(3)----生成 BLE 程序连接手机APP

    本项目旨在利用 STM32WB55 微控制器的蓝牙低功耗(BLE)功能,实现与手机 APP 的无线连接。通过配置时钟源、启动关键模块(如 RCC、RTC、RF、IPCC 和 HSEM),以及启用蓝牙功能,用户可以创建一个稳定的 BLE
    的头像 发表于 12-16 16:06 ?2092次阅读
    <b class='flag-5'>STM32WB55RG</b><b class='flag-5'>开发</b>(3)----生成 BLE 程序<b class='flag-5'>连接</b>手机APP

    STM32WB55RG开发(2)----STM32CubeProgrammer烧录

    STM32CubeProgrammer (STM32CubeProg) 是一款用于编程STM32产品的全功能多操作系统软件工具。 它提供了一个易用高效的环境,通过调试接口(JTAG和SWD)和自举
    的头像 发表于 12-16 15:52 ?2308次阅读
    <b class='flag-5'>STM32WB55RG</b><b class='flag-5'>开发</b>(2)----<b class='flag-5'>STM32</b>CubeProgrammer烧录

    STM32WB55RG开发(1)----开发板测试

    STM32WB55 & SENSOR是一款基于STM32WB55系列微控制器的评估套件。该套件采用先进的无线通信技术,支持Bluetooth? 5.3规范、IEEE
    的头像 发表于 12-16 15:39 ?2191次阅读
    <b class='flag-5'>STM32WB55RG</b><b class='flag-5'>开发</b>(1)----<b class='flag-5'>开发</b>板测试

    STM32WB0系列无线微控制器满足低功耗蓝牙应用需求

    蓝牙技术作为应用最为广泛的2.4GHz短距离通信技术,对无线微控制器芯片的集成度、功耗、性能、安全性等有较高要求。STM32WB0系列,是兼具高性价比和低功耗的无线微控制器,可充分满足无线蓝牙应用对芯片的要求。
    的头像 发表于 10-12 11:03 ?1313次阅读
    <b class='flag-5'>STM32WB</b>0系列无线微控制器满足低功耗蓝牙应用需求