串口通讯 是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持,在调试设备时也经常使用串口来输出调试信息,在linux中是通过终端设备文件进行串口通讯的
在 Linux 下终端的设备文件都位于/dev/目录下,以 tty* 开头的字符命名,可使用如下命令查看
Linux 下有一个专门的 stty 命令可以查看或设置终端的参数
- stty//输出当前终端的配置参数
- stty -F /dev/ttyACM0 //输出指定终端的配置参数
- stty -F /dev/ttyACM0 speed 115200 cs8 -parenb -cstopb//设置终端波特率115200 8位数据位 1位停止位 无校验
输出指定内容到串口
显示串口接收到的内容(最要添加\n作为结束符)
编程实现串口通讯
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <errno.h>
- #include <string.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <termios.h>
- #include <sys/ioctl.h>
- #define TTY_PATH "/dev/ttyACM0"
- #define TTY_BUFF_LEN 1024
- int main(int argc,char **argv)
- {
- int fd,res;
- u_int8_t buf[TTY_BUFF_LEN];
- struct termios config;
- fd = open(TTY_PATH,O_RDWR);
- if(fd < 0)
- {
- printf("can not open %s\n",TTY_PATH);
- return -1;
- }
- tcflush(fd,TCIOFLUSH);
- tcgetattr(fd,&config);
- //设置波特率
- cfsetispeed(&config,B115200);
- cfsetospeed(&config,B115200);
- //接收使能
- config.c_cflag |= CREAD;
- //原始模式
- config.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
- //禁用软件流控制
- config.c_iflag &= ~(IXON | IXOFF | IXANY);
- //禁用输出处理
- config.c_oflag &= ~OPOST;
- //设置数据位数
- config.c_cflag &= ~CSIZE;
- config.c_cflag |= CS8;
- //停止位1
- config.c_cflag &= ~CSTOPB;
- //无校验
- config.c_cflag &= ~PARENB;
- config.c_iflag &= ~INPCK;
- //超时500ms
- config.c_cc[VTIME] = 5;
- config.c_cc[VMIN] = 0;
- tcsetattr(fd, TCSANOW, &config);
- printf("/dev/ttyACM0 115200\n");
- while (1)
- {
- res = read(fd,buf,TTY_BUFF_LEN-1);
- if(res > 0)
- {
- buf[res] = '\0';
- printf("receive %d: %s\n",res,buf);
- write(fd,"ttytest send:",13);
- write(fd,buf,res);
- }
- }
-
- close(fd);
- return 0;
- }
|