为什么我的AT命令在GSM调制解调器中回显?

时间:2015-10-15 08:10:30

标签: c++ gsm at-command

我有一个GSM调制解调器并用putty测试它。有用。然后我用我的c ++程序发送AT,但调制解调器回复AT。它只是回应了我的命令,没有回答OK 这是我的代码:

sudo service apache2 restart

输出是这样的:

  

转到开放端口open_port:
  成功打开端口/ dev / ttyUSB0端口
  [root @ FriendlyARM /]#./SerialPort -qws
  open_port:成功打开端口/ dev / ttyUSB0
  开始阅读.....

我的错误在哪里?

3 个答案:

答案 0 :(得分:1)

您还没有终止字符串w,因此在write调用正常时,当您将其传递给cout时会出现未定义的行为 - 更改:

char w[4];
w[0]=65;
w[1]=84;
w[2]=13;
w[3]=10;
//sprintf(i,"2f9",k);
std::cout << w;
write(fd1,w,sizeof(w));

为:

char w[5];
w[0]='A';
w[1]='T';
w[2]=13;
w[3]=10;
w[4]=0;                  // <<<
//sprintf(i,"2f9",k);
std::cout << w;
write(fd1,w,strlen(w));  // <<<

或者可能更简洁:

char w[] = "AT\r\n"
std::cout << w;
write(fd1,w,strlen(w));

答案 1 :(得分:0)

调制解调器需要一段时间才能回复OK,尝试等待一段时间再读取,或将读取置于循环中。

答案 2 :(得分:0)

默认情况下,GSM模块返回与GSM调制解调器相同的“ AT ”命令。因此,您可以通过发送命令“ ATE0 ”关闭回显,并通过发送命令“ AT&W ”,然后单击“确定”将设置保存到永久内存中。 您可以再次发送回显命令,方法是发送命令“ ATE1 ”。