您的位置:首页 > 编程语言

记对EHS5串口编程遇到的一个问题, 与串口编程示范

2017-03-13 00:00 351 查看
打开CDC-ACM后,

插入EHS5后能看到/dev有出现很多

ttyACM设备,此时,我们可以像串口编程一样使用它

串口测试程序:

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <string.h>
#include <termios.h>

static const char *initGemaltoCmd[]={
"AT\r\n"
"AT^SPOW=1,1,1\r\n",
"ATD13168084836;\r\n",
"ATD10010;\r\n",
"AT^SICS=0,conType,GPRS0\r\n",    //5

"AT^SICS=0,APN,\"internet\"\r\n",

"AT^SISS=1,srvType,socket\r\n",
"AT^SISS=1,conID,0\r\n",
"AT^SISS=1,address,\"sockudp://54.84.26.193:1234\"\r\n",
"AT^SISO=1\r\n",                  //10
"AT^SISC=1\r\n",
"AT^SISW=1,34\r\n",          //12
"AT^SISW=1,100,0\r\n",
"AT^SISR=1,1\r\n",
"AT^SISR=1,51\r\n",			  // 15
"AT^SISR=1,50\r\n",              //16
"AT^SISR=1,0\r\n",
"AT+CSQ\r\n",
"AT+GSN\r\n",
"AT^SISX=\"ping\",0,registration.securenettech.com,1,200\r\n"
};

int main(int argc, char *argv[]){
int fd[7];
fd[0] = open("/dev/ttyACM0", O_RDWR|O_NOCTTY|O_NDELAY);
fcntl(fd[0], F_SETFL, 0);

//串口
struct termios option;
//tcgetattr 使fd指向option结构体
tcgetattr(fd[0], &option);
tcflush(fd[0], TCIOFLUSH);
//设置波特率
cfsetospeed(&option, B115200);
cfsetispeed(&option, B115200);
//修改控制模式,使程序不会占用串口,使程序能够从串口内读入数据
option.c_cflag |= (CLOCAL|CREAD);

//不使用流控制
option.c_cflag &= ~CRTSCTS;

//设置数据位
option.c_cflag &= ~CSIZE; 	//屏蔽其他标志位
option.c_cflag |= CS8;
//设置校验位
option.c_cflag &= ~PARENB;
option.c_iflag &= ~INPCK;

//设置停止位
option.c_cflag &= ~CSTOPB;

//修改输出模式,输入回显打开
option.c_iflag &= (ICANON|ECHO|ECHOE|ISIG);
option.c_oflag &= ~OPOST;

//设置等待诗句和最小接收字符
option.c_cc[VTIME] = 1;
option.c_cc[VMIN] = 1;
tcflush(fd[0], TCIFLUSH);//如果发生数据一处,接收数据,但不再读取
tcsetattr(fd[0], TCSANOW, &option);

int i = 3;
char buf[250];
while(i > -1){
int k;
write(fd[0], initGemaltoCmd[i], strlen(initGemaltoCmd[i]));
tcflush(fd[0], TCIFLUSH);
memset(buf, 0, sizeof(buf));
k = read(fd[0], buf, sizeof(buf));
printf("len=%d,rec:%s\n", k, buf);//回显的内容
k = read(fd[0], buf, sizeof(buf));
printf("len=%d,rec:%s\n", k, buf);//回复的内容
i--;
}
return 0;
}


由于回显问题,

如果串口没有设置回显,那么读数据时会出现混乱的样子,类似于

PC: AT

EHS5:T

EHS5:

EHS5:OK

而设置为回显后,则是

PC:AT

EHS5:AT

EHS5:0K

深入了解

EHS5使用AT命令默认打开回显

使用ATE0即可关闭回显,不过还是会有一个额外的回车,即打开关闭回显感觉不会很大
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: