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

STM32 模块化开发指南 · 第 4 篇 用状态机管理 BLE 应用逻辑:分层解耦的实践方式

本文是《STM32 模块化开发实战指南》第 4 篇,聚焦于 BLE 模块中的状态管理问题。我们将介绍如何通过有限状态机(Finite State Machine, FSM)架构,实现 BLE 广播、扫描、连接等行为的解耦与可控,并配合事件队列驱动完成主从共存、低功耗友好、状态清晰的 BLE 应用。


一、为什么需要状态机?

在裸机 STM32 项目中,BLE 功能往往涉及多种模式:广播、扫描、连接、断开等。如果直接在主循环中判断标志位处理,会出现以下问题:

  • 状态跳转混乱,难以追踪

  • 功能逻辑耦合,影响扩展

  • 难以保障操作时序(如扫描未停就开始连接)

因此,使用 FSM 管理 BLE 应用逻辑,是构建可靠嵌入式蓝牙模块的核心


二、BLE 模块的典型状态图(主从共存)

[INIT]
  ↓
[IDLE] ←→ [ADV](被动广播)
   ↓        ↑
 [SCAN]     |
   ↓        |
[CONNECT] ←→ [CONNECTED]

每个状态有清晰职责,状态转移由事件触发控制,如:命令输入、BLE 堆栈事件、超时触发。


三、状态定义(ble_fsm.h)

#ifndef BLE_FSM_H
#define BLE_FSM_H

typedef enum {
    BLE_STATE_INIT = 0,
    BLE_STATE_IDLE,
    BLE_STATE_ADV,
    BLE_STATE_SCAN,
    BLE_STATE_CONNECTING,
    BLE_STATE_CONNECTED,
} ble_state_t;

typedef enum {
    BLE_EVT_NONE = 0,
    BLE_EVT_START_ADV,
    BLE_EVT_STOP_ADV,
    BLE_EVT_START_SCAN,
    BLE_EVT_STOP_SCAN,
    BLE_EVT_CONNECTED,
    BLE_EVT_DISCONNECTED,
    BLE_EVT_CMD_RESET
} ble_event_t;

void ble_fsm_init(void);
void ble_fsm_handle_event(ble_event_t event);
ble_state_t ble_fsm_get_state(void);

#endif

四、状态机实现(ble_fsm.c)

#include "ble_fsm.h"
#include
http://www.dtcms.com/a/126302.html

相关文章:

  • poi-tl
  • 全能格式转换器v16.3.0.159绿色便携版
  • 合并区间、插入区间~
  • 【LLM基础】Megatron-LM相关知识(主要是张量并行机制)
  • 无线通信网
  • leetcode 322. Coin Change
  • 谷歌25年春季新课:15小时速成机器学习
  • 【2025年认证杯数学中国数学建模网络挑战赛】C题 数据预处理与问题一二求解
  • 如何使用CAPL解析YAML文件?
  • Python爬虫第13节-解析库pyquery 的使用
  • C++ | 时间日期
  • WEB 前端学 JAVA(一)
  • Qwen2.5-7B-Instruct FastApi 部署调用教程
  • YOLO学习笔记 | YOLOv8 全流程训练步骤详解(2025年4月更新)
  • 知行之桥2025版账号密码修改和重置指南
  • .NET WPF 可视化树(Visual Tree)
  • MCP工具的配置文件格式是怎么样的?MCP教程平台推荐
  • RVOS-3.实现内存管理
  • Compose 适配 - 响应式排版 自适应布局
  • 基于SpringBoot的智慧社区管理系统(源码+数据库)
  • 蓝桥杯单片机刷题——通过按键触发串口传输电压值
  • 这种情况是应为VScode的版本太新了,更新到1.86版本后要求远程连接服务器的内核版本不符合条件
  • 【力扣hot100题】(075)数据流的中位数
  • 2025年3月GESPC++三级考级真题——2025
  • Elasticsearch 系列专题 - 第六篇:高级功能与生态系统
  • P8627 [蓝桥杯 2015 省 A] 饮料换购
  • Linux用户切换命令区别详解
  • 【JDBC-54】JDBC:Java数据库连接的桥梁与核心特性解析
  • 进度计划频繁变更,如何稳定推进
  • 【含文档+PPT+源码】基于微信小程序的小区物业收费管理系统