记对EHS5串口编程遇到的一个问题, 与串口编程示范
2017-03-13 00:00
351 查看
打开CDC-ACM后,
插入EHS5后能看到/dev有出现很多
ttyACM设备,此时,我们可以像串口编程一样使用它
串口测试程序:
由于回显问题,
如果串口没有设置回显,那么读数据时会出现混乱的样子,类似于
PC: AT
EHS5:T
EHS5:
EHS5:OK
而设置为回显后,则是
PC:AT
EHS5:AT
EHS5:0K
深入了解
EHS5使用AT命令默认打开回显
使用ATE0即可关闭回显,不过还是会有一个额外的回车,即打开关闭回显感觉不会很大
插入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即可关闭回显,不过还是会有一个额外的回车,即打开关闭回显感觉不会很大
相关文章推荐
- C#串口编程遇到的问题以及解决方法
- Linux 串口编程中遇到的问题
- Delphi的MDI编程中遇到的一个奇怪问题(值得研究的一个问题)
- 本来刚学j2me手机编程,遇到一个问题,可能比较浅,请不吝赐教!
- 转 C# 串口编程遇到的问题以及解决方法
- OpenGL中使用glew库进行GLSL编程遇到的一个问题
- 看到一个伙计遇到的服务端编程遇到的问题 赶紧复制过来
- Visual Studio 2010 编程中可能会遇到的一个小问题
- Delphi的MDI编程中遇到的一个奇怪问题
- C#串口编程遇到的问题以及解决方法
- C#串口编程问题:一个测试数据怎么拆分成2个字符串,做了2次发送?
- C#串口编程遇到的问题以及解决方法
- 笔记:做一个MFC串口界面遇到的一些问题和解决思路
- Linux 串口编程中遇到的问题
- 串口通信编程中遇到问题的解决步骤。
- 剪切板编程中遇到的一个问题
- linux串口编程传送二进制数据时遇到0x0d,0x11和0x13会被丢掉问题
- 本来刚学j2me手机编程,遇到一个问题,可能比较浅,请不吝赐教!
- 哎呀,今天犯了一个大毛病,有串口不打log看,遇到问题就请教别人是个坏毛病
- C# 串口编程遇到的问题以及解决方法