搜档网
当前位置:搜档网 › linux串口配置

linux串口配置

linux串口配置
linux串口配置

Linux串口配置

撰写目的:

介绍如何配置linux串口, 抓取kernel panic时的信息.

需要linux节点两台: 发送节点, 接收节点.

两台linux均为centos5.2. 其它系统未测试.

配置步骤:

一、使用串口线连接两节点

二、配置发送节点

修改grub, 在kernel 一行追加”console=ttyS0,38400 console=tty0”

含义是将kernel信息通过第一个串口, 以38400的波特率导出; 同时在第一个控制台通过屏幕打印.

三、重启发送节点

四、配置接收节点

接收节点执行minicom –s(第一次使用minicom需要加-s配置参数, 以后只需执行minicom).

选择” Serial port setup”:

按’A’, 修改Serial Device为”/dev/ttyS0”

按”E”, 修改Bps/Par/Bits为38400(跟发送节点grub配置的一致)

完成后回车退出.

选择”Save setup as dfl”

最后选Exit, 返回minicom

五、测试配置

发送节点执行命令:”echo XXXXX >/dev/ttyS0”

接收节点通过minicom界面可以看到打印信息”XXXXX”.

六、完成配置

不要关闭minicom, 若发送节点kernel panic, 接收节点可以通过minicom看到完整信息.

Linux下串口通信编程

Linux下串口通信编程 一、什么是串口通信? 串口通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0。 二、串口通信的分类 串口通信可以分为同步通信和异步通信两类。同步通信是按照软件识别同步字符来实现数据的发送和接收,异步通信是一种利用字符的再同步技术的通信方式。 2.1 同步通信 同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。 它们均由同步字符、数据字符和校验字符(CRC)组成。其中同步字符位于帧开头,用于确认数据字符的开始。数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。 同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。 2.2 异步通信 异步通信中,数据通常以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。 接收端检测到传输线上发送过来的低电平逻辑"0"(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。 在异步通行中有两个比较重要的指标:字符帧格式和波特率。 (1)字符帧,由起始位、数据位、奇偶校验位和停止位组成。 1.起始位:位于字符帧开头,占1位,始终为逻辑0电平,用于向接收设备表示发送端开始发送一帧信息。 2.数据位:紧跟在起始位之后,可以设置为5位、6位、7位、8位,低位在前高位在后。 3.奇偶校验位:位于数据位之后,仅占一位,用于表示串行通信中采用奇校验还是偶校验。 (2)波特率,波特率是每秒钟传送二进制数码的位数,单位是b/s。 异步通信的优点是不需要传送同步脉冲,字符帧长度也不受到限制。缺点是字符帧中因为包含了起始位和停止位,因此降低了有效数据的传输速率。 三、什么是RS-232? RS-232-C 接口(又称EIA RS-232-C)它是在1970 年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个25 个脚的DB25 连接器,对连接器的每个引脚的信号内容加

Linux串口打印设置

一、基于VM虚拟机linux系统串口配置 配置分为虚拟机下配置及linux系统下minicom配置两部分。 虚拟机模块配置如下: 打开虚拟机配置界面。 选择Edit virtual machine settings。进入配置界面。

选择Add…按钮,添加相关的设备文件。

选中串口选项后继续选择下一步。

此处选择”使用主机上的物理串口设备”选项,继续下一步。此处我们选择文件。 对于物理串口选项,此处可以采用自动检测选项。如果下来菜单中有对应于串口的端口号,则可以选择。注意,对于设备状态,要确保选中“connect at power on“,即,上电连接状态。至此,虚拟机端串口配置完毕。 注意:此处我们串口添加成功后默认未COM2.

Linux下串口配置及使用。 Linux下一般使用minicom来作为串口数据输入输出的终端。类似于Windows下的超级终端。虚拟机下配置完毕后,进入Linux系统中,在Shell 终端下输入minicom -s即可配置串口终端。配置完成后执行minicom启动串口终端。 在终端界面下完成相关的参数配置并保存后,启动终端设备,即可在minicom中观察到数据输出。 <四>Minicom的使用 (1)minicom界面介绍 第一次运行minicom,启动minicom要以root权限登录系统,需要进行minicom的设置,输入下了命令#minicom –s,显示的屏幕如下所示,按

上下光标键进行上下移动选择,我们要对串行端口进行设置,因此选中 Serial port setup,然后回车: __[configuration]─-─—┐//配置 │ Filenames and paths │//文件名和路径 │ File transfer protocols│//文件传输协议 │ Serial port setup │//串行端口设置 │ Modem and dialing │//调制解调器和拨号 │ Screen and keyboard │//屏幕和键盘 │ Save setup as dfl │//设置保存到 │ Save setup as.. │//储存设定为 │ Exit │//退出 │ Exit from Minicom │//退出minicom └──────────┘ (2)minicom的参数设置 选中设置串行端口,点击回车后,弹出设置的界面如下: 点击”A”设置串行设置为/dev/ttyS1,这表示使用串口2(com2),如果是 /dev/ttyS1则表示使用串口2(com 2).按”E”键进入设置”bps/par/Bits”(波 特率)界面,如下图所示。再按”I”以设置波特率为115200,点”F”键硬 件流控制设置为NO,回车 最终的设置结果如下,然后回车返回到串口设置主菜单中 │A-Serial Device(串口设备): /dev/ttyS1 │B-Lockfile Location(锁文件位置): /var/lock │C-Callin Program(调入程序): │D-Callout Program(调出程序): │E-Bps/Par/Bits(): 115200 8N1 │F-Hardware Flow Control(硬件数据流控制): No │G-Software Flow Control(软件数据流控制): No 二、Linux 标准输入输出重定向到串口指南 设置linux 系统的标准输入输出到com2(console 口),以便维护人员 在无网络、无显示器的情况下对系统维护。在各文件(/etc/grub.conf、 /etc/inittab、/etc/securetty)中添加红色部分!文件修改完成后 reboot 系统即可在com2 口看到标准输入输出信息。

Linux--串口操作及设置详解

串口操作需要的头文件 #include /*标准输入输出定义*/ #include /*标准函数库定义*/ #include /*Unix 标准函数定义*/ #include #include #include /*文件控制定义*/ #include /*PPSIX 终端控制定义*/ #include /*错误号定义*/ 1.打开串口 在前面已经提到linux下的串口访问是以设备文件形式进行的,所以打开串口也即是打开文件的操作。函数原型可以如下所示: int open(“DE_name”,int open_Status) 参数说明: (1)DE_name:要打开的设备文件名 比如要打开串口1,即为/dev/ttyS0。 (2)open_Status:文件打开方式,可采用下面的文件打开模式: O_RDONLY:以只读方式打开文件 O_WRONLY:以只写方式打开文件 O_RDWR:以读写方式打开文件 O_APPEND:写入数据时添加到文件末尾 O_CREATE:如果文件不存在则产生该文件,使用该标志需要设置访问权限位mode_t O_EXCL:指定该标志,并且指定了O_CREATE标志,如果打开的文件存在则会产生一个错误 O_TRUNC:如果文件存在并且成功以写或者只写方式打开,则清除文件所有内容,使得文件长度变为0 O_NOCTTY:如果打开的是一个终端设备,这个程序不会成为对应这个端口的控制终端,如果没有该标志,任何一个输入,例如键盘中止信号等,都将影响进程。 O_NONBLOCK:该标志与早期使用的O_NDELAY标志作用差不多。程序不关心DCD信号线的状态,如果指定该标志,进程将一直在休眠状态,直到DCD信号线为0。 函数返回值: 成功返回文件描述符,如果失败返回-1 例如:

linux下的tty串口通信

异步通信:以单字符为发送单位,字符间发送能存在间隔 起始位:发送”0”,表示字符传送开始 数据位:可允许4 5 6 7的数据位 停止位:一个字符结束的标志位, 奇偶校验位:根据传送数据内“1”的个数是偶数还是奇数来校验数据是否准确 空闲位:在没有数据发送时,设置“1” Structure termios{ tcflag_t c_iflag; 输入方式 tcflag_t c_oflag; 输出方式 tcflag_t c_cflag; 控制模式标志 tcflag_t c_Iflag; 本地 tcflag_t c_cc[NCCS]; 控制字符,用于保存终端的特殊字符} c_iflag 标志常量:Input mode ( 输入模式) input mode可以在输入值传给程序之前控制其处理的方式。 其中输入值可能是由序列埠或键盘的终端驱动程序所接收到的字元。我们可以利用termios结构的c_iflag的标志来加以控制,其定义的方式皆以OR 来加以组合。 IGNBRK :忽略输入中的 BREAK 状态。(忽略命令行中的中断) BRKINT :(命令行出现中断时,可产生一插断)如果设置了 IGNBRK,将忽略 BREAK。如果没有设置,但是设置了 BRKINT,那么 BREAK 将使得输入和输出队列被刷新,如果终端是一个前台进程组的控制终端,这个进程组中所有进程将收到 SIGINT 信号。如果既未设置 IGNBRK 也未设置 BRKINT,BREAK 将视为与NUL 字符同义,除非设置了 PARMRK,这种情况下它被视为序列 377 � �。 IGNPAR :忽略桢错误和奇偶校验错。 PARMRK :如果没有设置 IGNPAR,在有奇偶校验错或桢错误的字符前插入377 �。如果既没有设置 IGNPAR 也没有设置 PARMRK,将有奇偶校验错或桢错误的字符视为 �。 INPCK :启用输入奇偶检测。 ISTRIP :去掉第八位。 INLCR :将输入中的 NL 翻译为 CR。(将收到的换行符号转换为Return)IGNCR :忽略输入中的回车。 ICRNL :将输入中的回车翻译为新行 (除非设置了 IGNCR)(否则当输入信号有 CR 时不会终止输入)。 IUCLC :(不属于 POSIX) 将输入中的大写字母映射为小写字母。 IXON :启用输出的 XON/XOFF 流控制。 IXANY :(不属于 POSIX.1;XSI) 允许任何字符来重新开始输出。(?) IXOFF :启用输入的 XON/XOFF 流控制。 IMAXBEL:(不属于 POSIX) 当输入队列满时响零。Linux 没有实现这一位,总是将它视为已设置。

linux下串口通信代码

1.Stty.h #ifndef __STTY_H__ #define __STTY_H__ //包含头文件 #include #include #include #include #include #include #include #include #include // 串口设备信息结构 typedef struct tty_info_t { int fd; // 串口设备ID pthread_mutex_t mt; // 线程同步互斥对象 char name[24]; // 串口设备名称,例:"/dev/ttyS0" struct termios ntm; // 新的串口设备选项 struct termios otm; // 旧的串口设备选项 } TTY_INFO; // 串口操作函数 TTY_INFO *readyTTY(int id); int setTTYSpeed(TTY_INFO *ptty, int speed); int setTTYParity(TTY_INFO *ptty,int databits,int parity,int stopbits); int cleanTTY(TTY_INFO *ptty); int sendnTTY(TTY_INFO *ptty,char *pbuf,int size); int recvnTTY(TTY_INFO *ptty,char *pbuf,int size); int lockTTY(TTY_INFO *ptty); int unlockTTY(TTY_INFO *ptty); #endif 2.Stty.c #include #include #include "stty.h" /////////////////////////////////////////////////////////////////////////////// // 初始化串口设备并进行原有设置的保存 TTY_INFO *readyTTY(int id) { TTY_INFO *ptty; ptty = (TTY_INFO *)malloc(sizeof(TTY_INFO)); if(ptty == NULL)

基于linux的嵌入式串口通信(DOC)

天津电子信息职业技术学院《嵌入式软件编程》课程报告 课程名称:基于linux的嵌入式串口通信 课程代码:115229 姓名:甘琦 学号:48 专业:物联网应用技术 班级:物联S14-1 完成时间:2016 年10 月28日

目录 摘要 (1) 前言 (2) 一、嵌入式串口通信概述 (2) 1.1 嵌入式串口通信的原理 (2) 1.2 嵌入式串口通信的开发工具 (2) 1.2.1 CC2530功耗 (2) 1.2.2 ARM简介 (3) 1.2.3 Linux系统简介 (3) 1.3 嵌入式串口通信的基本任务 (4) 1.4嵌入式串口通信协议及实现 (4) 二、 RS-232C标准 (5) 2.1引脚定义 (5) 2.2 字符(帧)格式 (6) 2.3握手协议 (8) 2.4 双机互连方式 (9) 2.4.1无硬件握手情况 (9) 2.4.2 DTR和DSR握手情况 (9) 三、嵌入式串口驱动程序设计 (10) 3.1 嵌入式串口操作需要的头文件 (10) 3.2 打开串口 (10) 3.3 串口设置 (11) 3.4 串口读写 (13) 3.5 关闭串口 (14) 四、源程流程图 (15) 五、源程序代码 (15) 总结 (19)

摘要 随着Internet的发展和后PC时代的到来,嵌入式系统以其可靠性强、体积小、专用性、成本低等特性得到日益广泛的应用。目前嵌入式系统技术已经成为了最热门的技术之一。与此同时,一个独立的嵌入式系统的功能缺陷也逐渐暴露出来。新一代嵌入计算系统的功能集成和应用模式使之迅速向网络化嵌入计算的方向发展,标准和统一的TCP/IP通信协议是独立于任何厂家的硬件的,因此嵌入环境下的实时网络通信成为嵌入计算技术研究的重点和热点。本文通过基于2410F 的嵌入式串口通信的实现,按照嵌入式系统的软、硬件结构组成,较为详细地介绍了串口通信的硬件电路和软件实现方法。 关键词:嵌入式串口通信 2410F

Linux下串口编程所要知道的那些事

Linux下串口编程所要知道的那些事 [日期:2011- 来源:csdn 作者:tiger-john 1. 波特率 1> 表示每秒传输的比特数。 2> 说明:若波特率为115200,它表示什么呢? ? 对于发送断,即每秒钟发送115200bit。 ? 对于接收端,115200波特率意味着串口通信在数据线上的采样率为115200HZ. 注:波特率和距离之间成反比,距离相隔很近的设备之间可以实现高波特率通信。 2. 数据位 1> 表示通信中实际数据位的参数。在计算机发送的数据包中,实际的数据往往不会是8位。 2> 说明:在串口通信中,可以选择5,6,7,8位。设定数据位时,主要考虑所要传输的数据内容。 3> 事例:如果要传输的是标准的ASCII码。那么又该如何设定数据位呢? ? 由于ASCII码的范围是0~127,因此设定数据位为7就OK了。 ? 若为扩展ASCII码,其范围是0~255,必须使用8位。 注:7位或8位数据中不仅仅是数据,还包括开始/停止位,数据位以及奇偶校验位等。 3. 奇偶校验位 1> 作用:该位用于串口通信中的简单检验错。 2> 类型:主要有偶校验,奇校验,标记,空格的方式 在ARM7(LPC2200)中,只有偶校验,奇校验两种方式。 3> 方法:如何进行校验? ? 奇偶校验是通过统计数据中高位或低位的个数来实现校验的。 ? 标记,空格并不是真正校验错误的,只是通过简单的置位来实现对

数据的检测。https://www.sodocs.net/doc/5b4866760.html,通过置位方式,可以判断出是否存在噪声干扰数据通信或数据传输,以及是否存在不同步的现象 4. 停止位 1> 作用:停止位用于标志该数据包数据结束,可以取1位,1.5位或2位。 在ARM7(lpc2200中)停止位可以取1位,2位或不取 2> 说明: ? 停止位不仅仅用于数据包的传输结束标志,还提供了计算机之间校正同步时钟的机会。 ? 用于停止位的位数越多,不同时钟同步的容忍程序越大。 ? 但是由于停止位占用了数据空间,过多的停止位将导致数据传输速度的下降。 5. 数据流控制 1> 通过串口传输数据时,由于计算机之间处理速度或其他因素的影响,会造成丢失数据的现象。 2> 作用:数据流控制用于解决上面的问题,通过控制发送数据的速度,确保数据不会出现丢失。 3> 类型:数据流控制可以分为软件流控制(Xon/Xoff)和硬件流控制,当然你可以选择不使用数据流控制。 ? 软件流控制使用特殊的字符作为启动或停止的标志 ? 硬件流控制通过使用硬件信号(CTR/RTS)来实现。 注:使用硬件流控制时,在接收端准备好接收数据后,设为CTS为1,否则CTS为0。同样,如果发送端准备好要发送数据时,则设定RTS为1;如果还未准备好,设置CTS为0. 二. Linux串口下编程所要考虑的问题 1. Linux下编写串口程序的思想 看图:

linux下串口应用程序编程

这几天,由于多功能温度测量仪项目的需要,涉及到了GSM信息的串口读取,所以在Linux下串口信息的读取有了一点心得体会。 1. 打开串口 与其他的关于设备编程的方法一样,在Linux下,操作、控制串口也是通过操作起设备文件进行的。在Linux下,串口的设备文件是/dev/ttyS0或/dev/ttyS1等。因此要读写串口,我们首先要打开串口: char *dev = "/dev/ttyS0"; //串口1 int fd = open( dev, O_RDWR ); //打开串口的核心语句 //| O_NOCTTY | O_NDELAY if (-1 == fd) { perror("Can't Open Serial Port"); return -1; } else return fd; 2. 设置串口速度 打开串口成功后,我们就可以对其进行读写了。首先要设置串口的波特率: int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,B38400, B19200, B9600, B4800, B2400, B1200, B300, }; int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, }; void set_speed(int fd, int speed){ int i; int status; struct termios Opt; tcgetattr(fd, &Opt); for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) { if (speed == name_arr[i]) { tcflush(fd, TCIOFLUSH); cfsetispeed(&Opt, speed_arr[i]);//波特率大小在驱动中已经做了初始化大小根据实际串口驱动而定,这句话可以重设波特率 cfsetospeed(&Opt, speed_arr[i]); status = tcsetattr(fd, TCSANOW, &Opt); if (status != 0) { perror("tcsetattr fd"); return; } tcflush(fd,TCIOFLUSH); } } }

Linux下串口C语言编程

串口操作代码 #include #include #include #include #include #include #include #include #include #define BUFFER_SIZE 1024 #define HOST_PORT 1 int set_port(int fd, int baud_rate, int data_bits, char parity, int stop_bits) { struct termios newtio,oldtio; if( tcgetattr(fd,&oldtio) != 0) { perror("Setup Serial 1"); return -1; } bzero(&newtio,sizeof(newtio)); newtio.c_cflag |= CLOCAL | CREAD; newtio.c_cflag &= ~CSIZE; /* set baud_speed*/ switch(baud_rate) { case 2400: cfsetispeed(&newtio,B2400); cfsetospeed(&newtio,B2400); break; case 4800: cfsetispeed(&newtio,B4800); cfsetospeed(&newtio,B4800); break; case 9600: cfsetispeed(&newtio,B9600); cfsetospeed(&newtio,B9600);

嵌入式linux的串口设置参数

linux基础复习(7)串口应用开发 据通信的基本方式可分为并行通信与串行通信两种。 ·并行通信是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速度快,适用于短距离通信,但要求传输速度较高的应用场合。 ·串行通信是指利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利用 简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。 串口设置详解 本节主要讲解设置串口的主要方法。 如前所述,设置串口中最基本的包括波特率设置,校验位和停止位设置。串口的设置主 要是设置struct termios结构体的各成员值,如下所示: #include struct termio { unsigned short c_iflag; /* 输入模式标志*/ unsigned short c_oflag; /* 输出模式标志*/ unsigned short c_cflag; /* 控制模式标志*/ unsigned short c_lflag; /*本地模式标志*/ unsigned char c_line; /* line discipline */ unsigned char c_cc[NCC]; /* control characters */ }; 在这个结构中最为重要的是c_cflag,通过对它的赋值,用户可以设置波特率、字符大小、数据位、停止位、奇偶校验位和硬件流控等。另外c_iflag 和c_cc 也是比较常用的标志。在 此主要对这3 个成员进行详细说明。 c_cflag支持的常量名称 CBAUD 波特率的位掩码 B0 0波特率(放弃DTR) B1800 1800波特率 B2400 2400波特率 B4800 4800波特率

(完整word版)linux下的串口通信程序详解

linux下的串口通信程序详解 2009-07-19 12:37 为了说明问题,下面给出测试程序来理解linux下的串口操作流程,例程receive.c 用来接收从串口发来的数据,而例程send.c用来发送数据到串口。二者成功建立串口连接后,串口接收端会收到串口发送端发来的字符串数据“Hello,this is a Serial Port test!”。

分别将上面的俩个程序编译之后就可以运行了,如果是在两个不同的平台上运行,比如,在开发板上运行数据发送程序write(write.c编译后得到),在宿主机上运行结收数据程序read(read.c编译得到),采用串口线将二者正确连接之后,就可以运行来看实际的效果了: 首先在宿主机端运行数据接收程序receive: [zhang@localhost]# ./receive [zhang@localhost]#open /dev/ttyS0: Success ready for receiving data... The data received is: Hello,this is a Serial_Port test! [zhang@localhost]# 在接收端运行完程序之后再到发送端运行数据发送程序send:

#./send ready for sending data... the number of char sent is 35 # 运行完发送程序之后就可以在接收端看到接收的数据了。 也可以在一台PC机上来运行这两个程序,这时需要将串口线的2、3脚短路连接即可(自发自收),实际运行的步骤与上面相同。

Linux串口程序设计

一、数据成员 termios 函数族提供了一个常规的终端接口,用于控制非同步通信端口。这个结构包含了至少下列成员: tcflag_t c_iflag; /* 输入模式*/ tcflag_t c_oflag; /* 输出模式*/ tcflag_t c_cflag; /* 控制模式*/ tcflag_t c_lflag; /* 本地模式*/ cc_t c_cc[NCCS]; /* 控制字符*/ struct termios {unsigned short c_iflag; /* 输入模式标志*/ unsigned short c_oflag; /* 输出模式标志*/ unsigned short c_cflag; /* 控制模式标志*/ unsigned short c_lflag; /*区域模式标志或本地模式标志或局部模式*/ unsigned char c_line; /*行控制line discipline */ unsigned char c_cc[NCC]; /* 控制字符特性*/ }; 二、作用 这个变量被用来提供一个健全的线路设置集合, 如果这个端口在被用户初始化前使用. 驱动初始化这个变量使用一个标准的数值集, 它拷贝自tty_std_termios 变量. tty_std_termos 在tty 核心被定义为: struct termios tty_std_termios = { .c_iflag = ICRNL | IXON, .c_oflag = OPOST | ONLCR, .c_cflag = B38400 | CS8 | CREAD | HUPCL, .c_lflag = ISIG | ICANON | ECHO | ECHOE | ECHOK | ECHOCTL | ECHOKE | IEXTEN, .c_cc = INIT_C_CC };这个struct termios 结构用来持有所有的当前线路设置, 给这个tty 设备的一个特定端口. 这些线路设置控制当前波特率, 数据大小, 数据流控设置, 以及许多其他值. 三、成员的值 (一)c_iflag 标志常量:Input mode ( 输入模式) input mode可以在输入值传给程序之前控制其处理的方式。其中输入值可能是由序列埠或键盘的终端驱动程序所接收到的字元。我们可以利用termios结构的c_iflag的标志来加以控制,其定义的方式皆以OR来加以组合。IGNBRK :忽略输入中的BREAK 状态。(忽略命令行中的中断) BRKINT :(命令行出现中断时,可产生一插断)如果设置了IGNBRK,将忽略BREAK。如果没有设置,但是设置了BRKINT,那么BREAK 将使得输入和输出队列被刷新,如果终端是一个前台进程组的控制终端,这个进程组中所有进程将收到SIGINT 信号。如果既未设置IGNBRK 也未设置BRKINT,BREAK 将视为与NUL 字符同义,除非设置了PARMRK,这种情况下它被视为序列377 � �。 IGNPAR :忽略桢错误和奇偶校验错。

基于Linux环境下串口通信的应用设计

导读]本文介绍了Linux环境下串口通信的设计方法和步骤,并介绍了ARM9微处理器s3c2440在Linux下和C8051Fxxx系列单片机进行串行通信的设计方法,给出了硬件连接和通信程序流程图。该方法可靠、实用,适用于大多数LinuxARM和单片机串口通信的场合。 0 引言 数据采集系统中由于单片机侧重于控制,数据处理能力较弱,对采集的数据进行运算处理比较繁琐,如果通过串口与上位机通信,利用上位机强大的数据处理能力和友好的控制界面对数据进行处理和显示则可以提高设计效率。串口通信以其简单的硬件连接,成熟的通信协议,成为上下位机之间通信的首选。移植了Linux 操作系统的s3c2440 可以在Linux 环境下操作串口,降低了串口操作的难度,可以使开发者集中精力开发大规模的应用程序,而不必在操作底层设计上耗费时间。 1 硬件连接 s3c2440 是三星公司生产的基于ARM9 核的处理器,采用3.3 V 电压供电; C8051Fxxx 系列单片机是美国CYGNAL 公司推出的与8051 兼容的高性能高速单片机,采用3.3 V 电压供电。两者供电电压相同,所以进行串行口通信时不需要进行电平转换。硬件连接采用最常用的TXD,RXD,GND 三线连接方式。注意采用交叉连接方式,即TXD?RXD,RXD?TXD. 2 Linux 下串口通信 2.1 Linux 下串口设备描述 s3c2440 上移植了Linux 2.6.32 操作系统,加载了s3c2440 的串口驱动程序,通过Linux 提供的串口操作函数和文件操作函数把对串口的操作等同于文件操作,降低了串口的操作难度,提高了效率。在程序中设备和文件都是通过文件描述符来操作的,文件描述符在Linux 内核中是一个非负整数。Linux 设备文件都存放在“/dev”目录下,串口也不例外,在/dev 中可以找到串口对应的设备文件,本文对应的串口1 的设备文件路径是“/dev /ttySAC1”。 2.2 Linux 下串口通信程序设计 串口通信需要设置一些参数,如波特率、数据位、停止位,输入输出方式等。这些参数都存在于Linux提供的termios 结构中,该结构是Linux 系统用于查询和操作各个终端的一个标准接口,定义在头文件《 ter-mios. h 》中,如下所示: STruct termios{tcflag_t c_iflag; /* 输入标志* /tcflag_t c_oflag; /* 输出标志* /tcflag_t c_cflag /* 控制标志* /tcflag_t c_lflag /* 本地标志* /cc_t c_cc[NCCS]; /* 控制特性* /} ;Linux 串口通信步骤可分为以下三步,操作流程如图1 所示。

Linux下串口通信

Linux下串口编程 Linux 系统下,诸如串口、触摸屏、GPIO、ADC 等等各种设备的操作,都是通过访问其对应的设备节点进行控制。相应地,串口通过访问/dev/ttyS0、/dev/ttyS1、/dev/ttyS2...对其进行配置与控制。 串口配置的参数包括:波特率,数据位,校验位,停止位与流控。串口的配置主要是通过配置struct termios结构体,其原型如下:#include struct termios { unsigned short c_iflag; /*输入模式标志*/ unsigned short c_oflag; /*输出模式标志*/ unsigned short c_cflag; /*控制模式标志*/ unsigned short c_lfag; /*本地模式标志*/ unsigned short c_line; /*line discipline*/ unsigned short c_cc[NCC]; /*control characters*/ }; 其中,通过对c_cflag与c_iflag的赋值,可以设置波特率、数据位、奇偶校验位、停止位、流控。 1、波特率配置 串口通过函数cfsetispeed和cfsetospeed设置端口的输入/输出波特率:

int cfsetispeed(struct termios *termios_p, speed_t speed); int cfsetospeed(struct termios *termios_p, speed_t speed); 其中termios_p为串口结构体termios指针变量;speed 为需要设置的串口传输速率,取值与波特率对应关系见表一: 表一 2、数据位配置 串口数据位的配置通过修改termios结构体成员c_cflag实现,CS5、CS6、CS7和CS8分别表示数据位为5、6、7和8。在设置数据位前,先使用CSIZE 做位屏蔽: termios_p.c_cflag&= ~CSIZE; termios_p.c_cflag |= CS5; /*配置为5数据位*/

linux标准输入输出重定向到串口设置指南

Linux标准输入输出重定向到串口指南 邮箱: 追风哥455546798@https://www.sodocs.net/doc/5b4866760.html, 描述: 设置linux系统的标准输入输出到com0(console口),以便维护人员在无网络、无显示器的情况下对系统维护。在各文件(/etc/grub.conf、/etc/inittab、/etc/securetty)中添加红色部分!文件修改完成后reboot系统即可在com0口看到标准输入输出信息。 1、grub.conf 文件配置 [root@localhost etc]# more grub.conf # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You do not have a /boot partition. This means that # all kernel and initrd paths are relative to /, eg. # root (hd0,0) # kernel /boot/vmlinuz-version ro root=/dev/sda1 # initrd /boot/initrd-[generic-]version.img #boot=/dev/sda default=2 timeout=10

splashimage=(hd0,0)/boot/grub/splash.xpm.gz hiddenmenu serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console title Red Hat Enterprise Linux (2.6.32-71.el6.i686) root (hd0,0) kernel /boot/vmlinuz-2.6.32-71.el6.i686 ro root=UUID=0cdc97d9-4515-461c- 9691-91a03b9a41ea console=ttyS0,115200n8 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet console=tty0 initrd /boot/initramfs-2.6.32-71.el6.i686.img 2、inittab 文件配置 [root@localhost etc]# more inittab id:3:initdefault: S0:2345:respawn:/sbin/agetty -L -f /etc/issueserial 115200 ttyS0 vt100 //说明在文件末尾添加S0:2345:xxxx行

相关主题