赞
踩
在之前的三篇教程中,我们都是直接使用串口助手发送AT指令与模组通信,本篇教程就来探索一下如何使用 MCU 中的串口模组交互。
在使用AT指令的时候,直接发送AT指令的一端称为客户端(AT Client),接收AT指令并返回响应的一端称为服务端(AT Server)。
ESP8266、M26、BC35-G这些通信模组都是接收我们发送的AT指令,所以称为AT命令服务端,MCU 需要向模组主动发送AT指令,称为AT客户端,它们之间的通信架构如下:
首先来看上图中的三个数据流:
发送AT指令:可以直接调用HAL库提供的API发送,AT框架并无太大作用;
等待接收返回结果:可以直接调用HAL库的API使用中断方式接收;
接收服务端主动发送的数据:可以直接调用HAL库的API使用中断方式接收;
三条数据流都可以调用HAL库的API直接实现呀,为什么要设计一层AT框架呢?
在直接调用HAL库实现的时候,首先无法保证每次模组向 MCU 发送的数据都能完整的被接收,所以,我们需要设计一层串口驱动以保证数据在任何时候都可以被完整的接收进缓冲区。
其次,在接收数据之后,难点在于对数据的处理,判断AT指令发送的数据是不是正常的返回结果,从返回结果中提取有效信息等等,这些如果每条指令接收之后,都去写代码依次判断,代码量陡增暂且不说,编程的难度也是直接上升,所以,我们需要基于串口驱动,在保证数据被完整接收的前提之上,再根据AT命令通信的特点,设计一层AT框架,专门负责解析数据,提取有效信息。
串口驱动直接使用LiteOS提供的驱动框架实现,由于其特殊性,最底层的驱动框架实现文件放在了工程目录中,调用HAL库提供的API实现:
uart_at.c文件中,主要完成了两个功能:
串口初始化
实现串口驱动框架的读写,并注册串口设备到系统中
串口初始化函数的调用架构如图:
其中默认初始化的是LPUART1,如果将其它串口作为AT指令的串口,修改这两行代码即可:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。