本文主要记录 杰理蓝牙串口的使用,可通过两种方式实现串口数据接收
【杰理蓝牙开发】AC695x 串口使用
0. 个人简介 && 授权须知
📋 个人简介
- 💖 作者简介:大家好,我是喜欢记录零碎知识点的菜鸟打工人。😎
- 📝 个人主页:欢迎访问我的博客主页🔥
- 🎉 支持我:点赞👍+收藏⭐️+留言📝
- 📣 系列专栏:杰理蓝牙开发专栏 🍁 🍁
- 💬格言:写文档啊不是写文章,重要的还是直白!🔥
转载文章,禁止声明原创;不允许直接二次转载,转载请根据原文链接联系作者
若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
但对于未注明转载来源/原文链接的文章,我将保留追述的权利。作者:积跬步、至千里
1. 串口数据接收
1.1 方式1:通过串口中断回调函数接收数据
- 串口接收中断发生,打包 event ,包括 事件的类型,参数,值
sys_event_notify(&e);
,通知系统有事件A发生uart_event_handler()
,在应用层的串口事件处理函数中,解析数据- 如果事件A发生,
uart_bus->read
,读取数据 - 若果事件B发生,xxxxxxxxxxxxxxxxxxxxxxxx
- 如果事件A发生,
【代码架构】
u_arg.isr_cbfun = uart_isr_hook; // 串口中断回调函数接口
uart_bus = uart_dev_open(&u_arg); // 打开设备
static void uart_isr_hook(void *arg, u32 status)
{
if (status == UT_RX) {
// 打包事件信息参数
xxxxxxxxxxxxx
// 通知系统事件发生
sys_event_notify(&e);
}
}
// 应用层事件处理函数
static void uart_event_handler(struct sys_event *e)
{
if(事件A发生){
读取串口数据,打包处理
}
}
SYS_EVENT_HANDLER(SYS_DEVICE_EVENT, uart_event_handler, 0);
1.2 方式2:通过 freertos
的 task
接收串口数据
u_arg.isr_cbfun = uart_isr_hook; // 串口中断回调函数接口
uart_bus = uart_dev_open(&u_arg); // 打开设备
os_task_create(uart_u_task, (void *)uart_bus, 31, 512, 0, "uart_u_task"); //创建数据接收任务
static void uart_u_task(void *arg)
{
while(1){
// 读取数据,没有读取到数据时,阻塞信号量,不往下执行
uart_bus->read(uart_rxbuf, sizeof(uart_rxbuf), 0);
// 数据打包处理
xxxxxxxxxxxxxxxxxxxx
}
}