linux串口配置

合集下载

Linux下串口通信编程

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。

异步通信的优点是不需要传送同步脉冲,字符帧长度也不受到限制。

linux串口编程参数配置详解

linux串口编程参数配置详解

linux串口编程参数配置详解1.linux串口编程需要的头文件#include <stdio.h> //标准输入输出定义#include <stdlib.h> //标准函数库定义#include <unistd.h> //Unix标准函数定义#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> //文件控制定义#include <termios.h> //POSIX中断控制定义#include <errno.h> //错误号定义2.打开串口串口位于/dev中,可作为标准文件的形式打开,其中:串口1 /dev/ttyS0串口2 /dev/ttyS1代码如下:int fd;fd = open(“/dev/ttyS0”, O_RDWR);if(fd == -1){Perror(“串口1打开失败!”);}//else//fcntl(fd, F_SETFL, FNDELAY);除了使用O_RDWR标志之外,通常还会使用O_NOCTTY和O_NDELAY这两个标志。

O_NOCTTY:告诉Unix这个程序不想成为“控制终端”控制的程序,不说明这个标志的话,任何输入都会影响你的程序。

O_NDELAY:告诉Unix这个程序不关心DCD信号线状态,即其他端口是否运行,不说明这个标志的话,该程序就会在DCD信号线为低电平时停止。

3.设置波特率最基本的串口设置包括波特率、校验位和停止位设置,且串口设置主要使用termios.h头文件中定义的termios结构,如下:struct termios{tcflag_t c_iflag; //输入模式标志tcflag_t c_oflag; //输出模式标志tcflag_t c_cflag; //控制模式标志tcflag_t c_lflag; //本地模式标志cc_t c_line; //line disciplinecc_t c_cc[NCC]; //control characters}代码如下:int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300, B384 00, B19200, B9600, B4800, B2400, B1200, B300, };int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9 600, 4800, 2400, 1200, 300, };void SetSpeed(int fd, int speed){int i;struct termios Opt; //定义termios结构if(tcgetattr(fd, &Opt) != 0){perror(“tcgetattr fd”);return;}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]);if(tcsetattr(fd, TCSANOW, &Opt) != 0){perror(“tcsetattr fd”);return;}tcflush(fd, TCIOFLUSH);}}}注意tcsetattr函数中使用的标志:TCSANOW:立即执行而不等待数据发送或者接受完成。

linux 串口初始化程序实例

linux 串口初始化程序实例

linux 串口初始化程序实例Linux 串口初始化程序实例在Linux系统中,串口是一种常见的通信接口,用于连接计算机与外部设备,实现数据的传输和通信。

本文将介绍一个基于Linux系统的串口初始化程序实例,帮助读者了解如何在Linux系统中进行串口的初始化配置。

我们需要打开终端并登录到Linux系统。

然后,通过以下命令查看系统中可用的串口设备:```ls /dev/ttyS*```该命令将列出系统中所有的串口设备,例如/dev/ttyS0、/dev/ttyS1等。

根据实际情况,选择需要初始化的串口设备。

接下来,我们需要使用stty命令来配置串口的参数,如波特率、数据位、校验位、停止位等。

例如,假设我们将串口设备设置为波特率9600,数据位8位,无校验位,停止位为1位,可以使用以下命令进行配置:```stty -F /dev/ttyS0 9600 cs8 -parenb -cstopb其中,-F参数指定要配置的串口设备,9600为波特率,cs8为数据位8位,-parenb为无校验位,-cstopb为停止位1位。

配置完成后,我们可以通过以下命令检查串口的参数配置是否正确:```stty -F /dev/ttyS0 -a```该命令将显示串口的当前参数配置,包括波特率、数据位、校验位、停止位等。

接下来,我们可以使用串口设备进行数据的收发。

例如,可以使用cat命令从串口设备读取数据:```cat /dev/ttyS0```该命令将会连续地从串口设备读取数据并输出到终端。

如果需要通过串口发送数据,可以使用echo命令:```echo "Hello, Serial Port!" > /dev/ttyS0该命令将向串口设备发送字符串"Hello, Serial Port!"。

通过以上步骤,我们就完成了Linux系统中串口的初始化配置。

读者可以根据实际需求,对串口的参数进行相应的配置,并使用串口进行数据的收发。

linux下的串口通信原理及编程实例

linux下的串口通信原理及编程实例

linux下的串⼝通信原理及编程实例linux下的串⼝通信原理及编程实例⼀、串⼝的基本原理1 串⼝通讯串⼝通讯(Serial Communication),是指外设和计算机间,通过数据信号线、地线等,按位进⾏传输数据的⼀种通讯⽅式。

串⼝是⼀种接⼝标准,它规定了接⼝的电⽓标准,没有规定接⼝插件电缆以及使⽤的协议。

2 串⼝通讯的数据格式 ⼀个字符⼀个字符地传输,每个字符⼀位⼀位地传输,并且传输⼀个字符时,总是以“起始位”开始,以“停⽌位”结束,字符之间没有固定的时间间隔要求。

每⼀个字符的前⾯都有⼀位起始位(低电平),字符本⾝由7位数据位组成,接着字符后⾯是⼀位校验位(检验位可以是奇校验、偶校验或⽆校验位),最后是⼀位或⼀位半或⼆位停⽌位,停⽌位后⾯是不定长的空闲位,停⽌位和空闲位都规定为⾼电平。

实际传输时每⼀位的信号宽度与波特率有关,波特率越⾼,宽度越⼩,在进⾏传输之前,双⽅⼀定要使⽤同⼀个波特率设置。

3 通讯⽅式单⼯模式(Simplex Communication)的数据传输是单向的。

通信双⽅中,⼀⽅固定为发送端,⼀⽅则固定为接收端。

信息只能沿⼀个⽅向传输,使⽤⼀根传输线。

半双⼯模式(Half Duplex)通信使⽤同⼀根传输线,既可以发送数据⼜可以接收数据,但不能同时进⾏发送和接收。

数据传输允许数据在两个⽅向上传输,但是,在任何时刻只能由其中的⼀⽅发送数据,另⼀⽅接收数据。

因此半双⼯模式既可以使⽤⼀条数据线,也可以使⽤两条数据线。

半双⼯通信中每端需有⼀个收发切换电⼦开关,通过切换来决定数据向哪个⽅向传输。

因为有切换,所以会产⽣时间延迟,信息传输效率低些。

全双⼯模式(Full Duplex)通信允许数据同时在两个⽅向上传输。

因此,全双⼯通信是两个单⼯通信⽅式的结合,它要求发送设备和接收设备都有独⽴的接收和发送能⼒。

在全双⼯模式中,每⼀端都有发送器和接收器,有两条传输线,信息传输效率⾼。

显然,在其它参数都⼀样的情况下,全双⼯⽐半双⼯传输速度要快,效率要⾼。

linux初始化串口参数

linux初始化串口参数

linux初始化串口参数初始化 Linux 串口参数要初始化 Linux 串口,你需要遵循以下步骤:1. 确定串口名称使用 `ls -l /dev/serial/by-id/` 或 `dmesg | grep tty` 命令找出分配给串口的设备名称。

2. 打开串口使用 `open()` 函数打开串口,例如:```cint fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY);```3. 设置串口参数使用 `tcgetattr()` 和 `tcsetattr()` 函数设置串口参数。

这些参数包括波特率、数据位、停止位和奇偶校验:```cstruct termios options;tcgetattr(fd, &options);cfsetispeed(&options, B115200);cfsetospeed(&options, B115200);options.c_cflag &= ~PARENB;options.c_cflag &= ~CSTOPB;options.c_cflag &= ~CSIZE;options.c_cflag |= CS8;tcsetattr(fd, TCSANOW, &options);```4. 启用流控制 (可选)如果需要流控制,可以使用 `tcflow()` 函数启用它: ```cstruct termios options;tcgetattr(fd, &options);options.c_iflag |= IXON | IXOFF;tcsetattr(fd, TCSANOW, &options);```5. 配置接受模式使用 `fcntl()` 函数配置串口接受模式,例如:```cfcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK); ```6. 读取和写入数据要读取和写入数据,可以使用 `read()` 和 `write()` 函数: ```cchar buffer[1024];read(fd, buffer, sizeof(buffer));write(fd, buffer, sizeof(buffer));```示例代码以下是一个示例代码,演示如何使用上面讨论的步骤初始化Linux 串口:```c#include <stdio.h>#include <fcntl.h>#include <termios.h>#include <unistd.h>int main() {int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY);if (fd < 0) {perror("open");return -1;}struct termios options;tcgetattr(fd, &options);cfsetispeed(&options, B115200); cfsetospeed(&options, B115200); options.c_cflag &= ~PARENB;options.c_cflag &= ~CSTOPB;options.c_cflag &= ~CSIZE;options.c_cflag |= CS8;tcsetattr(fd, TCSANOW, &options);fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK); char buffer[1024];read(fd, buffer, sizeof(buffer));write(fd, buffer, sizeof(buffer));close(fd);return 0;}```。

Linux串口通信编程

Linux串口通信编程

2) 设置属性:奇偶校验位、数据位、停止位。

主要设置<termbits.h>中的termios3) 打开、关闭和读写串口。

串口作为设备文件,可以直接用文件描述符来进行网上的一个例子:/*串口设备无论是在工控领域,还是在嵌入式设备领域,应用都非常广泛。

而串口编程也就显得必不可少。

偶然的一次机会,需要使用串口,而且操作系统还要求是Linux,因此,趁着这次机会,综合别人的代码,进行了一次整理和封装。

具体的封装格式为C代码,这样做是为了很好的移植性,使它可以在C和C++环境下,都可以编译和使用。

代码的头文件如下: *//////////////////////////////////////////////////////////////////// //////////////filename:stty.h#ifndef__STTY_H__#define__STTY_H__//包含头文件#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<termios.h>#include<errno.h>#include<pthread.h>//// 串口设备信息结构typedef struct tty_info_t{int fd;// 串口设备IDpthread_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 st opbits);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/*从头文件中的函数定义不难看出,函数的功能,使用过程如下:(1)打开串口设备,调用函数setTTYSpeed();(2)设置串口读写的波特率,调用函数setTTYSpeed();(3)设置串口的属性,包括停止位、校验位、数据位等,调用函数setTTYParity ();(4)向串口写入数据,调用函数sendnTTY();(5)从串口读出数据,调用函数recvnTTY();(6)操作完成后,需要调用函数cleanTTY()来释放申请的串口信息接口;其中,lockTTY()和unlockTTY()是为了能够在多线程中使用。

Linux串口打印设置

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”(波特率)界面,如下图所示。

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

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

Linux标准输入输出重定向到串口指南邮箱:追风哥455546798@描述:设置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/sdadefault=2timeout=10splashimage=(hd0,0)/boot/grub/splash.xpm.gzhiddenmenuserial --unit=0 --speed=115200 --word=8 --parity=no --stop=1terminal --timeout=10 serial consoletitle Red Hat Enterprise Linux (2.6.32-71.el6.i686)root (hd0,0)kernel /boot/vmlinuz-2.6.32-71.el6.i686 roroot=UUID=0cdc97d9-4515-461c-9691-91a03b9a41ea console=ttyS0,115200n8 rd_NO_LUKS rd_NO_LVMrd_NO_MD rd_NO_DMLANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quietconsole=tty0initrd /boot/initramfs-2.6.32-71.el6.i686.img2、inittab 文件配置[root@localhost etc]# more inittabid:3:initdefault:S0:2345:respawn:/sbin/agetty -L -f /etc/issueserial 115200 ttyS0 vt100//说明在文件末尾添加S0:2345:xxxx行3、securetty 文件配置[root@localhost etc]# more securetty vc/10tty1tty2ttyS0//说明在文件末尾添加ttyS0。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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看到完整信息.。

相关文档
最新文档