eefocus_4062187 发表于 2026-6-17 21:20:21

【Telink - 泰凌 TL322X 开发板】蓝牙广播

# 【Telink - 泰凌 TL322X 开发板】蓝牙广播

本文介绍了 Telink 泰凌 TL322X 开发板结合官方示例工程实现低功耗蓝牙广播的项目设计,包括硬件连接、工程加载、流程图、关键代码、效果演示等流程。

## 项目介绍

使用 TL322X 开发板实现低功耗蓝牙广播的项目设计。

- 准备工作:硬件连接、环境搭建、APP安装;
- 工程测试:加载例程、功能分析;
- 蓝牙广播:流程图、工程代码、编译上传、效果演示。

## 硬件连接

- 使用 Type-C 数据线连接调试器接口和电脑;

!(//www.qjumbo.com/forum/data/attachment/forum/202606/17/212007g4huxmqa3mzc534r.jpg)



## 环境搭建

使用VSCode 扩展实现开发环境部署。

开发工具安装可采用线上安装或离线安装方案。

- 下载 (https://www.telink-semi.cn/development-tools) 离线安装包进行安装;
- 安装完成后, VSCode 扩展可自动加载所需工具,如Cmake、工具链等。

详见:[【Telink - 泰凌 TL322X 开发板】介绍、环境搭建、工程测试](//www.qjumbo.com/forum/thread-235569-1-1.html) .

## 工程加载

- 打开 VS Code 软件,文件 - 打开文件夹,选择下载的 TL_BLE_SDK 文件夹路径;
- 展开并选择 322X 型号,选择 `acl_peripheral_demo` ,加载 app.c 文件;

!(//www.qjumbo.com/forum/data/attachment/forum/202606/17/211948f4q56n4ow4bnq6q6.jpg)



TL_BLE_SDK 提供了 3 个基础 Demo:

- **acl_peripheral_demo:** 广播,自身作为 Peripheral 被其他 Central 连接的参考代码,默认配置为 C0P4,使能 SMP,deep retention 休眠。
- **acl_central_demo:** 扫描,自身作为 Central 与其他 Peripheral 建立连接的参考代码,默认配置为 C4P0,使能 SMP,没有配置休眠。
- **acl_connection_demo:** 同时广播和扫描,自身可同时作为 Peripheral 或 Central 与其他设备连接的参考代码,默认配置为 C4P4,使能 SMP,Suspend 休眠。

## 功能介绍

- 基础 BLE 从机:可被手机搜索、连接、断开、GATT 读写 / 通知透传;
- 蓝牙安全:配对加密、绑定信息掉电保存;
- 无线升级 OTA:支持整机固件空中升级,带 Flash 防损坏保护;
- 低功耗完整方案:广播 / 连接休眠、深度休眠保留、按键唤醒;
- 硬件保护:锂电池低压锁机、Flash 固件上锁防擦除;
- 人机交互:LED 状态指示、矩阵按键输入;
- 完整日志调试体系,方便开发排错;
- 模块化分层架构:底层 BLE 事件、上层业务 GATT 完全解耦,开发者只需要在预留回调函数中添加自己的业务代码(传感器、透传、控制逻辑);

## 流程图

!(//www.qjumbo.com/forum/data/attachment/forum/202606/17/211806y4sg9l98i8oj77j1.jpg)



## 工程代码

展开工程目录,打开 `acl_peripheral_demo/main.c` 文件,代码如下

```c++
#include "tl_common.h"
#include "drivers.h"
#include "stack/ble/ble.h"
#include "app.h"

#if (FREERTOS_ENABLE)
    #include "tlk_riscv.h"
    #include <FreeRTOS.h>
    #include <task.h>
    #include "app_freertos.h"
#endif

_attribute_ram_code_ void rf_irq_handler(void)
{
    DBG_CHN14_HIGH;

    blc_sdk_irq_handler();

    DBG_CHN14_LOW;
}
#if (FREERTOS_ENABLE)
PLIC_ISR_REGISTER_OS(rf_irq_handler, IRQ_ZB_RT)
#else
PLIC_ISR_REGISTER(rf_irq_handler, IRQ_ZB_RT)
#endif

_attribute_ram_code_ void stimer_irq_handler(void)
{
    DBG_CHN15_HIGH;
    blc_sdk_irq_handler();
    DBG_CHN15_LOW;
}
#if (FREERTOS_ENABLE)
PLIC_ISR_REGISTER_OS(stimer_irq_handler, IRQ_SYSTIMER)
#else
PLIC_ISR_REGISTER(stimer_irq_handler, IRQ_SYSTIMER)
#endif

__INLINE void blc_app_system_init(void)
{
if (MCU_CORE_TYPE == MCU_CORE_TL321X)
    sys_init(DCDC_1P25_LDO_1P8, VBAT_MAX_VALUE_GREATER_THAN_3V6, INTERNAL_CAP_XTAL24M);
    pm_update_status_info(1);
    gpio_set_up_down_res(GPIO_SWS, GPIO_PIN_PULLUP_1M);
    wd_32k_stop();
    wd_stop();
    PLL_192M_CCLK_48M_HCLK_24M_PCLK_24M_MSPI_48M;
#else
    #error "Not Supported Chip!!!"
#endif
}

_attribute_ram_code_ int main(void)
{
    DBG_CHN0_LOW;
    blc_pm_select_internal_32k_crystal();

    blc_app_system_init();

    /* detect if MCU is wake_up from deep retention mode */
    int deepRetWakeUp = pm_is_MCU_deepRetentionWakeup(); //MCU deep retention wakeUp

    rf_drv_ble_init();

    gpio_init(!deepRetWakeUp);

    if (deepRetWakeUp) { //MCU wake_up from deepSleep retention mode
#if (FREERTOS_ENABLE)
      extern void vPortRestoreTick(void);
      vPortRestoreTick();
#endif
      user_init_deepRetn();
    } else { //MCU power_on or wake_up from deepSleep mode
      user_init_normal();
    }

    irq_enable();

#if (FREERTOS_ENABLE)
    app_TaskCreate();

    vTaskStartScheduler();
    while (1)
      ;
#else

    while (1) {
      main_loop();
    }
#endif
    return 0;
}
```

保存代码。

相关功能框架与函数定义位于 app.c 文件。

## 工程测试

智能手机安装 nRF Connect 应用,连接开发板蓝牙,获取相关设备信息。

!(//www.qjumbo.com/forum/data/attachment/forum/202606/17/211926yqpae4cpz5aqeobz.jpg)



### 设备广播

- 上电未连接时持续广播,手机蓝牙列表显示名称 `periph_demo`;
- 广播携带设备类型:通用遥控器图标(手机系统识别为遥控设备);
- 广播内置两个标准服务 UUID:电池服务 0x180F、健康测温服务 0x1812;
- 支持手机扫描设备时拉取扫描响应包,补全设备名称。

!(//www.qjumbo.com/forum/data/attachment/forum/202606/17/211903krfx5av58im580fz.jpg)



### 蓝牙连接

开发板未连接手机时,板载绿色 LED 点亮,表明设备当前处于广播状态;

!(//www.qjumbo.com/forum/data/attachment/forum/202606/17/211846czypvxpyw1dy2yyd.jpg)



手机点击设备建立连接:板载红色 LED 常亮;

!(//www.qjumbo.com/forum/data/attachment/forum/202606/17/211832ug3ckw3arfkq4g13.jpg)



> 内部逻辑:触发连接完成事件,打印日志、保存连接信息、主动请求 20ms 快速连接间隔;

手机手动断开 / 蓝牙关闭 / 超出通信距离超时断开:红色 LED 熄灭,设备自动重启广播等待重连;

> 内部区分三类断开原因:连接超时、手机主动断开、本地设备主动断开,日志打印断开根因。

### GATT 服务

代码内置完整 ATT/GATT 服务框架(`app_att.c` 存放自定义特征):

- 设备作为 BLE 服务端(Peripheral),预留所有读写、通知、指示的业务处理入口 `app_gatt_data_handler`;
- 手机蓝牙调试 APP(nRF Connect)可:
- 读取设备特征值;
- 向设备下发写指令;
- 开启通知 Notify,让设备主动上报数据给手机;
- 代码区分主机 / 从机双角色逻辑,可扩展设备同时作为主机连接其他蓝牙传感器。

### 人机交互

- LED:红灯 = 连接状态、蓝灯 = 低压告警;
- 矩阵按键 / 独立按键轮询扫描框架,可直接拓展按键控制业务;
- 休眠下按键可唤醒点点taptap安卓。

## 总结

本文介绍了 Telink 泰凌 TL322X 开发板结合官方示例工程实现低功耗蓝牙广播的项目设计,包括硬件连接、工程加载、流程图、关键代码、效果演示等流程,为相关产品的快速开发和应用设计提供了参考。

页: [1]
查看完整版本: 【Telink - 泰凌 TL322X 开发板】蓝牙广播

Baidu
map