linux串口参数设置

合集下载

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。

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下串口通信主要有下面几个步骤串口通信流程图下面我会一一介绍这几个步骤。

1.打开串口代码(串口为ttyUSB0)[java] view plain copy1.//打开串口2.int open_port(void)3.{4.int fd;5.6.fd=open("/dev/ttyUSB0",O_RDWR | O_NOCTTY | O_NON BLOCK);//O_NONBLOCK设置为非阻塞模式,在read时不会阻塞住,在读的时候将read放在while循环中,下一节篇文档将详细讲解阻塞和非阻塞7.// printf("fd=%d\n",fd);8.9.if(fd==-1)10.{11.perror("Can't Open SerialPort");12.}13.14.return fd;15.}打开串口时也可以多加一些内容,比如判断串口为阻塞状态、测试是否为终端设备等,这些是必要的,所以较上面的基本的打开串口的代码,更加完整健壮一些的代码流程如下所示:打开串口较完整流程图代码:[cpp] view plain copy1./**2.* open port3.* @param fd4.* @param comport 想要打开的串口号5.* @return 返回-1为打开失败6.*/7.int open_port(int fd,int comport)8.{9.char *dev[]={"/dev/ttyUSB0","/dev/ttyS1","/dev/ttyS2"};10.11.if (comport==1)//串口112.{13.fd = open( "/dev/ttyUSB0", O_RDWR|O_NOCTTY|O_N DELAY);14.if (-1 == fd)15.{16.perror("Can't Open Serial Port");17.return(-1);18.}19.}20.else if(comport==2)//串口221.{22.fd = open( "/dev/ttyS1", O_RDWR|O_NOCTTY|O_NDEL AY); //没有设置<span style="font-family: Arial, Helvetica, sans-serif;">O_NONBLOCK非阻塞模式,也可以设置为非阻塞模式,两个模式在下一篇博客中具体说明</span>23.24.if (-1 == fd)25.{26.perror("Can't Open Serial Port");27.return(-1);28.}29.}30.else if (comport==3)//串口331.{32.fd = open( "/dev/ttyS2", O_RDWR|O_NOCTTY|O_NDEL AY);33.if (-1 == fd)34.{35.perror("Can't Open Serial Port");36.return(-1);37.}38.}39./*恢复串口为阻塞状态*/40.if(fcntl(fd, F_SETFL, 0)<0)41.printf("fcntl failed!\n");42.else43.printf("fcntl=%d\n",fcntl(fd, F_SETFL,0));44./*测试是否为终端设备*/45.if(isatty(STDIN_FILENO)==0)46.printf("standard input is not a terminal device\n");47.else48.printf("isatty success!\n");49.printf("fd-open=%d\n",fd);50.return fd;51.}关键函数解释:功能描述:用于打开或创建文件,成功则返回文件描述符,否则返回-1,open返回的文件描述符一定是最小的未被使用的描述符[cpp] view plain copy1.#include<fcntl.h>2.int open(const char *pathname, int oflag, ... );参数解释:pathname:文件路径名,串口在linux中被看做是一个文件oflag:一些文件模式选择,有如下几个参数可以设置•O_RDONLY只读模式•O_WRONLY只写模式•O_RDWR读写模式上面三个参数在设置的时候必须选择其中一个下面的是可选的•O_APPEND每次写操作都写入文件的末尾•O_CREAT如果指定文件不存在,则创建这个文件•O_EXCL如果要创建的文件已存在,则返回 -1,并且修改 errno 的值•O_TRUNC如果文件存在,并且以只写/读写方式打开,则清空文件全部内容•O_NOCTTY如果路径名指向终端设备,不要把这个设备用作控制终端。

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 serial console设置

linux serial console设置

摘要:介绍了使用minicom连接serial console的知识,以及在redhat平台上遇到ttyS0被占用的解决办法。

思路:首先确认/dev/ttyS0(既串口com)是否被识别,如果被xen占用,需要修改启动参数,重启系统。

然后配置serial port参数,设置完成后即可通过串口通信。

步骤:第一步:确认/dev/ttyS0(既串口com)被识别:# dmesg |grep ttyS0serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A00:0c: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A以上输出说明串口被识别。

# dmesg|grep ttyS0Xen virtual console successfully installed as ttyS0以上输出则说明串口被xen服务占用,我们需要修改启动参数,指定xen服务使用别的console。

安装redhat系统时,如果安装了虚拟机(Xen-enabled host。

Xen is a virtual machine monitor (VMM) for x86-compatible computers. Xen can securely execute multiple virtual machines, each running its own OS, on a single physical system with close-to-native performance. ),则xen可能会占用/dev/ttyS0,要想使用串口,我们需要修改启动设置,指定xen使用别的console(或是不使用任何console,我倾向于这种选择)。

修改启动设置,指定xen使用的console的方法如下:a)确定系统版本,以便找到需要修改的启动项:# uname -rLinux gic-ftp-lin-001.genotec.ch 2.6.18-8.el5xen从上面的输出,我们可以看出,现在系统版本是2.6.18-8。

Linux中如何把串口0改为普通串口使用

Linux中如何把串口0改为普通串口使用

Linux 中如何把串口 0 改为普通串口使用
开发板自带的 Linux 系统中,串口 0(对应设备/dev/ttySAC0)已经被用作控制台使用,如何把它 作为普通串口使用,需要改两个地方: 1. 在 bootloader 中把 Linux 启动参数的串口输出改为 null,根据使用 bootloader 的不同,可以又 分为两种情况:(1)使用 supervivi 作为 bootloader (2)使用 vboot 作为 bootloader 2. 屏蔽内核解压时的打印信息
ห้องสมุดไป่ตู้
下面是详细的修改步骤:
1. 在 bootloader 中修改启动内核启动参数 1.1 当使用 supervivi 作为 bootloader 时,修改 Linux 启动参数的方法
如果你使用了 supervivi 作为 bootloader,可以把内核启动时的输出信息屏蔽掉,或者改为其他 串口输出, 但无法去掉 supervivi 本身的输出信息。 参考用户手册 2.2.4 章节的方法修改, 如下: 在 BIOS 主菜单执行功能号[s],进入设置 Linux 启动参数子菜单,如图:
¦ò*AÞ=?±$i
Ö
_ ÈIFJ mach_type” ,再输入参数值
Linux_cmd_line 是经常用到的一个内核启动参数,例如要把内核的启动信息和登录终端改为串 口 1(默认是串口 0) ,则这样修改: 通过浏览参数,可以看到原来的参数:
Linux_cmd_line:noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
(1)浏览当前参数设置[v] 输入“v”可以浏览当前启动参数设置情况:
E÷i “

linux c语言编写modbus rtu例程 -回复

linux c语言编写modbus rtu例程 -回复

linux c语言编写modbus rtu例程-回复如何使用C语言在Linux下编写Modbus RTU例程,以实现数据的读取和写入。

Modbus是一种通信协议,用于在工业自动化系统中实现设备之间的数据通信。

RTU是Modbus协议的一种传输格式,其中数据以二进制形式传输。

在Linux系统中,我们可以使用C语言来编写Modbus RTU例程。

下面将一步一步回答如何实现数据的读取和写入。

第一步:设置串口参数在Linux中,我们可以使用串口来与Modbus设备进行通信。

首先,我们需要设置串口的波特率、数据位、停止位和校验位。

这可以通过C语言中的termios库函数来实现。

c#include <termios.h>int set_serial_port(int fd, int baudrate) {struct termios options;tcgetattr(fd, &options);cfsetispeed(&options, baudrate);cfsetospeed(&options, baudrate);options.c_cflag = (CLOCAL CREAD);options.c_cflag &= ~CSIZE;options.c_cflag = CS8;options.c_cflag &= ~PARENB;options.c_cflag &= ~CSTOPB;options.c_cflag &= ~CRTSCTS;tcsetattr(fd, TCSANOW, &options);}以上代码中,`set_serial_port`函数用于设置串口参数。

`fd`参数为串口文件描述符,`baudrate`参数为波特率。

其中,`cfsetispeed`和`cfsetospeed`函数用于设置输入和输出速度,`CLOCAL`和`CREAD`标志用于使串口工作在本地模式和可读模式,`CS8`标志用于设置8位数据位,`PARENB`标志用于禁用奇偶校验,`CSTOPB`标志用于设置停止位为1位,`CRTSCTS`标志用于禁用硬件流控制。

linux c语言 串口读取数据的方法

linux c语言 串口读取数据的方法

linux c语言串口读取数据的方法Linux下使用C语言读取串口数据的方法引言:串口是计算机和外部设备进行通信的一种重要的通信接口。

在Linux系统中,要使用C语言读取串口数据,需要通过打开串口设备文件,设置串口参数,并进行读取数据的操作。

本文将介绍如何通过C语言在Linux下读取串口数据的方法。

目录:1. 了解串口的工作原理2. 打开串口设备文件3. 设置串口参数4. 读取串口数据5. 示例程序6. 总结1. 了解串口的工作原理:在开始编写C语言读取串口数据的方法前,首先需要了解串口的工作原理。

串口是通过硬件电路实现两台设备之间的数据传输,属于一种异步串行通信方式。

典型的串口包含发送数据引脚(TX)、接收数据引脚(RX)、数据位、停止位、奇偶校验位等。

2. 打开串口设备文件:在Linux系统中,每个串口设备都被映射到一个设备文件上,例如/dev/ttyS0代表第一个串口设备,/dev/ttyUSB0代表第一个USB串口设备。

要使用C语言读取串口数据,需要首先打开相应的串口设备文件。

在C语言中,使用open()函数打开串口设备文件。

open()函数的原型如下:cint open(const char *pathname, int flags);其中pathname参数指定要打开的串口设备文件路径,flags参数指定打开方式。

常用的flags参数有O_RDONLY(只读方式打开)、O_WRONLY (只写方式打开)和O_RDWR(读写方式打开)。

例如,要打开第一个串口设备文件,可以调用open()函数如下:cint fd = open("/dev/ttyS0", O_RDWR);if (fd == -1){perror("Error opening serial port");return -1;}当open()函数成功打开串口设备文件时,会返回一个非负整数的文件描述符fd,用于后续的操作。

linux 串口工具 minicom安装配置

linux 串口工具 minicom安装配置

ubuntu下minicom的安装及使用使用Minicom是一款串口通信软件,在嵌入式开发领域应用十分广泛。

类似的软件还有Windows下的超级终端(Hyperterminal),Linux下的kermit等。

它们之间的区别很小,基本上可以互换,选择适合自己的就可以了。

安装:在中端输入sudo apt-get install minicom也可以用新立得软件包管理器安装Minicom选择菜单“系统| 系统管理| 新立得软件包管理器”,如图8-11所示。

单击“搜索”按钮,查找Minicom,右键单击列表中的“Minicom”,选择安装,确定之后管理器将自动从网络上下载Minicom的安装包并安装。

之后还可以在这个管理器中安装其他的工具,或者将过时的软件卸载配置:1 . 在终端中输入minicom以启动minicom;2. 先按下Ctrl + a, 放开, 再按o, 出现配置菜单.3. 选择Serial port setup, 此时所示图标在“Change which setting”中,键入“A”,此时光标移到第A项对应处:串口COM1对应ttyS0, COM2对应ttyS1. (注意选择)具体的配置信息如下所示:Serial port setup [Enter]+-------------------------------------------------------------+| A - Serial Device : /dev/ttyUSB0 || 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 || || Change which setting? |+-------------------------------------------------------------+注意:如果没有使用USB转串口,而是直接使用串口,那么Serial Device要配置为/dev/ttyS0(如果使用USB转串口,则需要查看dev下是否存在ttyUSB0,若没有,则创建一个:mknod /dev/ttyUSB0 c 188 0)对波特率,数据位和停止位进行配置,键入“E”,波特率选为115200 8N1 (奇偶校验无, 停止位1),硬/软件流控制分别键入“F”“G”并且都选NO.在确认配置正确之后,可键入回车返回上级配置界面,并将其保存为默认配置。

修改UBOOT和LINUX调试串口(TI--DM6467)

修改UBOOT和LINUX调试串口(TI--DM6467)

1.1 概述TI针对DM6467提供的UBOOT和内核默认都是串口0作为调试串口输出的,但现在我需要使用DM6467的UART0的modem功能,所以修改代码,改变调试串口为串口2。

需要修改的主要有几部分内容:1. UBL 代码(这部分代码在刚上电的时候,初始化CPU和拷贝UBOOT到DDR,打印信息只有很少,所以不做修改)。

2. UBOOT代码。

3. linux内核驱动。

2.1 修改UBOOT代码因为DM6467的串口是符合TL16C550标准的,所以驱动也是使用16550的驱动,默认情况下,我们只需要提供需要配置的串口的基地址和中断号等资源给16550的驱动就可以了,寄存器的配置不需要我们去关心。

要用起DM6467的串口有几个地方的配置一定要注意:1. 引脚复用寄存器(PINMUX0/1);2. VDD3P3V_PWDN寄存器,需要使能UART的相关引脚(bit4~bit9置零)3.CLKCTL,bit24/25置零。

在UBOOT里涉及到上面几个寄存器的配置的是在dm6467_evm.c的初始化部分我的修改如下:1static void davinci_hd_psc_enable ( void )2 {3 unsigned int alwaysonpdnum = 0;45/* Note this function assumes that the Power Domains are alread on */6 REG(PSC_ADDR+0xA00+4*14) |= 0x03; /* EMAC */7 REG(PSC_ADDR+0xA00+4*15) |= 0x03; /* VDCE */8 REG(PSC_ADDR+0xA00+4*16) |= 0x03; /* Video Port */9 REG(PSC_ADDR+0xA00+4*17) |= 0x03; /* Video Port */10 REG(PSC_ADDR+0xA00+4*20) |= 0x03; /* DDR2 */11 REG(PSC_ADDR+0xA00+4*21) |= 0x03; /* EMIFA */12 REG(PSC_ADDR+0xA00+4*26) |= 0x03; /* UART0 */13 REG(PSC_ADDR+0xA00+4*27) |= 0x03; /* UART1 */14 REG(PSC_ADDR+0xA00+4*28) |= 0x03; /* UART2 */15 REG(PSC_ADDR+0xA00+4*31) |= 0x03; /* I2C */16 REG(PSC_ADDR+0xA00+4*33) |= 0x03; /* GPIO */17 REG(PSC_ADDR+0xA00+4*34) |= 0x03; /* TIMER0 */18 REG(PSC_ADDR+0xA00+4*35) |= 0x03; /* TIMER1 */1920/* Set PTCMD.GO to 0x1 to initiate the state transtion for Modules i n21 * the ALWAYSON Power Domain22*/23 REG(PSC_PTCMD) = (1<<alwaysonpdnum);2425/* Wait for PTSTAT.GOSTAT0 to clear to 0x0 */26while(! (((REG(PSC_PTSTAT) >> alwaysonpdnum) & 0x00000001) == 0));2728/* Enable GIO3.3V cells used for EMAC (???) */29 REG(VDD3P3V_PWDN) = (1<<27); //disable clkout03031/* Select UART function on UART0 */32 REG(PINMUX0) &= ~(0x0000003f << 18);34 REG(PINMUX1) = ((1<<4)|(1<<2)|(1<<0));3536/* Enable USB */37 REG(PINMUX0) &= ~(0x80000000);3839/* Set the Bus Priority Register to appropriate value */40 REG(VBPR) = 0x20;41 }接下来还有一个比较重要的地方需要修改,因为DM6467的串口是支持多种模式的,但16550的驱动是默认设备是工作在UART模式的,它没有去配置设备串口的工作模式,所以我们需要去配置一下串口的工作模式。

linux调试串口程序,脱离硬件

linux调试串口程序,脱离硬件

linux调试串口程序,脱离硬件由于笔记本没有串口,同时没有硬件设备(串口或串口线),并且在ubuntu下不知道有没虚拟串口软件,想要在用虚拟机VM安装的ubuntu系统中调试程序,需要以下条件,VSPD软件(好像只有xp版)和串口调试助手。

Xp(COM3)与ubuntu(COM2)的串口通信调试:1、在XP下安装VSPD,增加一对串口COM2和COM3;2、在XP下运行串口调试助手UartAssist,测试串口是否能够正常使用;3、关闭(关机)ubuntu系统,点击菜单的“虚拟机”->“设置”->“添加”,在接下来的步骤中选择“串口”,选择“物理端口”,选择“COM2”,添加完成,确定。

启动ubuntu系统;4、在XP下用UartAssist连接上COM3,波特率9600,8,1;5、进入ubuntu系统(最好安装VM tools),在Ubuntu软件中心中搜索串口测试软件CuteCom,并安装,在“应用程序”-“ubuntu software center”中搜索选择“CuteCom”,运行(命令行中输入cutecom),Open串口“ttyS0”(这就是刚刚添加的COM2),设置波特率9600,8,1,打开串口;6、在CuteCom中输入hello,回车发送。

7、回到XP中,如果UartAssist正在监听COM3,那么会在UartAssist中接收到hello。

8、最终,xp中的UartAssist便可以和ubuntu中的CuteCom进行通信,便实现xp和linux 的串口通信。

(可以将两端的串口调试软件换成自己的代码)。

ubuntu(COM2)与ubuntu(COM3)串口通信调试:1、2、3、在上面的3的同时多添加一个COM口COM3。

4、这样就可以中ubuntu linux中使用两个串口程序进行串口调试。

Linux下minicom 的安装与配置

Linux下minicom 的安装与配置

Linux下minicom 的安装与配置1. minicom是Linux下的串口调试工具, 首先查看是否安装了minicom$ sudo minicom -s如果出现配置信息列表, 则表示系统已安装.2. 下载安装minicom$ sudo apt-get install minicom3. 运行minicom$ sudo minicom -s命令进入配置界面+----[配置]--------------------+| 文件名和路径| 文件传输协议| 串口设置| 调制解调器和拨号| 屏幕和键盘| 设置保存为dfl| 设置保存为..| 退出| 退出Minicom+--------------------------------+4. 配置串口选择串口设置, 进入串口配置界面+----------------------------------------------+A - 串口设备: /dev/ttyS1B - 锁文件的位置: /var/lockC - 调入程序:D - 调出程序:E - Bps/Par/Bits: 115200 8N1F - 硬件数据流控制: 否G - 软件数据流控制: 否希望修改哪个设置?+----------------------------------------------+选择串口设备, 在Linux下, COM0端口为/dev/ttyS0, COM1端口为/dev/ttyS1.设置波特率和帧格式, 115200 8N1(115200 8N1: 115200为波特率, 8表示帧数据长度为8, N表示无奇偶校验位, 1表示1位停止位).设置完毕后, 按回车键返回主配置界面.5. 保存配置有两个保存选项: “设置保存为dfl”和”设置保存为..”设置保存为dfl: 将配置保存为默认配置, 下次运行”sodu minicom”命令时, 自动启用该配置. 设置保存为..: 保存配置文件, 下次运行”sudo minicom 配置名”时启用配置文件. 如果配置名为空, 则启用默认配置.6. 退出有两个退出选项: “退出”和”退出Minicom”退出: 退出配置界面, 并启用当前配置.退出Minicom: 退出软件.命令帮助-- “Ctrl+A”后按”Z”清屏-- ”Ctrl+A”后按”C”设置-- ”Ctrl+A”后按”O”发送文件-- ”Ctrl+A”后按”S”退出-- ”Ctrl+A”后按”Q”。

关闭Linux串口调试

关闭Linux串口调试

关闭Linux串口的调试功能
一直以来,我们都习惯使用Linux串口登陆Linux控制台,但一般开发板一般是只有一个串口的,但是我们有时候会使用串口进行正常的通信,而Linux控制台默认占用了该串口,导致不能应用程序使用该串口,所以我们有必要释放串口。

下面以OK6410为例,飞凌6410的Linux源码存放在\Linux-3.0.1\kernel_sourcecode\下,将源码的压缩包拖放到虚拟机的Linux,打开终端,tar xvzf linux-3.0.1-v7.40-2014-09-13.tar.gz,解压该压缩包。

1.切换root身份,改变工作目录为Linux所在的目录,执行make menuconfig,进入内核配置选项
2.选择Device Drivers->Character devices->Serial drivers->Support for console on Samsung Soc serial port,按N取消该项,选择EXIT退出并保存设置。

3.执行make zImage 编译内核,将得到的内核和uboot、yaffs文件系统放在一起,烧录进开发板。

4.此时开发板已经不能用串口登陆控制台,可以设置开发板和PC在同一网段,用网线连接开发板和PC,然后用Xshell以拨号登陆控制台,不再细说,其他开发板类似。

之所以用光盘里的源码是因为光盘的源码是通过编译的,想折腾的朋友可以重新移植Linux
内核,这样学得更多。

Linux串口设置参数

Linux串口设置参数

Linux串口设置参数在Linux环境下,串口名从ttyS0开始依次是ttyS1、ttyS2等。

在本程序中,使用ttyS0作为通信串口。

在打开ttyS0的时候,选项O_NOCTTY 表示不能把本串口当成控制终端,否则用户的键盘输入信息将影响程序的执行; O_NDELAY表示打开串口的时候,程序并不关心另一端的串口是否在使用中。

在Linux中,打开串口设备和打开普通文件一样,使用的是open()系统调用。

比如我么打开串口设备1也就是COM1,只需要:fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY );打开的串口设备有很多设置选项。

本文中使用int setup_com(int fd)设置。

在系统头文件<termios.h>中定义了终端控制结构struct termios,tcgetattr()和tcsetattr()两个系统函数获得和设置这些属性。

结构struct termios中的域描述的主要属性包括:c_cflag :控制选项c_lflag :线选项c_iflag :输入选项c_oflag :输出选项c_cc :控制字符c_ispeed :输入数据波特率c_ospeed :输出数据波特率如果要设置某个选项,那么就使用"|="运算,如果关闭某个选项就使用"&="和"~"运算。

本文使用的各个选项的意义定义如下:c_cflag: CLOCAL 本地模式,不改变端口的所有者CREAD 表示使能数据接收器PARENB 表示偶校验PARODD 表示奇校验CSTOPB 使用两个停止位CSIZE 对数据的bit使用掩码CS8 数据宽度是8bitc_lflag: ICANON 使能规范输入,否则使用原始数据(本文使用)ECHO 回送(echo)输入数据ECHOE 回送擦除字符ISIG 使能SIGINTR,SIGSUSP, SIGDSUSP和 SIGQUIT 信号c_iflag: IXON 使能输出软件控制IXOFF 使能输入软件控制IXANY 允许任何字符再次开启数据流INLCR 把字符NL(0A)映射到CR(0D)IGNCR 忽略字符CR(0D)ICRNL 把CR(0D)映射成字符NR(0A)c_oflag: OPOST 输出后处理,如果不设置表示原始数据(本文使用原始数据)c_cc[VMIN]:最少可读数据c_cc[VTIME]:等待数据时间(10秒的倍数)根据以上设置的定义,串口端口设置函数setup_com()定义如下:int setup_com(int fd){struct termios options;tcgetattr(fd, &options);/* Set the baud rates to 38400...*/cfsetispeed(&options, B38400);cfsetospeed(&options, B38400);/* Enable the receiver and set local mode...*/options.c_cflag |= (CLOCAL | CREAD);/* Set c_cflag options.*/options.c_cflag |= PARENB;options.c_cflag &= ~PARODD;options.c_cflag &= ~CSTOPB;options.c_cflag &= ~CSIZE;options.c_cflag |= CS8;/* Set c_iflag input options */options.c_iflag &=~(IXON | IXOFF | IXANY);options.c_iflag &=~(INLCR | IGNCR | ICRNL);options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);/* Set c_oflag output options */options.c_oflag &= ~OPOST;/* Set the timeout options */options.c_cc[VMIN] = 0;options.c_cc[VTIME] = 10;tcsetattr(fd, TCSANOW, &options);return 1;}6.7.2 设置串口通信参数串口通信参数指的是波特率、数据位、奇偶校验位和停止位。

linux串口配置参数

linux串口配置参数

linux串口配置参数Linux操作系统提供了丰富的串口资源,支持通过串口与外部设备进行通信。

在Linux下配置串口参数需要关注以下几个关键要素:串口号、波特率、数据位、停止位、校验位和流控制等。

下面将详细介绍如何配置这些参数。

一、确定串口号在Linux系统中,每个串口设备都有一个唯一的串口号,可以通过ls/dev/tty*命令查看系统中的所有串口设备。

在配置串口参数之前,需要确定要使用的串口号。

通常,串口号以/dev/ttyS或/dev/ttyUSB开头,可以根据实际情况进行判断。

二、配置波特率波特率是串口通信中最基本的参数之一,它决定了数据传输的速度。

在Linux系统中,可以使用minicom或screen等终端仿真器进行串口通信,这些工具默认使用9600波特率。

可以根据实际需求进行调整,常见的波特率有115200、57600等。

可以使用cat/proc/stty串口文件查看当前配置的波特率。

三、设置数据位、停止位和校验位数据位、停止位和校验位是串口通信中的其他重要参数。

数据位决定了传输的数据位数,常见的有5、6、7和8位等;停止位决定了传输的停顿时间,常见的有1、1.5和2位等;校验位则用于检查数据传输过程中的错误,常见的有奇校验和偶校验等。

这些参数可以在终端仿真器的配置中进行设置,也可以使用stty命令进行全局配置。

四、启用流控制流控制用于控制数据传输过程中的流量,避免数据传输过快导致丢包或溢出等问题。

常见的流控制方式有软件流控制(xon/xoff)和硬件流控制(rts/cts)。

软件流控制通过检测串口输入流控制信号(xon/xoff)来实现流量控制;硬件流控制通过控制数据端口的电平来实现流量控制。

可以在终端仿真器的配置中启用相应的流控制方式。

五、测试配置效果完成串口参数配置后,可以通过串口通信测试来验证配置是否正确。

可以使用cat或echo命令将数据发送到串口设备,并使用另一终端仿真器接收数据,观察是否能够正常通信。

linux 串口vtime参数范围 -回复

linux 串口vtime参数范围 -回复

linux 串口vtime参数范围-回复Linux 串口vtime参数范围在Linux系统中,串口是一种常见的通信接口,用于连接计算机和外部设备,比如调制解调器、传感器等。

在使用Linux系统进行串口通信时,我们可以通过设置vtime参数来控制串口读取数据的超时时间。

本文将详细介绍vtime参数的功能和范围。

一、什么是vtime参数?在串口通信中,数据的传输需要有一个超时机制,以确保数据能够正常传输。

vtime参数就是用来设置串口读取数据的超时时间。

它以十分之一秒(10毫秒)为单位,表示在读取数据时等待的时间。

vtime参数的默认值为0,即不等待,立即返回数据。

二、vtime参数范围vtime参数的范围在0到255之间。

下面将详细介绍不同范围的取值对串口读取数据的影响。

1. vtime参数为0当vtime参数为0时,表示不等待接收数据,立即返回已有的数据。

这种设置适用于那些数据传输速度非常快且实时性要求较高的场景,比如传感器读取数据。

2. vtime参数大于0且小于255当vtime参数大于0且小于255时,表示等待的时间为vtime参数值乘以10毫秒。

该设置适用于传输速度较慢的设备,这种设置可以有效避免由于设备响应时间较慢而导致的数据读取异常。

举例来说,假设vtime参数设置为10,那么在读取数据时,串口会等待100毫秒。

如果在等待时间内读取到有效数据,则立即返回。

如果等待时间达到100毫秒后仍未读取到有效数据,则会返回已经读取到的数据。

3. vtime参数为255当vtime参数设置为255时,表示不进行超时等待,即无限等待接收数据。

与vtime参数为0不同的是,该设置会一直等待数据到达。

适用于场景,当我们要读取的数据的长度不确定时,可以使用该设置。

需要注意的是,在使用vtime参数为255的设置时,如果长时间没有读取到数据,程序会一直等待,可能会导致程序阻塞。

因此,在使用该设置时,需要特别小心控制等待时间,以避免程序的异常退出。

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

串口设置详解
本节主要讲解设置串口的主要方法。
如前所述,设置串口中最基本的包括波特率设置,校验位和停止位设置。串口的
设置主要是设置 struct termios 结构体的各成员值,如下所示: #include
struct termio
{ unsigned short c_iflag; /* 输入模式标志 */ unsigned short c_oflag; /* 输出模式标志 */ unsigned short c_cflag; /* 控制模式标志*/ unsigned short c_lflag; /*本地模式标志 */
是比较常用的标志。在此主要对这 3 个成员进行详细说明。
c_cflag 支持的常量名称
CBAUD 波特率的位掩码
B0
0 波特率(放弃 DTR)
B1800 1800 波特率
B2400 2400 波特率
B4800 4800 波特率
B9600 9600 波特率
B19200 19200 波特率
B38400 38400 波特率
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_iflag |= (INPCK | ISTRIP); newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD; break; case 'N': newtio.c_cflag &= ~PARENB; break; } switch( nSpeed ) { 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); break;
linux 基础复习(7)串口应用开发
据通信的基本方式可分为并行通信与串行通信两种。
并行通信是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传 输速度快,适用于短距离通信,但要求传输速度较高的应用场合。
串行通信是指利用一条传输线将资料一位位地顺序传送。特点是通信线路简单, 利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的 应用场合。
break; case 'N': //无奇偶校验位 newtio.c_cflag &= ~PARENB;
break; } /*设置波特率*/ switch( nSpeed ) {
case 2400: cfsetispeed(&newtio, B2400); cfsetospeed(&newtio, B2400);
PARODD 使用奇校验而不使用偶校验
HUPCL 最后关闭时挂线(放弃 DTR)
CLOCAL 本地连接(不改变端口所有者)
LOBLK 块作业控制输出
CNET_CTSRTS 硬件流控制使能
c_iflag 支持的常量名称 INPCK 奇偶校验使能 IGNPAR 忽略奇偶校验错误 PARMRK 奇偶校验错误掩码 ISTRIP 除去奇偶校验位 IXON 启动出口硬件流控 IXOFF 启动入口软件流控 IXANY 允许字符重新启动流控 IGNBRK 忽略中断情况 BRKINT 当发生中断时发送 SIGINT 信号 INLCR 将 NL 映射到 CR IGNCR 忽略 CR ICRNL 将 CR 映射到 NL IUCLC 将高位情况映射到低位情况 IMAXBEL 当输入太长时回复 ECHO
fcntl(fd, F_SETFL, 0);
接着,测试打开的文件描述府是否引用一个终端设备,以进一步确认串口是否 正确打开。
isatty(STDIN_FILENO); 串口的读写与普通文件一样,使用 read,write 函数。
read(fd,buff,8); write(fd,buff,8); 实例
break; case 4800:
cfsetispeed(&newtio, B4800); cfsetospeed(&newtio, B4800); break; case 9600: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break; case 115200: cfsetispeed(&newtio, B115200); cfsetospeed(&newtio, B115200); break; case 460800: cfsetispeed(&newtio, B460800); cfsetospeed(&newtio, B460800); break; default: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break; } /*设置停止位*/ if( nStop == 1 ) newtio.c_cflag &= ~CSTOPB; else if ( nStop == 2 ) newtio.c_cflag |= CSTOPB; /*设置等待时间和最小接收字符*/ newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 0; /*处理未接收字符*/ tcflush(fd,TCIFLUSH); /*激活新配置*/
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_iflag |= (INPCK | ISTRIP); newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD;
if((tcsetattr(fd,TCSANOW,&newtio))!=0) {
perror("com set error"); return -1; } printf("set done!\n"); return 0; } [b]串口使用详解[/b] 在配置完串口的相关属性后,就可对串口进行打开,读写操作了。其使用方式与 文件操作一样,区别在于串口是一个终端设备。
串口控制函数
Tcgetattr 取属性(termios 结构)
Tcsetattr 设置属性(termios 结构)
cfgetispeed 得到输入速度
Cfgetospeed
得到输出速度
Cfsetispeed
设置输入速度
Байду номын сангаас
Cfsetospeed
设置输出速度
Tcdrain
等待所有输出都被传输
tcflow
[b]打开串口[/b] fd = open( "/dev/ttyS0", O_RDWR|O_NOCTTY|O_NDELAY);
Open 函数中除普通参数外,另有两个参数 O_NOCTTY 和 O_NDELAY。 O_NOCTTY: 通知 linix 系统,这个程序不会成为这个端口的控制终端。 O_NDELAY: 通知 linux 系统不关心 DCD 信号线所处的状态(端口的另一端 是否激活或者停止)。 然后,恢复串口的状态为阻塞状态,用于等待串口数据的读入。用 fcntl 函数:
挂起传输或接收
tcflush
刷清未决输入和/或输出
Tcsendbreak
送 BREAK 字符
tcgetpgrp
得到前台进程组 ID
tcsetpgrp
设置前台进程组 ID
[color=#ff0000]完整的串口配置模板,实用!把常用的选项在函数里面列出, 可大大方便用户的调试使用[/color]
int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop) {
case 115200: cfsetispeed(&newtio, B115200); cfsetospeed(&newtio, B115200); break;
default: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break;
struct termios newtio,oldtio; /*保存测试现有串口参数设置,在这里如果串口号等出错,会有相关的出错信 息*/ if ( tcgetattr( fd,&oldtio) != 0) {
perror("SetupSerial 1"); return -1; } bzero( &newtio, sizeof( newtio ) ); /*步骤一,设置字符大小*/ newtio.c_cflag |= CLOCAL | CREAD; newtio.c_cflag &= ~CSIZE; /*设置停止位*/ switch( nBits ) { case 7:
相关文档
最新文档