LiteOS通信模组教程04-深度剖析LiteOS的AT框架

本文深入探讨了LiteOS中的AT客户端框架,解释了为何需要AT客户端框架,并详细剖析了串口驱动和AT客户端框架的实现。通过示例展示了如何使用框架发送AT指令、接收返回结果并提取有效信息,为物联网设备与模组通信提供便利。
摘要由CSDN通过智能技术生成

1. AT客户端框架

在之前的三篇教程中,我们都是直接使用串口助手发送AT指令与模组通信,本篇教程就来探索一下如何使用 MCU 中的串口模组交互。

什么是AT客户端

在使用AT指令的时候,直接发送AT指令的一端称为客户端(AT Client),接收AT指令并返回响应的一端称为服务端(AT Server)。

ESP8266、M26、BC35-G这些通信模组都是接收我们发送的AT指令,所以称为AT命令服务端,MCU 需要向模组主动发送AT指令,称为AT客户端,它们之间的通信架构如下:

AT命令通信架构

为什么需要AT客户端框架

首先来看上图中的三个数据流:

  • 发送AT指令:可以直接调用HAL库提供的API发送,AT框架并无太大作用;
  • 等待接收返回结果:可以直接调用HAL库的API使用中断方式接收;
  • 接收服务端主动发送的数据:可以直接调用HAL库的API使用中断方式接收;

三条数据流都可以调用HAL库的API直接实现呀,为什么要设计一层AT框架呢?

在直接调用HAL库实现的时候,首先无法保证每次模组向 MCU 发送的数据都能完整的被接收,所以,我们需要设计一层串口驱动以保证数据在任何时候都可以被完整的接收进缓冲区

其次,在接收数据之后,难点在于对数据的处理,判断AT指令发送的数据是不是正常的返回结果,从返回结果中提取有效信息等等,这些如果每条指令接收之后,都去写代码依次判断,代码量陡增暂且不说,编程的难度也是直接上升,所以,我们需要基于串口驱动,在保证数据被完整接收的前提之上,再根据AT命令通信的特点,设计一层AT框架,专门负责解析数据,提取有效信息

2. 剖析串口驱动框架实现

串口驱动直接使用LiteOS提供的驱动框架实现,由于其特殊性,最底层的驱动框架实现文件放在了工程目录中,调用HAL库提供的API实现:

串口驱动实现文件

uart_at.c文件中,主要完成了两个功能:

  • 串口初始化
  • 实现串口驱动框架的读写,并注册串口设备到系统中

2.1. 串口初始化

串口初始化函数的调用架构如图:

串口初始化函数架构

其中默认初始化的是LPUART1,如果将其它串口作为AT指令的串口,修改这两行代码即可:

修改AT默认串口

2.2. ring_buffer

ring_buffer是专门实现的用户存放接收数据的缓冲区,用户只需要调用read和write操作缓冲区即可,其实现文件在iot-link SDK的IoT_LINK_1.0.0\iot_link\link_misc路径下:

ring_buffer源码

ring_buffer在串口初始化函数中被调用初始化:

ring_buffer初始化

缓冲区大小在宏定义中声明:

ring_buffer大小

初始化之后,向LiteOS注册的中断服务函数只需要调用ring_buffer_write向缓冲区不停的写入接收到的数据,即可保证串口数据被完整的接收

2.3. 串口驱动框架实现

串口驱动框架中,因为已经有了初始化函数,所以只需要实现read函数和write函数即可,实现的函数架构如下:

串口驱动框架

因为数据全部保存在了ring_buffer中,所以串口驱动的read API实现用缓冲区提供的读取函数实现即可。

实现read和write两个函数之后,调用如下的宏定义,即可将设备和驱动注册到系统中:

OSDRIV_EXPORT(uart_at_driv,CONFIG_AT_DEVICENAME,(los_driv_op_t *)&s_at_op,NULL,O_RDWR);

CONFIG_AT_DEVICENAME由用户指定,不重复即可,在iot_link_config.h文件中,稍后会讲解。

3. 剖析AT客户端框架

AT客户端框架的实现源码在SDK的IoT_LINK_1.0.0\iot_link\at文件夹下:

AT框架源码

AT框架的架构如下:

AT框架架构

如图,因为串口设备已经注册到了系统中,所以AT框架的底层发送和接收函数直接调用LiteOS设备驱动框架提供的API实现,除了上述图中的这些,还涉及到大量的使用信号量、互斥锁、字符串比较等函数进行AT指令匹配处理,提取结果的代码,这些不是理解AT框架的重点,所以图中未给出

在实现了AT框架之后,最终留给用户使用的接口只要三个,即可完成AT指令的交互,非常简洁:

  • at_init:初始化AT框架,启动AT数据接收引擎(优先级为10)
  • at_command:发送AT指令并匹配指定的返回结果
  • at_oobregister:监控AT主动上报的数据

接下来,我们以ESP8266模组入网为例,讲述如何使用AT框架提供的简洁API与模组交互。

4. AT客户端框架的使用

AT框架使能及配置

经过上面的讲解,完整的AT框架其实包括设备驱动框架和AT框架实现两部分,所以首先需要在配置文件中使能驱动框架和AT框架

打开之前新建的HelloWorld工程(如果没有可以参考之前的教程新建一个HelloWorld工程),在.sdkconfig中进行配置,如图:

本课程《华为物联网操作系统LiteOS》是朱老师物联网大讲堂推出的一套物联网理论和实践相结合的视频课程。本课程以渐次递进的方式讲了以下4个主题。主题1:物联网,这是整个课程第1部分。主要讲了物联网的概念、发展历程、物联网的典型案例和应用场景,从技术角度深度阐述了物联网的4层架构、分析了各层次的核心技术和实现原理。本部分的主要目的是让大家对物联网有一定深度和专业性的理解。很多人一直对物联网有兴趣,也找了不少资料看了不少书,但是越看越糊涂,尤其很多物联网专业的大学生,经过几年的大学学习仍然不知道究竟什么是物联网,更不知该如何去学习物联网,本部分就是为解决这个疑问而生。主题2:操作系统,这是整个课程第2部分。主要讲了操作系统的基本原理,操作系统的作用和组成部分,让我们明白裸机开发和基于操作系统的开发有什么差异。这部分是比较偏理论的,是为了解决很多同学对操作系统的认知基础的。很多同学甚至是开发者,尤其是单片机的开发者习惯了裸机开发,直接基于寄存器或者官方库函数(譬如stm32的HAL库、标准库)的开发,心里很疑惑到底什么是操作系统,为什么裸机开发也能做项目还需要操作系统?用不用操作系统的差异在哪里?为什么要去学习操作系统?应该如何学习操作系统?本部分就是为了回答这些问题。主题3:物联网操作系统,这是整个课程的的3部分。物联网操作系统是专为物联网而研发和设计的操作系统,是物联网设备的核心技术。物联网操作系统也是一种操作系统,他具有操作系统的普遍特性(以前前面我们才先学习泛性的普遍的操作系统),但是物联网操作系统有它很多独特的特性,华为的LiteOS就是一款非常典型的优秀的物联网操作系统,除此之外国内还有诸如RT-Thread、AliOSThings等其他优秀物联网操作系统,国外还有Amazon的Freertos等物联网操作系统。那究竟物联网操作系统有什么特别之处?物联网产品如何选择操作系统?如何基于操作系统来开发物联网产品?本部分课程将回答这些问题。主题4:华为物联网操作系统LiteOS,这是整个课程的第4部分。本部分聚焦LiteOS,基于前3部分的铺垫,向大家详细讲解LiteOS的设计思路,专门安排了2大章节来详细分析LiteOS的kernel源码和周边组件源码,还介绍了我们专为学习物联网而设计的NB476开发板,且基于该开发板和LiteOS设计了一个温湿度和断电检测报警器的典型的物联网产品试验,在试验实战中让大家体会基于LiteOS物联网项目的开发方式。本部分是整个课程中最重头戏的部分,篇幅占据整个课程的一半左右。因此实际上我们整个课程的内容还是比较偏技术性的,可谓低走高开。从基础概念起步,最终带大家能够去做产品。课程特色*完全零基础,降低学习门槛。*深入浅出,通俗易懂。不怕学不会,就怕你不学习。*思路清晰、语言风趣,对着视频看也不会想睡觉······*视频 + 文档 + 练习题 + 答疑,全方位保证学习质量。*基础知识 + 思路引导的教学方式,授之以鱼更授之以渔。*系列课程。本教程只是入门篇,后续还有更多更精彩视频更新中。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值