硬汉嵌入式论坛

 找回密码
 立即注册
查看: 7607|回复: 10
收起左侧

[有问必答] 请问大家在串口中如何解析GSM模块,WIFI模块等AT命令的返回值呢?

[复制链接]

20

主题

249

回帖

309

积分

高级会员

积分
309
发表于 2016-6-2 21:54:20 | 显示全部楼层 |阅读模式
如题,对GSM模块的AT命令返回值处理一直没找到一个很通用,简洁的方法,最近又要操作一个wifi模块,它也有类似的AT命令,故来和大家讨论下,类似各种AT命令的返回值,大家是怎么处理的呢?

例如如下几个AT命令,返回值各式各样,怎么对返回值做一个通用的处理、判断的方法呢?
AT
OK

AT+CSQ
+CSQ: 20,5

AT+CPIN?
+CPIN: READY

AT+CGSN
012345678901234
OK


下面是我以前使用的方法:根据\r\n判断一帧数据结束后,再倒着往后判断相关的字符,从而判断相关的返回值。这样做比较麻烦,需要对每个AT的返回值做判断
  1. u8 index=0;
  2. void USART2_IRQHandler(void)
  3. {
  4.     u8 res=0;
  5.   static u8 RxBuffer[RxBuffer_Length]={0};
  6.   if(USART2->SR & (1<<5))
  7.   {
  8.     res=USART2->DR;
  9.     RxBuffer[index++]=res;
  10.     //收到<CRLF>OK<CRLF>
  11.     if((RxBuffer[index-4]=='O')&&(RxBuffer[index-3]=='K')
  12.      &&(RxBuffer[index-2]==0x0D)&&(RxBuffer[index-1]==0x0A))
  13.     {
  14.       index=0;
  15.       RX_OK=1;
  16.       for(u8 k=0;k<RxBuffer_Length;k++)
  17.         RxBuffer[k]=0;
  18.     }
  19.     //收到ERROR<CRLF>
  20.     if((RxBuffer[index-7]=='E')
  21.      &&(RxBuffer[index-6]=='R')&&(RxBuffer[index-5]=='R')
  22.      &&(RxBuffer[index-4]=='O')&&(RxBuffer[index-3]=='R')
  23.      &&(RxBuffer[index-2]==0x0D)&&(RxBuffer[index-1]==0x0A))
  24.     {
  25.       index=0;
  26.       ATERROR=1;
  27.       for(u8 k=0;k<RxBuffer_Length;k++)
  28.         RxBuffer[k]=0;
  29.     }
  30.   }
  31. }
复制代码
下面是另一种方法:使用strstr函数:收完一帧数据后直接用字符串处理的方式比较返回值
  1. if ((strstr((char *)RxBuffer, "OK")))
复制代码


问:大家是怎么处理AT命令的返回值呢?
回复

使用道具 举报

14

主题

109

回帖

151

积分

初级会员

积分
151
发表于 2016-6-3 09:08:52 | 显示全部楼层
可以参考 ESP8266 的例程
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
 楼主| 发表于 2016-6-3 09:19:36 | 显示全部楼层

回 ptiinngg 的帖子

ptiinngg:可以参考 ESP8266 的例程 (2016-06-03 09:08) 
谢谢回复

这个东西在哪里有呢
回复

使用道具 举报

14

主题

109

回帖

151

积分

初级会员

积分
151
发表于 2016-6-3 09:34:51 | 显示全部楼层
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=1285
V5 高级篇例程: V5-131a_ESP8266串口WIFI模块例程(测试AT指令)(V1.2a)
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
 楼主| 发表于 2016-6-3 09:39:57 | 显示全部楼层

回 ptiinngg 的帖子

ptiinngg:https://forum.anfulai.cn/forum.php?mod=viewthread&tid=1285
V5 高级篇例程: V5-131a_ESP8266串口WIFI模块例程(测试AT指令)(V1.2a) (2016-06-03 09:34) 
谢谢

正在乐鑫的官网下8266的资料呢
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
 楼主| 发表于 2016-6-3 12:22:56 | 显示全部楼层

回 ptiinngg 的帖子

ptiinngg:https://forum.anfulai.cn/forum.php?mod=viewthread&tid=1285
V5 高级篇例程: V5-131a_ESP8266串口WIFI模块例程(测试AT指令)(V1.2a) (2016-06-03 09:34) 
这个例程中使用的是memcmp来解析的

看来大家都用库函数来比较或搜索相关的字符串了
回复

使用道具 举报

100

主题

275

回帖

575

积分

金牌会员

积分
575
发表于 2016-6-3 13:54:04 | 显示全部楼层
用字符串比较就好
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
 楼主| 发表于 2016-6-3 15:49:23 | 显示全部楼层

回 zerone 的帖子

zerone:用字符串比较就好 (2016-06-03 13:54) 
嗯,可以试试

谢谢
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
 楼主| 发表于 2016-6-6 10:11:55 | 显示全部楼层
硬汉哥怎么看呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2016-6-8 00:52:16 | 显示全部楼层

回 小狐狸 的帖子

小狐狸:硬汉哥怎么看呢?
 (2016-06-06 10:11) 
参考我们板子的配套的例子那种方式就行,GPRS和WIFI模块我都还没怎么用过,后面我也用用看。
回复

使用道具 举报

20

主题

249

回帖

309

积分

高级会员

积分
309
 楼主| 发表于 2016-6-8 17:03:47 | 显示全部楼层

回 eric2013 的帖子

eric2013:参考我们板子的配套的例子那种方式就行,GPRS和WIFI模块我都还没怎么用过,后面我也用用看。 (2016-06-08 00:52) 
好的,谢谢啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 03:37 , Processed in 0.046220 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表