今天看了例程的实现文档,就是跟着BLE例程的那个文件,觉得BLE协议还是挺复杂的。但很高兴用到了ARM9,平时工作只是ARM7:
BLE的广播和连接,我想用下边两幅图说明:
广播:
连接:
至于怎么建立通讯机制PDF文档已经说很清楚了,这里不重复。
主要是通过程SERVICE和特征:
Service用于将数据分解为逻辑实体,并包含称为Characteristic的特定数据块。Service可以具有一个
或多个Characteristic,并且每个Service通过称为UUID的唯一数字ID将其自身与其他服务区分开来,
UUID可以是16位(对于正式采用的BLE服务)或128位(对于自定义服务)。
可以在Bluetooth Developer Portal的“Service”页面上看到正式采用的BLE服务的完整列表。 例
如,如果您查看心率服务,我们可以看到这个官方采用的服务具有0x180D的16位UUID,并且包含
多达3个Characteristic,但只有第一个是必需的:心率测量,身体传感器位置和心率控制点(Heart
Rate Measurement, Body Sensor Location and Heart Rate Control Point)。
我想把例程改一下,就是我可以输入0x03和0x04,这不也算是会了吗?(以前我都这么干,想先调通再说,可是有些东西到现在也没有用上,只是个知识贮备)
但我看到发语句时顿时蒙了:
static int gattc_write_req_ind_handler(ke_msg_id_t const msgid, struct gattc_write_req_ind const *param,
ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
struct gattc_write_cfm * cfm;
uint8_t status = GAP_ERR_NO_ERROR;
//Send AT command
if(uart_tp_mode_flag == false)
{
UART_SEND_DATA(AT_CMD_IO_SET, param->value[0]);
}
cfm = KE_MSG_ALLOC(GATTC_WRITE_CFM, src_id, dest_id, gattc_write_cfm);
cfm->handle = param->handle;
cfm->status = status;
ke_msg_send(cfm);
return (KE_MSG_CONSUMED);
}
那个AT_CMD_IO_SET的定义是:
#define AT_CMD_IO_SET "AT+IOSET%1u\r\n"
那么这个%1U是啥子意思?
坛子里的大老及大侠有知道的么????
附BLE例程说明:
本帖最后由 ddllxxrr 于 2022-8-13 10:56 编辑