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

    文章

    7532

    浏览量

    151275
  • 蓝牙
    +关注

    关注

    114

    文章

    5801

    浏览量

    170129
  • STM32
    +关注

    关注

    2269

    文章

    10889

    浏览量

    355569
  • BLE
    BLE
    +关注

    关注

    12

    文章

    660

    浏览量

    59384
  • STM32WB55
    +关注

    关注

    0

    文章

    26

    浏览量

    1320
收藏 人收藏

    评论

    相关推荐

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

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

    stm32WB有可以驱动声卡的驱动程序吗?

    声卡是PCM2704,使用的开发板是STM32WB55RG,想实现如下过程: PCM2704声卡将开发板上USB传出的PCM格式的音频转为模拟信号,通过PAM8406功率放大器将该信号放大后接喇叭
    发表于 05-27 07:15

    请问STM32WB55RG怎么配置GPIO输入模式?

    在CubeMX中配置STM32WB55的GPIO输入模式时,在下拉选择中为何没有输入模式选择?
    发表于 05-23 07:58

    STM32WBSTM32L4/L4+的区别和优劣势是什么?

    STM32WBSTM32L4 / L4+的区别,和优劣势
    发表于 04-26 08:07

    STM32WB thread启动错误是什么原因导致的?

    STM32Cube_FW_WB_V1.3.0ProjectsP-NUCLEO-WB55.NucleoApplicationsBLE_ThreadBle_Thread_Static 硬件环境:STM32WB nucleo 使用SW2切换协议为thread , 显示失败
    发表于 04-16 08:01

    P-NUCLEO-WB55.USBDongle开发板升级FUS和无线协议栈失败的原因?

    按照官网提供的下面步骤 升级P-NUCLEO-WB55.USBDongle单板的FUS和无线协议栈后,单板在sw2 to boot0下,stm32cubeprogrammer选择usb模式无法再识别
    发表于 04-16 06:59

    STM32WB能否连接蓝牙耳机?如果可以支持什么格式?

    STM32WB能否连接蓝牙耳机?如果可以支持什么格式?如果能得到回答将非常感谢!
    发表于 03-27 07:11

    项目开发时能不能同时用两块芯片,比如一块stm32WB一块stm32F4?

    请问项目开发时能不能同时用两块芯片,比如一块stm32WB,一块stm32F4?
    发表于 03-20 08:22

    STM32WB配置SMPS模块具体步骤是什么?

    想要降低STM32WB的功耗,查找手册发现开启SMPS模块可以降低功耗。配置SMPS模块具体步骤是什么有大佬知道吗?是开启SMPS宏定义,然后写PWR的寄存器就可以了吗?怎么证明自己的SMPS模块-配置正确了呢?
    发表于 03-20 08:18

    STM32U5,STM32WBSTM32L4开发板,哪个开发板拥有较多数量的ADC?

    请问,我现在需要开发一个项目,在这个项目中需要使用较多数量的传感器(至少8个),这些传感器需要进行信号采集,现在在使用STM32U5,STM32WBSTM32L4芯片的
    发表于 03-20 08:01

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

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

    请问STM32WB55怎么配置蓝牙到低功耗广播状态

    使用STM32WB55RGV6作为主控设计了一款智能锁应用,请问怎么配置蓝牙到低功耗广播状态?目前根据例程,蓝牙运行期间cpu1进入stop2之后仍有4mA左右的电流,如何配置可以达到更低的功耗?或者临时关闭蓝牙之后再根据需要重新打开?
    发表于 03-15 07:00

    STM32WB55RG是否可以使用j-flash通过j-link烧录协议栈和FUS bin文件?

    硬件基于STM32WB55RG是否可以使用j-flash通过j-link烧录协议栈和FUS bin文件?
    发表于 03-12 07:14