linux系统串口编程实例
来源:互联网 发布:日本网络直播网站 编辑:程序博客网 时间:2024/04/29 04:31
在嵌入式开发中一些设备如WiFi、蓝牙......都会通过串口进行主机与从机间通信,串口一般以每次1bit位进行传输,效率相对慢。 在linux系统下串口的编程有如下几个步骤,最主要的是串口初始化! 1.打开串口 open(“/dev/XXXX”, O_NOCTTY|O_RDWR) 2.初始化串口 见下面实例。 3.对串口读写操作 4.关闭串口
#include <termios.h>/** *fd: 串口描述符 *nbits: 数据位 *nvent: 奇偶校验位 *nspeed: 波特率 *nstop: 停止位 **/bool set_opt(int fd, int nbits, char nevent, int nspeed, int nstop){ struct termios newtio, oldtio; //检测是否为终端设备描述符 if (!isatty(fd)) { perror("is not a termios device"); return false; } //得到此描述符之前的属性 if (tcgetattr(fd, &oldtio) != 0) { perror("tcgetattr error"); return false; } //CLOCAL:忽略调制解调器状态行 //CREAD:开启接受装置 newtio.c_cflag |= CLOCAL | CREAD; //清空字符长度位 newtio.c_cflag &= ~CSIZE; //设置数据位 switch(nbits) { case 5: newtio.c_cflag |= CS5; break; case 6: newtio.c_cflag |= CS6; break; case 7: newtio.c_cflag |= CS7; break; case 8: newtio.c_cflag |= CS8; break; } //设置奇偶校验位 switch(nevent) { case 'O': newtio.c_cflag |= PARENB; newtio.c_cflag |= PARODD; newtio.c_iflag |= (INPCK | ISTRIP); break; case 'E': newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD; newtio.c_iflag |= (INPCK | ISTRIP); break; case 'N': newtio.c_cflag &= ~PARENB; break; } //设置波特率 switch(nspeed) { case 115200: cfsetospeed(&newtio, B115200); cfsetispeed(&newtio, B115200); break; case 9600: cfsetospeed(&newtio, B9600); cfsetispeed(&newtio, B9600); break; case 2400: cfsetospeed(&newtio, B2400); cfsetispeed(&newtio, B2400); break; case 4800: cfsetospeed(&newtio, B4800); cfsetispeed(&newtio, B4800); break; case 460800: cfsetospeed(&newtio, B460800); cfsetispeed(&newtio, B460800); break; default: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break; } //设置停止位 if (1 == nstop) { newtio.c_cflag &= ~CSTOPB; } else if (2 == nstop) { newtio.c_cflag |= CSTOPB; } //MIN==0, TIME==0 如果有数据可用,则read最多返回所要求的字节数, //如果无数据可用,则read立即返回0 newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 0; //冲洗输入缓冲区 tcflush(fd, TCIFLUSH); //为终端设备设置属性 if (tcsetattr(fd, TCSANOW, &newtio) != 0) { perror("comX set error"); return false; } return true;}
阅读全文
0 0
- linux系统串口编程实例
- linux 串口编程实例
- linux下串口编程简单实例
- linux下串口编程简单实例
- linux下串口编程简单实例
- linux下串口编程简单实例
- Linux下的串口编程实例
- Linux C++ 串口编程 详解+实例
- Linux系统下串口通讯编程
- Linux系统串口接收数据编程
- Linux系统串口接收数据编程
- Linux系统串口接收数据编程
- Linux系统串口接收数据编程
- Linux系统串口接收数据编程
- win7系统下用vspd软件进行串口编程实例
- 一个串口编程实例
- C++串口编程实例
- 一个串口编程实例
- Java程序员学习路线图
- 自定义ClassLoader解析
- 关于IDEA中src下不能使用xml文件导致的问题
- Incremental Synchronization
- CUDA学习笔记(2)对任意矢量长度求和
- linux系统串口编程实例
- JAVA多线程之中断机制(如何处理中断?)
- MySQL之选取某一列插入到新的表中
- 操作,操作的side effect以及复合操作
- linux系统命令行基本操作——虚拟机控制
- 2017年9月27日感
- vlan trunk配置
- 多线程:线程池
- java多线程(1) ------volatile 和内存可见性