在linux中,所有的设备文件一般都位于“/dev”下,串口1和串口2对应的设备名依次为“/dev/ttyS0”, “/dev/ttyS1”,而且USB转串口的设备名通常为“/dev/ttyUSB0”,在linux下对设备的操作方法与对文件的操作方法一样。

串口开发步骤:

串口的设置主要是设置struct termios结构体的各成员值

#include<termios>

struct termios

{

Unsigned short c_iflag;            /*输入模式标志*/

Unsigned short c_oflag;           /*输出模式标志*/

Unsigned short c_cflag;           /*控制模式标志*/

Unsigned short c_lflag;            /*本地模式标志*/

Unsigned char c_line ;             /*线路规则*/

Unsigned char c_cc[NCC];              /*控制特性*/

Speed_t        c_ispeed;             /*输入速度*/

Speed_t        c_ospeed;            /*输出速度*/

};

串口设置包括波特率设置,检验位和停止位设置,主要设置的是c_cflag结构体成员,注意,不能直接对c_cflag成员初始化,而要将其通过与或操作。

int set_com_config(int fd,int baud_rate, int data_bits,char parity,int stop_bits)

{

struct termios new_cfg,old_cfg;

int speed;

/*保存并测试现有串口参数设置,在这里如果串口号等出错,会有相关出错信息*/

if(tcgetattr(fd,&old_cfg) != 0)        /*该函数得到fd指向的终端配置参数,并将它们保存到old_cfg变量中,成功返回0,否则-1*/

{

perror("tcgetttr");

return -1;

}

/*设置字符大小*/

new_cfg=old_cfg;

cfmakeraw(&new_cfg);    /*配置为原始模式*/

new_cfg.c_cflag &= ~CSIZE;/*用位掩码清空数据位的设置*/

/*设置波特率*/

switch(baud_rate)

{

case 2400:

speed=B2400;

break;

case 4800:

speed=B4800;

break;

case 9600:

speed=B9600;

break;

case 19200:

speed=B19200;

break;

case 38400:

speed=B38400;

break;

default:

case 115200:

speed=B115200;

break;

}

cfsetispeed(&new_cfg,speed);

cfsetospeed(&new_cfg,speed);

/*设置停止位*/

switch(data_bits)

{

case 7:

new_cfg.c_cflag |= CS7;

break;

default:

case 8:

new_cfg.c_cflag |= CS8;

break;

}

/*设置奇偶校验位*/

switch(parity)

{

default:

case 'n':

case 'N':

{

new_cfg.c_cflag &= ~PARENB;

new_cfg.c_iflag &= ~INPCK;

}

break;

case 'o':

case 'O':

{

new_cfg.c_cflag |= (PARODD | PARENB);

new_cfg.c_iflag |= INPCK;

}

break;

case 'e':

case 'E':

{

new_cfg.c_cflag |=  PARENB;

new_cfg.c_cflag &= ~PARODD;

new_cfg.c_iflag |= INPCK;

}

break;

}

/*设置停止位*/

switch(stopbits)

{

default:

case 1:

new_cfg.c_cflag &= ~CSTOPB;

break;

case 2:

new_cfg.c_cflag |= CSTOPB;

break;

}

/*设置等待时间和最小接收字符*/

new_cfg.c_cc[VTIME]=0;

new_cfg.c_cc[VMIN]=1;

/*处理未接收字符*/

tcflush(fd,TCIFLUSH);

/*激活新配置*/

if((tcsetattr(fd,TCSANOW,&new_cfg))!=0)

{

perror("tcsetattr");

return -1;

}

return 0;

}

嵌入式linux串口设置(一)的更多相关文章

  1. 嵌入式Linux串口编程简介

    文章目录 简介 用到的API函数 代码 简介 嵌入式Linux下串口编程与Linux系统下的编程没有什么区别,系统API都是一样的.嵌入式设备中串口编程是很常用的,比如会对接一些传感器模块,这些模块大 ...

  2. Linux串口设置及编程(转)

    用户常见的数据通信的基本方式可分为并行通信和串行通信. 并行通信是指利用多条数据传输线将一个资料的各位同时传送.特点是传输速度快,适用于短距离通信,但要求传输速度较高的应用场合. 串行通信是指利用一条 ...

  3. 给嵌入式linux串口添加密码的一些总结

    要添加串口登录密码就需要修改 /etc/inittab 文件的配置 但是不同的开发板情况不一样,有的是没有这个文件的,BusyBox会检查/etc/inittab文件是否存在, 如果此文件不存在, B ...

  4. 嵌入式linux串口编程(二)

    /*com_writer.c*/#include "uart_api.h" int main(void){ int fd; char buff[BUFFER_SIZE]; if(( ...

  5. 嵌入式linux串口通信自发自收测试程序

     /*串口自收自发程序主函数*/#include"uart_api.h"int main(){ int fd; char buff[BUFFER_SIZE]; char buff2 ...

  6. 关于嵌入式linux下的串口通讯问题---需增加回车/换行才能接收

    问题:在Linux应用层,直接从/dev/tty***使用read()函数读数据,无法读到,只有在数据末尾加上0a/0d才可以读到数据(这里是发送十六进制的数据,ASCLL码同理,增加回车才可以读到数 ...

  7. linux串口编程设置(转载)

    (转载)在嵌入式Linux中,串口是一个字设备,访问具体的串行端口的编程与读/写文件 的操作类似,只需打开相应的设备文件即可操作.串口编程特殊在于串 口通信时相关参数与属性的设置.嵌入式Linux的串 ...

  8. 嵌入式Linux学习笔记(六) 上位机QT界面实现和串口通讯实现

    目录 (1).参考资料 (2).QT界面布局实现 (3).数据和操作逻辑 在上一章我们实现了下位机的协议制定,并通过串口通讯工具完成了对设备内外设(LED)的状态修改,下面就要进行上位机软件的实现了( ...

  9. Linux串口中的超时设置

    在Linux下使用串口通信时,默认的阻塞模式是不实用的.而采用select或epoll机制的非阻塞模式,写代码有比较麻烦.幸好Linux的串口自己就带有超时机制. Linux下使用termios.h中 ...

随机推荐

  1. Android 多线程断点续传同时下载多个大文件

    最近学习在Android环境中一些网络请求方面的知识,其中有一部分是关于网络下载方面的知识.在这里解析一下自己写的demo,总结一下自己所学的知识.下图为demo的效果图,仿照一些应用下载商城在Lis ...

  2. js 关于网易淘宝移动端适配的学习

    (function (doc, win) { // orientationchange:用户水平或者垂直翻转设备(即方向发生变化)时触发的事件;(屏幕大小发生变化) var docEl = doc.d ...

  3. django-rest-framework框架 第四篇 认证Authentication

    认证Authentication 什么是身份认证 身份验证是将传入请求与一组标识凭据(例如请求来自的用户或与其签名的令牌)关联的机制. 视图的最开始处运行身份验证 在权限和限制检查发生之前,以及在允许 ...

  4. 进阶攻略|最全的前端开源JS框架和库

    新的 Javascript 库层出不穷,从而Web 社区愈发活跃.多样.在多方面快速发展.详细去描述每一种主流的 Javascript框架和库近乎不可能,所以在这篇文章中主要介绍一些对前端发展最具影响 ...

  5. Unity实现发送QQ邮件功能

    闲来无聊,用Unity简单实现了一个发送邮件的功能,希望与大家互相交流互相进步,大神勿喷,测试的是QQ邮件用到的是MailMessage类和SmtpClient类首先如果发送方使用的是个人QQ邮箱账号 ...

  6. 91.生成ini文件并写入和读取ini文件

    写入 WritePrivateProfileStringA("hello money", infx[i].name, money, "1.ini"); 按照字符 ...

  7. python文件的操作

    文件的操作,归根结底就只有两种:打开文件.操作文件 一.打开文件:文件句柄 = open('文件路径', '模式') python中打开文件有两种方式,即:open(...) 和  file(...) ...

  8. apache+nginx 实现动静分离

    apache+nginx 实现动静分离 http://blog.csdn.net/xysoul/article/details/50347971

  9. treap-名次树-树堆

    #include <cstring> #include <cstdio> #include <cstdlib> using namespace std; struc ...

  10. [React Intl] Get locale value from intl injector

    Get 'injectIntl' from  'react-intl', it is a high order componet. We need to wrap our component into ...