【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]