博通集成 ARMINO SMP开发框架 Logo
  • AI 解决方案简介
  • 快速入门
  • H/W 参考
  • 开发者指南
    • 目录
      • Audio Engine 模块
      • Video Engine 模块
      • Network Transfer 模块
      • App Event 模块
      • Countdown 模块
      • Dual Screen AVI Player 模块
      • Factory Config 模块
      • Key App 模块
      • LED Blink 模块
        • 模块简介
        • 工作流程
        • 重要接口
        • 主要宏定义
        • 使用示例
        • 注意事项
      • Motor 模块
  • 参考工程
  • 第三方工程
博通集成 ARMINO SMP开发框架
  • »
  • AI Solution 开发者指南 »
  • LED Blink 模块
  • 查看页面源码

LED Blink 模块

[English]

模块简介

LED Blink 是一个 LED 灯效控制模块,提供了丰富的 LED 状态控制和闪烁效果。该模块支持多个 LED 的独立控制,包括常亮、常灭、快闪、慢闪、交替闪烁等多种状态,并支持错误优先级管理和闪烁时长控制。该模块封装了 GPIO 控制、定时器管理和状态机逻辑,为上层应用提供简单的 LED 控制接口。

核心特性

  • 多 LED 支持: 支持最多 4 个 LED 独立控制

  • 多种状态: 支持常亮、常灭、快闪、慢闪、交替闪烁

  • 错误优先级: 支持错误类型优先级管理(严重错误 > 警告)

  • 时长控制: 支持设置闪烁持续时间

  • 状态投票: 支持多个状态源投票,自动选择最高优先级状态

  • 线程安全: 使用互斥锁保护 LED 操作

模块架构

LED Blink 模块架构如下:

应用层 (Application)
        ↓
LED App API (led_app.h)
        ↓
LED Blink API (led_blink.h)
        ↓
LED 控制块 (LedControlBlock)
        ↓
GPIO 控制 (bk_gpio)
        ↓
LED 硬件

工作流程

初始化流程

led_driver_init() 详细流程:

1. 初始化互斥锁
    - rtos_init_mutex(&led_mutex)
    ↓
2. 清零 LED 控制块数组
    - memset(led_pool, 0, sizeof(led_pool))
    ↓
3. 注册红色 LED
    - led_register(RED_LED)
    ↓
4. 注册绿色 LED
    - led_register(GREEN_LED)
    ↓
初始化完成

LED 状态设置流程

led_app_set() 详细流程:

1. 解析操作类型
    - 根据 led_operate_t 确定 LED 和状态
    ↓
2. 获取 LED 句柄
    - 根据操作类型获取对应的 LED 句柄
    ↓
3. 设置 LED 状态
    - led_set_state(led_handle, new_state, time)
    ↓
4. 更新控制块
    - 更新 LedControlBlock 结构
    - 设置闪烁间隔和持续时间
    ↓
5. 启动定时器
    - 如果为闪烁状态,启动定时器
    ↓
状态设置完成

LED 闪烁流程

定时器回调流程:

1. 定时器到期触发回调
    - timer_callback(led_handle)
    ↓
2. 检查持续时间
    - 如果设置了持续时间且已到期,停止闪烁
    ↓
3. 检查错误状态
    - 如果存在错误,按错误优先级闪烁
    ↓
4. 切换 LED 状态
    - 翻转 led_status
    - 更新 GPIO 输出
    ↓
5. 继续定时器
    - 如果未到期,继续定时器
    ↓
循环步骤 1-5

LED 状态投票流程

led_blink() 详细流程:

1. 处理指示状态(绿色 LED)
    - 检查 indicates_state 位掩码
    - 按优先级选择状态
    ↓
2. 处理警告状态(红色 LED)
    - 检查 warning_state 位掩码
    - 按优先级选择状态
    ↓
3. 应用状态
    - 调用 led_app_set() 设置 LED 状态
    ↓
状态更新完成

重要接口

初始化接口

/**
 * @brief 初始化 LED 驱动
 *
 * 初始化互斥锁,注册红色和绿色 LED
 */
void led_driver_init(void);

LED 控制接口

/**
 * @brief 设置 LED 状态
 *
 * @param oper LED 操作类型
 * @param time 持续时间(毫秒),0xFFFFFFFF 表示永久
 */
void led_app_set(led_operate_t oper, uint32_t time);

/**
 * @brief LED 状态投票
 *
 * 根据警告状态和指示状态自动选择 LED 状态
 *
 * @param warning_state 警告状态位掩码指针
 * @param indicates_state 指示状态位掩码
 */
void led_blink(uint32_t *warning_state, uint32_t indicates_state);

LED 状态类型

typedef enum {
    LED_OFF = 0,        // 关闭
    LED_ON,             // 常亮
    LED_FAST_BLINK,      // 快闪
    LED_SLOW_BLINK,      // 慢闪
    LED_ALTERNATE       // 交替闪烁
} LedState;

LED 操作类型

typedef enum {
    // 绿色 LED
    LED_OFF_GREEN,
    LED_ON_GREEN,
    LED_FAST_BLINK_GREEN,
    LED_SLOW_BLINK_GREEN,

    // 红色 LED
    LED_OFF_RED,
    LED_ON_RED,
    LED_FAST_BLINK_RED,
    LED_SLOW_BLINK_RED,

    // 交替闪烁
    LED_REG_GREEN_ALTERNATE,
    LED_REG_GREEN_ALTERNATE_OFF,

    // 错误状态
    LED_ERROR_CRITICAL,
    LED_ERROR_WARNING,
    LED_ERROR_CRITICAL_CLOSE,
    LED_ERROR_WARNING_CLOSE,
} led_operate_t;

警告状态定义

enum {
    WARNING_PROVIOSION_FAIL,      // 配网失败(快闪红色)
    WARNING_WIFI_FAIL,            // Wi-Fi 失败(快闪红色)
    WARNING_RTC_CONNECT_LOST,     // RTC 连接丢失(快闪红色)
    WARNING_AGENT_OFFLINE,        // Agent 离线(快闪红色)
    WARNING_AGENT_AGENT_START_FAIL, // Agent 启动失败(快闪红色)
    WARNING_LOW_BATTERY,          // 低电量(慢闪红色)
};

指示状态定义

enum {
    INDICATES_WIFI_RECONNECT,     // Wi-Fi 重连(快闪绿色)
    INDICATES_PROVISIONING,       // 配网中(红绿交替)
    INDICATES_POWER_ON,           // 上电(常亮绿色)
    INDICATES_STANDBY,             // 待机(慢闪绿色)
    INDICATES_AGENT_CONNECT,      // Agent 连接(快闪绿色)
};

主要宏定义

配置宏

// 启用 LED Blink 模块
CONFIG_LED_BLINK=y

硬件配置

// LED GPIO 定义
#define RED_LED   40   // 红色 LED GPIO
#define GREEN_LED 41   // 绿色 LED GPIO

// LED 数量限制
#define MAX_LED_NUM 4

闪烁时间配置

// 快闪间隔(毫秒)
#define LED_FAST_BLINK_TIME 200

// 慢闪间隔(毫秒)
#define LED_SLOW_BLINK_TIME 1000

// 永久闪烁
#define LED_LAST_FOREVER 0xFFFFFFFF

使用示例

基本使用

#include "led_app.h"

void example_usage(void)
{
    // 初始化 LED
    led_driver_init();

    // 设置绿色 LED 快闪
    led_app_set(LED_FAST_BLINK_GREEN, LED_LAST_FOREVER);

    // 设置红色 LED 慢闪 5 秒
    led_app_set(LED_SLOW_BLINK_RED, 5000);

    // 关闭绿色 LED
    led_app_set(LED_OFF_GREEN, 0);
}

状态投票使用

void state_voting_example(void)
{
    uint32_t warning_state = 0;
    uint32_t indicates_state = 0;

    // 设置警告状态
    warning_state |= (1 << WARNING_WIFI_FAIL);

    // 设置指示状态
    indicates_state |= (1 << INDICATES_STANDBY);

    // 自动选择 LED 状态
    led_blink(&warning_state, indicates_state);
    // 结果:红色快闪(警告优先级高于指示)
}

注意事项

  1. 状态优先级: 警告状态优先级高于指示状态,严重错误优先级高于警告

  2. 闪烁间隔: 快闪间隔 200ms,慢闪间隔 1000ms,可在头文件中修改

  3. 状态投票: 使用 led_blink() 时,会自动根据优先级选择状态

上一页 下一页

© 版权所有 2020 - 2026 博通集成电路(上海)股份有限公司。 更新时间: 2026-03-28 14:30:32 .

利用 Sphinx 构建,使用了 主题 由 Read the Docs开发.