不断更新中
最好参考官方文件,路径:file:///E:/github/WeActStudio.WCH-BLE-Core/SDK/CH573EVT/EVT/EXAM/BLE/沁恒低功耗蓝牙软件开发参考手册.pdf
以下是我查看文件与程序之后,自己的理解
文件名称解读
文件/文件夹 | 含义 |
---|---|
App/peripheral_main.c | 函数main入口 |
App/app_usb.c | USB描述符与中断处理代码 |
App/peripheral.c | 蓝牙GAP以及蓝牙回调服务函数 |
HAL | 单片机外设操作函数 |
Profile/gattprofile.c | GATT 文件,负责通用属性配置 |
Profile/devinfoservice.c | 设备参数配置文件 |
Profile/ble_usb_service.c | 蓝牙的各种通信处理函数 |
TMOS操作系统 - 重要
低功耗蓝牙协议栈以及应用均基于 TMOS(Task Management Operating System),TMOS
是一个控制循环,通过 TMOS 可设置事件的执行方式。TMOS 作为调度核心,BLE 协议栈、
profile 定义、所有的应用都围绕它来实现。TMOS 不是传统意义上的操作系统,而是一种以
实现多任务为核心的系统资源管理机制。
TMOS系统是以RTC时钟作为基石,每次间隔625uS,扫描一次,判断哪些任务需要运行,不可抢占式的任务调度器
任务初始化
halTaskID = TMOS_ProcessEventRegister( HAL_ProcessEvent );
任务事件及事件的执行
在HAL_ProcessEvent中编写任务执行函数,需要注意执行函数运行时长不要太长,
运行
tmos_set_event( halTaskID, HAL_TEST_EVENT)
立即运行一次,运行tmos_start_task( halTaskID, HAL_TEST_EVENT, 1000 );
之后在1000*625us之后运行一次.通过过
return events ^ HAL_TEST_EVENT
;清除了 HAL_TEST_EVENT 标志。TMOS 数据传递
数据传递本来是很重要的内容,目前由于没有用到这个内容,暂时写不出来
蓝牙协议栈 - 重要
待整理
蓝牙数据流转
一、
1 |
|
二、
- 使用手机连接蓝牙设备之后,基本都是多个服务
service
,每个服务中包含多个特征Characteristic
1 | ``` |
三、
这里只说明一下```ble_usb_WriteAttrCB
1 | // 16-bit UUID |
四、蓝牙主机向从机写数据
代码中ble_usb_AppCBs = ble_usb_ServiceEvt
主要在函数void ble_usb_ServiceEvt(uint16_t connection_handle, ble_usb_evt_t *p_evt)
中,p_evt
,包含类型与数据,
在BLE_USB_EVT_BLE_DATA_RECIEVED
类型中,处理接收到的数据,
更详细的请查看源码
五、蓝牙从机向主机发送数据
1 | 1. void app_usb_notify(uint8_t *SendBuf, uint8_t l) |
蓝牙service
配置符解析
在<<沁恒低功耗蓝牙软件开发参考手册>>中第33页有官方详细说明
配置服务UUID
1 | const uint8_t ble_usb_ServiceUUID[ATT_BT_UUID_SIZE] = |
配置 GATT_PROP_NOTIFY
特征1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22static uint8 ble_usb_TxCharProps = GATT_PROP_NOTIFY;
static uint8 ble_usb_TxCharValue = 0;
const uint8_t ble_usb_TxCharUUID[ATT_BT_UUID_SIZE] =
{0xf1, 0xff};
{
{ATT_BT_UUID_SIZE, characterUUID},
GATT_PERMIT_READ,
0,
&ble_usb_TxCharProps},
{
{ATT_BT_UUID_SIZE, ble_usb_TxCharUUID},
0,
0,
(uint8 *)&ble_usb_TxCharValue},
{
{ATT_BT_UUID_SIZE, clientCharCfgUUID},
GATT_PERMIT_READ | GATT_PERMIT_WRITE,
0,
(uint8 *)ble_usb_TxCCCD},
配置 GATT_PROP_WRITE_NO_RSP
特征
static uint8 ble_usb_RxCharProps = GATT_PROP_WRITE_NO_RSP | GATT_PROP_WRITE;
const uint8_t ble_usb_RxCharUUID[ATT_BT_UUID_SIZE] =
{0xf2, 0xff};
static uint8 ble_usb_RxCharValue[1];
{
{ATT_BT_UUID_SIZE, characterUUID},
GATT_PERMIT_READ,
0,
&ble_usb_RxCharProps},
{
{ATT_BT_UUID_SIZE, ble_usb_RxCharUUID},
GATT_PERMIT_WRITE,
0,
&ble_usb_RxCharValue[0]},