时间:2024-08-03人气:作者:佚名

说明前面讲到用通讯解析框架一般mcu或者其他的嵌入式系统或多或少涉及到通讯不光有各种各样的字节指令还有字符串指令比如本文要讲的AT指令很多模块都涉及使用at指令作为指令集去做命令比如电话模块wifi模块蓝牙模块等等一般at指令解析比较繁琐如果用到统一的框架做解析呢
注通讯解析框架的介绍可以看之前我写的文章内容这里不再赘述
下面我们着重讲解使用通讯解析框架解析at指令
以汉枫wifi模块为例
h框架文件
typedefstruct
U8Readbuf读内容
U16BufLen读内容长度
U8isUp主动上传还是下载
intYALWifiCmdPos其他命令位置
YALWifiCmdPM读数据地址
typedefstruct
constcharBufat内容
U8HandleYALWifiCmdPMbuf长度
U16GetID获取的CMDId
YALWifiCMDHandle读数据框架结构
enum
YALWIFICMDGETENTERAT1进入AT
YALWIFICMDGETANAENTERAT应答进入AT
YALWIFICMDSETCLOSESHOWAT关闭回显
C内容文件
U8GetYALWIFIEnterAtYALWifiCmdPMCmdPm
U8GetYALWIFIAckEnterAtYALWifiCmdPMCmdPm
U8GetYALWIFICloseShowAtYALWifiCmdPMCmdPm
U8YALWIFILINKENDr结尾
获取指令
constU8YALWIFIREQAT
constYALYALWifiCMDHandleYALWIFICmdhandle
GetYALWIFIEnterAtYALWIFICMDGETENTERAT进入AT
aGetYALWIFIAckEnterAtYALWIFICMDGETANAENTERAT应答AT
EGetYALWIFICloseShowAtYALWIFICMDSETCLOSESHOWAT关闭回显
intYALWifiCMDfindCmdPosU16Cmd
inti
U8CmdCtsizeofYALWIFICmdhandlesizeofYALWIFICmdhandle0
fori0iisGet
returnYALWIFIReadCMDCmdPmYALWifiCmdPos
else
ifStrcmpCmdPmReadbufU8a1
err0
returnerr
函数名称GetYALWIFIMacID
描述获取WiFi版本号和MACID
输入形参
返回值无
U8GetYALWIFIAckEnterAtYALWifiCmdPMCmdPm
u8err1
ifCmdPmisGet
returnYALWIFIReadCMDCmdPmYALWifiCmdPos
else
ifYALWifiCmdisOkCmdPmReadbuf
SetAtMode1
err0
returnerr
函数名称GetYALWIFICloseShowAt
描述关闭回显
输入形参
返回值无
U8GetYALWIFICloseShowAtYALWifiCmdPMCmdPm
u8err1
ifCmdPmisGet
U8infostr10
转义字符处理
memsetinfostr0sizeofinfostr
sprintfscharinfostrsizeofinfostroffsYALWIFILINKEND
strcatcharinfostrcharYALWIFILINKEND
returnYALWIFIReadWriteCMDCmdPmYALWifiCmdPosinfostr
else
ifYALWifiCmdisOkCmdPmReadbuf
err0
returnerr
函数名称YALWIFIReadCMD
描述读WiFi指令
输入形参YALWifiCmdPos列表位置
返回值0成功1失败
u8YALWIFIReadCMDintYALWifiCmdPos
ifCheckCmdPosYALWifiCmdPosreturn0
memcpySENDBUFYALWIFICmdhandleYALWifiCmdPosBufstrlencharYALWIFICmdhandleYALWifiCmdPosBuf
USART1SendStringSENDBUFstrlencharSENDBUF
return0
intYALWifiCMDfindCmdPosU16Cmd
inti
U8CmdCtsizeofYALWIFICmdhandlesizeofYALWIFICmdhandle0
fori0iCmdCti
ifCmdYALWIFICmdhandleiGetIDreturni
return1
解析at指令将字符串数据内容解析到该函数中
U8YALAnaDatarevcmdU8BufU16BufLen
intYALWifiCmdPos
YALWifiCmdPMcmdPm
YALWifiCmdPosYALWifiCMDfindCmdPosGetLastCmdId上一次请求的内容
ifCheckCmdPosYALWifiCmdPosreturn1
cmdPmReadbufBuf
cmdPmBufLenBufLen
cmdPmYALWifiCmdPosYALWifiCmdPos
cmdPmisGet0
returnYALWIFICmdhandleYALWifiCmdPosHandlecmdPm回调函数
发送cmd消息通过CMDId请求对应的at指令
voidYALWifiCMDSetCmdU16Cmd
intWifiCmdPos
YALWifiCmdPMcmdPm
cmdPmReadbufSendBuf
cmdPmBufLen0
cmdPmisGet1
WifiCmdPosWifiCMDfindCmdPosCmd
ifWifiCmdPos1return
ifCheckCmdPosWifiCmdPosreturn
cmdPmWifiCmdPosWifiCmdPos
YALWIFICmdhandleWifiCmdPosHandlecmdPm
SetLastCmdIdYALWIFICmdhandleWifiCmdPosGetID
总结通过框架将AT指令的头尾等公共部分作为框架一部分可变的内容部分作为识别的内容实体用于解析和发送比如作为识别码ATE中的E作为识别码
识别解析的内容通过各种的handle回调处理当发送一条AT指令对应的回一条AT指令解析和发送对应LastCmdId的关系去解对应的回应的AT指令内容当然AT指令多变本文只是
抛砖引玉可相互交流欢迎评论转发加关注
垂叶榕生长旺盛期应经常浇水,保持湿润状态,并经常向叶面和周围空间喷水,以促进植株生长,提高叶片光泽。冬季盆土过湿容易烂根,须待盆干时再浇水。
(6)人喜欢2025-12-25
垂叶榕四季常青,枝条柔软,是目前非常流行的室内外观叶植物。垂叶榕的环境适应能力较强,并且具有很高的环境净化能力,非常适合室内种植。下面就为你介绍一下垂叶榕的
(6)人喜欢2025-12-25
垂叶榕为常绿乔木,高可达6米,盆栽市场呈灌木状。幼枝淡绿色,后呈灰白色或棕褐色,树干易生气生根,小枝柔软下垂。喜高温湿润褐光亮的环境,忌低温干燥,耐阴性强,
(6)人喜欢2025-12-25
我们喜欢盆栽,也要注意盆栽和家居的风格搭配。有时一盆亮眼的花卉可以让整个家变得生动可爱,有时一盆清新的花卉可以让家人变得身心舒畅。红运当头就是这样一款深受人
(6)人喜欢2025-12-18
垂叶榕生长旺盛期应经常浇水,保持湿润状态,并经常向叶面和周围空间喷水,以促进植株生长,提高叶片光泽。冬季盆土过湿容易烂根,须待盆干时再浇水。
(6)人喜欢2025-12-25
垂叶榕四季常青,枝条柔软,是目前非常流行的室内外观叶植物。垂叶榕的环境适应能力较强,并且具有很高的环境净化能力,非常适合室内种植。下面就为你介绍一下垂叶榕的
(6)人喜欢2025-12-25
垂叶榕为常绿乔木,高可达6米,盆栽市场呈灌木状。幼枝淡绿色,后呈灰白色或棕褐色,树干易生气生根,小枝柔软下垂。喜高温湿润褐光亮的环境,忌低温干燥,耐阴性强,
(6)人喜欢2025-12-25
我们喜欢盆栽,也要注意盆栽和家居的风格搭配。有时一盆亮眼的花卉可以让整个家变得生动可爱,有时一盆清新的花卉可以让家人变得身心舒畅。红运当头就是这样一款深受人
(6)人喜欢2025-12-18