打开CDC-ACM后,
插入EHS5后能看到/dev有出现很多
ttyACM设备,此时,我们可以像串口编程一样使用它
串口测试程序:
#include
#include
#include
#include
#include
#include
#include
#include
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即可关闭回显,不过还是会有一个额外的回车,即打开关闭回显感觉不会很大