安信可PB-03蓝牙模组入门之旅 二:SDK二次开发入门,认识架构,开始点亮一盏LED。
Posted 半颗心脏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安信可PB-03蓝牙模组入门之旅 二:SDK二次开发入门,认识架构,开始点亮一盏LED。相关的知识,希望对你有一定的参考价值。
- 本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
1、 安信可PB-03蓝牙模组入门之旅一:Windows SDK二次开发入门环境搭建,以及固件烧录。
2、 安信可PB-03蓝牙模组入门之旅 二:SDK二次开发入门,认识架构,开始点亮一盏LED。
文章目录
一、PB-03系列二次开发架构说明
1.1 模块启动流程
首先,要了解芯片的启动流程,如下图所示看到我手上的PB-03模组是支持OTA的,
⚫ ROM 部分:启动并引导-或者 Boot loader 或者 Application 和 BLE 协议栈 API,PB-03是没有 TM 引脚的,通过上电后特定的时间内配合上位机实现进去烧录模式。而像 PB-02模组,启动是通过 TM 管脚的高低电平选择编程模式(高电平)还是正常启动模式(低电平)。
⚫ OTA Boot loader:用于引导 Application 以及处理 OTA 升级。
⚫ Application:应用代码,绝大部分二次开发工作都集中在 Application 部分。
1.2 SDK介绍
可二次开发的 SDK 没有使用第三方的 RTOS,不过在应用层抽象了 Task 概念,对于 BLE 应用,以下 Task 是必须的,每个 Task 分别包括一个初始化函数和一个事件处理函数,具体说明请参考下资料文件《PHY62XX_SDK_Application_Guide_v1.0.pdf》。
Tasks (Task 初始化&Task 事件响应函数) 说明 | 说明 |
---|---|
LL_Init();LL_ProcessEvent(uint8, uint16) ; | Link layer 初始化和对应的事件处理函数。 |
HCI_Init();HCI_ProcessEven(uint8, uint16) ; | HCI 层初始化和对应的事件处理函数 。 |
L2CAP_Init();L2CAP_ProcessEvent(uint8, uint16) ; | L2CAP 初始化和对应的事件处理函数 。 |
GAP_Init();GAP_ProcessEvent(uint8, uint16) ; | GAP 初始化和对应的事件处理函数 。 |
LGATT_Init();GATT_ProcessEvent(uint8, uint16) ; | GATT初始化和对应的事件处理函数。 |
应用一般定义一到多个 Task,典型场景(例程)一般只用一个应用 Task。人机交互,外设 控制,BLE 广播和连接的配置,GATT Profile 的加载等事务都在应用 Task 实现。任务以内以及任务之间可以通过 OSAL 提供的 API 进行交互和通信。
二、快速入门,点亮一颗LED
- 首先我们打开 my_example/gpio 这个工程,找到任务分配函数
osalInitTasks();
,为了方便用户开发业务程序,每个业务要以一个 Task 单独存在,Task 的唯一标准用其 ID 组成,像下面这个的写法。
void osalInitTasks( void )
uint8 taskID = 0;
tasksEvents = (uint16*)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));
LL_Init( taskID++);
Blink_Init(taskID);
最重要的如何定义一个任务回调函数,注意这数组的的顺序,即每个子元素所在的下标,对应 osalInitTasks() 方法的任务传参顺序。
// The order in this table must be identical to the task initialization calls below in osalInitTask.
const pTaskEventHandlerFn tasksArr[] =
LL_ProcessEvent,
Blink_ProcessEvent,
;
任务使用,闪烁一盏LED。
void Blink_Init(uint8 task_id)
LOG("%s task_id=%d \\n", __FUNCTION__, task_id);
Blink_TaskID = task_id;
// LED 转换
hal_gpio_pin_init(LED_GPIO, OEN);
hal_gpio_write(LED_GPIO, 1);
osal_start_timerEx(Blink_TaskID, Blink_Task_EVT, 1000);
uint16 Blink_ProcessEvent(uint8 task_id, uint16 events)
//判断是否这个任务ID
if (task_id != Blink_TaskID)
return 0;
//判断所在的ID是否一致
if (events & Blink_Task_EVT)
// LED 转换
LED_Toggle(LED_GPIO);
//延迟一秒
WaitMs(1000);
LOG("%s \\n", __FUNCTION__);
osal_start_timerEx(Blink_TaskID, Blink_Task_EVT, 2000);
return (events ^ Blink_Task_EVT);
return 0;
另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈!
- phy6252 蓝牙Mesh学习demo汇总:https://github.com/xuhongv/PHY6252_6222_SDK
以上是关于安信可PB-03蓝牙模组入门之旅 二:SDK二次开发入门,认识架构,开始点亮一盏LED。的主要内容,如果未能解决你的问题,请参考以下文章
安信可PB-03蓝牙模组入门之旅 二:SDK二次开发入门,认识架构,开始点亮一盏LED。
安信可PB-03蓝牙模组入门之旅一:Windows SDK二次开发入门环境搭建,以及固件烧录。
安信可PB-03蓝牙模组专题 第一篇:SDK二次开发入门环境搭建。
安信可PB-03蓝牙模组专题 第一篇:SDK二次开发入门环境搭建。
安信可PB-03蓝牙模组专题 第一篇:SDK二次开发入门环境搭建。
5G WiFi 安信可 BW16 模组 RTL8720DN 入门笔记 2:Linux 搭建二次开发SDK开发环境,点亮一盏LED灯。