在嵌入式开发中一些设备如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;
}

linux系统串口编程实例的更多相关文章

  1. linux下socket编程实例

    linux下socket编程实例一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.s ...

  2. prometheus linux系统告警规则 实例

    #prometheus linux系统告警规则 实例 #根据实际情况修改参数 #rules.linux.yml groups: - name: linux rules: - alert: Node-D ...

  3. win7系统下用vspd软件进行串口编程实例

    http://blog.csdn.net/qiusuo800/article/details/8299777 目前,我在学习C#串口编程类的基础知识,在网上也找了一些资料,但都存在一些问题,现在他们基 ...

  4. Linux下串口编程入门

    简介: Linux操作系统从一开始就对串行口提供了很好的支持,本文就Linux下的串行口通讯编程进行简单的介绍. 串口简介  串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用 ...

  5. [转] - linux下socket编程实例

    一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.socket也有一个类似于打开文件 ...

  6. Linux下串口编程【转】

    本文转载自:http://blog.csdn.net/w282529350/article/details/7378388 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但 ...

  7. Linux 系统应用编程——进程基础

    一.Linux下多任务机制的介绍 Linux有一特性是多任务,多任务处理是指用户可以在同一时间内运行多个应用程序,每个正在执行的应用程序被称为一个任务. 多任务操作系统使用某种调度(shedule)策 ...

  8. Linux 系统串口信息查看

    先确认系统启动的时候串口的信息. ECM_5412@chenfl:~$ dmesg | grep tty [ 0.000000] console [tty0] enabled [ 2.511678] ...

  9. Linux系统shell编程自学_第一章基础

    第一章 基础shell的优势在于处理操作系统底层的业务,Python,php的优势在于开发运维工具,web界面的管理工具以及web业务开发.处理一键安装.优化.报警脚本shell又叫命令解释器,它能识 ...

随机推荐

  1. ACM-ICPC 2018 徐州赛区网络预赛 B(dp || 博弈(未完成)

    传送门 题面: In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl n ...

  2. SocLib能耗评估

    相关论文链接: https://ac.els-cdn.com/S0167926015000231/1-s2.0-S0167926015000231-main.pdf?_tid=4a67f1a4-b21 ...

  3. malloc内存申请--释放-收缩

     一.验证思路和代码 #include <stdio.h> #include <unistd.h> #include <malloc.h> #include < ...

  4. PHP setcookie()用法

    定义和用法 setcookie() 函数向客户端发送一个 HTTP cookie. cookie 是由服务器发送到浏览器的变量.cookie 通常是服务器嵌入到用户计算机中的小文本文件.每当计算机通过 ...

  5. Java BIO

    目录 BIO 字节流 OutputStream InputStream 字符流 Reader Writer 转换流 InputStreamReader OutputStreamWriter BIO I ...

  6. Hibernate的事务管理

    Hibernate的事务管理 事务(Transaction)是工作中的基本逻辑单位,可以用于确保数据库能够被正确修改,避免数据只修改了一部分而导致数据不完整,或者在修改时受到用户干扰.作为一名软件设计 ...

  7. UICollectionView笔记2

    WWDC 2012 Session笔记——219 Advanced Collection Views and Building Custom Layouts 这是博主的WWDC2012笔记系列中的一篇 ...

  8. 关于alibaba.fastjson的一些简单使用

    // 把JSON文本parse为JSONObject或者JSONArray public static final Object parse(String text); // 把JSON文本parse ...

  9. Hibernate笔记2

    一.持久化类 1.持久化标识OID     数据库中叫做主键,对应实体的ID属性即为OID;Hibernate通过OID区分两个对象是否为同一对象;OID的生成一般交由程序自动处理; 2.持久化类   ...

  10. MATLAB之画确定区域内不重合的随机圆

    MATLAB之画确定区域内不重合的随机圆 程序要求:在确定区域内,画互不重合的圆. 知识点: (1)A=p'; 转置运算 (2)ones(a,b)产生a行b列全1数组 (3)rand(a,b)产生a行 ...