串口属性设置
1. 属性描述
串口属于终端设备,其接口属性用termios结构描述,如程序清单13.9所示。
程序清单13.9termios结构
struct termios {
tcflag_t c_cflag/* 控制标志*/
tcflag_t c_iflag;/* 输入标志*/
tcflag_t c_oflag;/* 输出标志*/
tcflag_t c_lflag;/* 本地标志*/
tcflag_t c_cc[NCCS];/* 控制字符*/
};
粗略而言,控制标志影响到RS-232串行线(如:忽略调制解调器的状态线、每个字符需要一个或两个停止位等),输入标志由终端设备驱动程序用来控制字符的输入(如:剥除输入字节的第8位,允许输入奇偶校验等),输出控制则控制驱动程序输出(如:执行输出处理、将换行符映射为CR/LF等),本地标志影响驱动程序和用户之间的接口(如:本地回显的开和关等),c_cc数组则包含了所有可以更改的特殊字符。
(1)控制标志
c_cflag成员控制着波特率、数据位、奇偶校验、停止位以及流控制,表13.4列出了c_cflag 可用的部分选项。
表13.4c_cflag部分可用选项
标志说明标志说明
CBAUD 波特率位屏蔽CSIZE 数据位屏蔽
B0 0位/秒(挂起)CS5 5位数据位
B110 100位/秒CS6 6位数据位
B134 134位/秒CS7 7位数据位
B1200 1200位/秒CS8 8位数据位
B2400 2400位/秒CSTOPB 2位停止位,否则为1位
B4800 4800位/秒CREAD 启动接收
B9600 9600位/秒PARENB 进行奇偶校验
B19200 19200位/秒PARODD 奇校验,否则为偶校验
B57600 57600位/秒HUPCL 最后关闭时断开
B115200 115200位/秒CLOCAL 忽略调制调解器状态行
B460800 460800位/秒——
c_cflag成员的CREAD和CLOCAL选项通常是要启用的,这两个选项使驱动程序启动接收字符装置,同时忽略串口信号线的状态。
(2)输入标志
c_iflag成员负责控制串口输入数据的处理,表13.5所示是c_iflag的部分可用标志。
表13.5c_iflag标志
.标志说明
INPCK 打开输入奇偶校验
IGNPAR 忽略奇偶错字符
PARMRK 标记奇偶错
ISTRIP 剥除字符第8位
IXON 启用/停止输出控制流起作用
IXOFF 启用/停止输入控制流起作用
IGNBRK 忽略BREAK条件
INLCR 将输入的NL转换为CR
IGNCR 忽略CR
ICRNL 将输入的CR转换为NL
设置输入校验
当c_cflag成员的PARENB(奇偶校验)选项启用时,c_iflag的也应启用奇偶校验选项。操作方法是启用INPCK和ISTRIP选项:
options.c_iflag |= (INPCK | ISTRIP);
注意:IGNPAR选项在一些场合的应用带有一定的危险性,它指示串口驱动程序忽略奇偶校验错误,也就是说,IGNPAR使奇偶校验出错的字符也通过输入。这在测试通信链路的质量时也许有用,但在通常的数据通信应用中不应使用。
设置软件流控制
使用软件流控制是启用IXON、IXOFF和IXANY选项:
options.c_iflag |= (IXON | IXOFF | IXANY);
相反,要禁用软件流控制是禁止上面的选项:
options.c_iflag &= ~(IXON | IXOFF | IXANY);
(3)输出标志
c_oflag成员管理输出过滤,如表13.6所示是c_oflag成员的部分选项标志。
表13.6c_oflag标志
标志说明
BSDL Y 退格延迟屏蔽
CMSPAR 标志或空奇偶性
CRDLY CR延迟屏蔽
FFDL Y 换页延迟屏蔽
OCRNL 将输出的CR转换为NL
OFDEL 填充符为DEL,否则为NULL
OFILL 对于延迟使用填充符
OLCUC 将输出的小写字符转换为大写字符
ONLCR 将NL转换为CR-NL
ONLRET NL执行CR功能
ONOCR 在0列不输出CR
OPOST 执行输出处理
OXTABS 将制表符扩充为空格
启用输出处理
启用输出处理需要在c_oflag成员中启用OPOST选项,其操作方法如下:
options.c_oflag |= OPOST;
使用原始输出
使用原始输出,就是禁用输出处理,使数据能不经过处理、过滤地完整地输出到串口接口。当OPOST被禁止,c_oflag其它选项也被忽略,其操作方法如下:
options.c_oflag &= ~OPOST;
(4)本地标志
本地标志c_lflag控制着串口驱动程序如何管理输入的字符,如表13.7所示是c_lflag的部分可用标志。
表13.7c_lflag标志
标志说明
ISIG 启用终端产生的信号
ICANON 启用规范输入
XCASE 规范大/小写表示
ECHO 进行回送
ECHOE 可见擦除字符
ECHOK 回送kill符
ECHONL 回送NL
NOFLSH 在中断或退出键后禁用刷清
IEXTEN 启用扩充的输入字符处理
ECHOCTL 回送控制字符为^(char)
ECHOPRT 硬拷贝的可见擦除方式
ECHOKE Kill的可见擦除
PENDIN 重新打印未决输入
TOSTOP 对于后台输出发送SIGTTOU
选择规范模式
规范模式是行处理的。调用read读取串口数据时,每次返回一行数据。当选择规范模式时,需要启用ICANON、ECHO和ECHOE选项:
options.c_lflag |= (ICANON | ECHO | ECHOE);
当串口设备作为用户终端时,通常要把串口设备配置成规范模式。
选择原始模式
在原始模式下,串口输入数据是不经过处理的,在串口接口接收的数据被完整保留。要使串口设备工作在原始模式,需要关闭ICANON、ECHO、ECHOE和ISIG选项,其操作方法如下:
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
(4)控制字符组
c_cc数组的长度是NCCS,一般介于15-20之间。c_cc数组的每个成员的下标都用一个宏表示,表13.8列出了c_cc的部分下标标志名及其对应说明。
表13.8c_cc标志
标志说明
VINTR 中断
VQUIT 退出
VERASE 擦除
VEOF 行结束
VEOL 行结束
VMIN 需读取的最小字节数
VTIME 与“VMIN”配合使用,是指限定的传输或等待的最长时间
在规范模式下,调用read读取串口数据时,通常是返回一行数据。而在原始模式下,串口输入数据是不分行的。在原始模式下,返回读取数据的数量需要考虑两个变量:MIN 和TIME。MIN和TIME在c_cc数组中的下标名为VMIN和VTIME。
MIN是指一次read调用期望返回的最小字节数。TIME与MIN组合使用,其具体含义分以下四种情形:
1)当MIN > 0,TIME > 0时
TIME为接收到第一个字节后允许的数据传输或等待的最长分秒数(1分秒= 0.1秒)。定时器在收到第一个字节后启动,在计时器超时之前,若已收到MIN个字节,则read返回MIN个字节,否则,在计时器超时后返回实际接收到的字节。
注意:因为只有在接收到第一个字节时才启动,所以至少可以返回1个字节。这种情形中,在接到第一个字节之前,调用者阻塞。如果在调用read时数据已经可用,则如同在read后数据立即被接到一样。
2)当MIN > 0,TIME = 0时
MIN个字节完整接收后,read才返回,这可能会造成read无限期地阻塞。
3)当MIN = 0, TIME > 0时
TIME为允许等待的最大时间,计时器在调用read时立即启动,在串口接到1字节数据或者计时器超时后即返回,如果是计时器超时,则返回0。
4)当MIN = 0,TIME = 0时
如果有数据可用,则read最多返回所要求的字节数,如果无数据可用,则read立即返回0。
2. 属性设置
使用函数tcgetattr和tcsetattr可以获取和设置串口termios结构属性,如程序清单13.10所示。程序清单13.10设置和获取termios结构属性
#include
int tcgetattr(int fd, struct termios *termptr);
int tcsetattr(int fd, int opt, const struct termios *termptr);
其中:fd为串口设备文件描述符,termptr参数在tcgetattr函数中是用于存放串口设置的termios结构体,opt是整形变量,使用方法如下:
1)TCSANOW:更改立即发生;
2)TCSADRAIN:发送了所有输出后更改才发生,若更改输出参数则应用此选项;
3)TCSAFLUSH:发送了所有输出后更改才发生,更进一步,在更改发生时未读的所有输入数据被删除(Flush)。
在串口驱动程序里,有输入缓冲区和输出缓冲区。在改变串口属性时,缓冲区中的数据可能还存在,这时需要考虑到更改后的属性什么时候起作用。tcsetattr的参数opt可以指定在什么时候新的串口属性才起作用。
上述两函数执行时,若成功则返回0,若出错则返回-1。
掌握了如何获取和设置串口的属性结构后,下面将介绍串口主要属性的修改,即修改termios结构体的成员。
termios结构体的各个成员的各个选项中除需要用屏蔽标志的选项外(如波特率选项、数据位选项等),都是按位表示的,对这些选项的设置或清除可以直接用“^”或“&”逻辑运算来完成。
需要用屏蔽标志的选项的话则需要先用“&”运算清除原设置,再用“^”运算设置新
选项。例如,为了设置字符长度,需先用字符长度屏蔽标志CSIZE将表示字符长度的位清0,然后再将对应位设置为CS5、CS6、CS7或CS8。
(1)设置波特率
串口的输入和输出波特率可分别用cfsetispeed()和cfsetospeed()函数来设置,如程序清单13.11所示。
程序清单13.11设置串口输入/输出波特率函数
#include
int cfsetispeed(struct termios *termptr, speed_t speed);
int cfsetospeed(struct termios *termptr, speed_t speed);
这两个函数若执行成功返回0,若出错则返回-1。
使用这两个函数时,应当理解输入、输出波特率是存在串口设备termios结构中的。在调用任一cfset函数之前,先要用tcgetattr获得设备的termios结构。与此类似,在调用任一cfset函数后,波特率都被设置到termios结构中。为使这种更改影响到设备,应当调用tcsetattr 函数。操作方法如程序清单13.12所示。
程序清单13.12设置波特率示例
if (tcgetattr(fd, &opt)< 0) {
return ERROR;
}
cfsetispeed(&opt, B9600);
cfsetospeed(&opt, B9600);
if (tcsetattr(fd, TCSANOW, &opt)<0) {
return ERROR;
}
(2)设置数据位
设置数据位不需要专用的函数,只需要在设置数据位之前用数据位屏蔽标志(CSIZE)把对应数据位清零,然后再设置新的数据位即可,如下所示:
options.c_cflag &= ~CSIZE;/* 先把数据位清零*/
options.c_cflag |= CS8;/* 把数据位设置为8位*/
(3)设置奇偶校验
正如设置数据位一样,设置奇偶校验是在直接在cflag成员上设置。下面是各种类型的校验设置方法。
1)无奇偶校验(8N1):
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
2)7位数据位奇偶校验(7E1):
options.c_cflag |= PARENB;
options.c_cflag &= ~PARODD;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS7;
3)奇校验(7O1):
options.c_cflag|= PARENB;
options.c_cflag |= PARODD;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS7;
串口设置示例:
static int UART2_Init(void)
{
struct termios opt; //属性描述
fdUart2 = open(DEV_UART2, O_RDWR | O_NOCTTY);
if(fdUart2 < 0)
{
perror(DEV_UART2);
return -1;
}
tcgetattr(fdUart2, &opt); //获取串口属性结构体对象
cfsetispeed(&opt, B38400); //设置输入波特率
cfsetospeed(&opt, B38400); //设置输出波特率
/* raw mode */ //偶校验
opt.c_lflag &= ~(ECHO | ICANON | IEXTEN |ISIG); //设置本地标志:不进行回送,关闭规范输入,关闭扩充输入字符处理,关闭终端产生的信号
opt.c_iflag &= ~(IXON | ISTRIP); // 关闭输出流控制, 不剥除第8位
opt.c_iflag |= (ICRNL | BRKINT | INPCK);// 将输入的CR转换为NL,使得输入和输出队列被刷新,打开奇偶校验
opt.c_oflag &= ~(OPOST); // 设置输出标志:不执行输出处理
opt.c_cflag &= ~(PARODD | CSIZE); // 关闭输入输出是奇校验,使用屏蔽位opt.c_cflag |= (CS8 | CLOCAL | CREAD | PARENB);//8位数据位,保证程序不会占用串口,能够从串口读取输入数据,允许输出产生奇偶信息以及输入的奇偶校验
/*'DATA_LEN' bytes can be read by serial*/
opt.c_cc[VMIN] = DATA_LEN; //读取字符的最少个数
opt.c_cc[VTIME] = 1; //读取一个字符等待1*(1/10)s
tcflush(fdUart2,TCIOFLUSH); //清空所有正在发生的IO数据
if (tcsetattr(fdUart2, TCSANOW, &opt) < 0) //激活配置(将修改后的termios数据设置到串口)
{
return -1;
}
return fdUart2; }
linux串口编程参数配置详解
linux串口编程参数配置详解 1.linux串口编程需要的头文件 #include
个标志的话,任何输入都会影响你的程序。 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 discipline cc_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; }
linux下串口编程简单实例
linux下串口编程简单实例 1、Linux中的串口设备文件存放于/dev目录下,其中串口一,串口二对应设备名依次为“/dev/ttyS0”、“/dev/ttyS1”。在linux下操作串口与操作文件相同。 2、在使用串口之前必须设置相关配置,包括:波特率、数据位、校验位、停止位等。串口设置由下面结构体实现: struct termios{ tcflag_t c_iflag; /*input flags*/ tcflag_t c_oflag; /*output flags*/ tcflag_t c_cflag; /*control flags*/ tcflag_t c_lflag; /*local flags*/ cc_t c_cc[NCCS]; /*control characters*/ }; 该结构中c_cflag最为重要,可设置波特率、数据位、校验位、停止位。在设置波特率时需在数字前加上‘B’,如B9600、B19200。使用其需通过“与”“或”操作方式。 常用的串口控制函数: Tcgetattr 取属性(termios结构) Tcsetattr 设置属性(termios结构) cfgetispeed 得到输入速度 Cfgetospeed 得到输出速度 Cfsetispeed 设置输入速度 Cfsetospeed 设置输出速度 tcflush 刷清未决输入和/或输出 3、串口的配置 (1) 保存原先串口配置使用tcgetattr(fd,&oldtio)函数: struct termios newtio,oldtio; tcgetattr(fd,&oldtio); (2) 激活选项有CLOCAL和CREAD,用于本地连接和接收使能。 newtio.c_cflag | = CLOCAL | CREAD; (3) 设置波特率,使用函数cfsetispeed、cfsetospeed cfsetispeed(&newtio, B115200); cfsetospeed(&newtio, B115200); (4) 设置数据位,需使用掩码设置。 newtio.c_cflag &= ~CSIZE; newtio.c_cflag |= CS8; (5) 设置奇偶校验位,使用c_cflag和c_iflag。 设置奇校验: newtio.c_cflag |= PARENB; newtio.c_cflag |= PARODD; newtio.c_iflag |= (INPCK | ISTRIP); 设置偶校验: newtio.c_iflag |= (INPCK | ISTRIP); newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD;
51单片机串口通信及波特率设置
51单片机串口通信及波特率设置 MCS-51单片机具有一个全双工的串行通信接口,能同时进行发送和接收。它可以作为UART(通用异步接收和发送器)使用,也可以作为同步的移位寄存器使用。 1. 数据缓冲寄存器SBUF SBUF是可以直接寻址的专用寄存器。物理上,它对应着两个寄存器,即一个发送寄存器一个接收寄存器,CPU写SBUF就是修改发送寄存器;读SBUF就是读接收寄存器。接收器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时的响应接收器的中断,没有把上一帧的数据读走而产生两帧数据重叠的问题。对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时CPU是主动的,不会产生重叠问题。 2. 状态控制寄存器SCON SCON是一个逐位定义的8位寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态,SCON即可以字节寻址也可以位寻址,字节地址98H,地址位为98H~9FH。它的各个位定义如下: MSB LSB SM0 SM1 SM2 REN TB8 RB8 TI RI SM0和SM1是串口的工作方式选择位,2个选择位对应4种工作方式,如下表,其中Fosc是振荡器的频率。 SM0 SM1 工作方式功能波特率 0 0 0 8位同步移位寄存器Fosc/12 0 1 1 10位UART 可变 1 0 2 11位UART Fosc/64或Fosc/32 1 1 3 11位UART 可变 SM2在工作方式2和3中是多机通信的使能位。在工作方式0中,SM2必须为0。在工作方式1中,若SM2=1且没有接收到有效的停止位,则接收中断标志位RI不会被激活。在工作方式2和3中若SM2=1且接收到的第9位数据(RB8)为0,则接收中断标志RB8不会被激活,若接收到的第9位数据(RB8)为1,则RI置位。此功能可用于多处理机通信。 REN为允许串行接收位,由软件置位或清除。置位时允许串行接收,清除时禁止串行接收。 TB8是工作方式2和3要发送的第9位数据。在许多通信协议中该位是奇偶位,可以按需要由软件置位或清除。在多处理机通信中,该位用于表示是地址帧还是数据帧。 RB8是工作方式2和3中接收到的第9位数据(例如是奇偶位或者地址/数据标识位),在工作方式1中若SM2=0,则RB8是已接收的停止位。在工作方式0中RB8不使用。 TI 为发送中断标志位,由硬件置位,软件清除。工作方式0中在发送第8位末尾由硬件置位;在其他工作方式时,在发送停止位开始时由硬件置位。TI=1时,申请中断。CPU 响应中断后,发送下一帧数据。在任何工作方式中都必须由软件清除TI。 RI为接收中断标志位,由硬件置位,软件清除。工作方式0中在接收第8位末尾由硬件置位;在其他工作方式时,在接收停止位的中间由硬件置位。RI=1时,申请中断,要求CPU取走数据。但在工作方式1中,SM2=1且未接收到有效的停止位时,不会对RI置位。在任何工作方式中都必须由软件清除RI。 系统复位时,SCON的所有位都被清除。 控制寄存器PCON也是一个逐位定义的8位寄存器,目前仅仅有几位有定义,如下所示:MSB LSB
MSP430串口波特率的设置与计算
MSP430波特率的计算 给定一个BRCLK时钟源,波特率用来决定需要分频的因子N: N = fBRCLK/Baudrate 分频因子N通常是非整数值,因此至少一个分频器和一个调制阶段用来尽可能的接近N。 如果N等于或大于16,可以设置UCOS16选择oversampling baud Rate模式注:Round():指四舍五入。 Low-Frequency Baud Rate Mode Setting 在low-frequency mode,整数部分的因子可以由预分频实现: UCBRx = INT(N) 小数部分的因子可以用下列标称公式通过调制器实现: UCBRSx = round( ( N –INT(N) ) × 8 ) 增加或减少UCBRSx一个计数设置,对于任何给定的位可能得到一个较低的最高比特误码率。如果确定是这样的情况UCBRSx设置的每一位必须执行一个精确的错误计算。 例1:1048576Hz频率下驱动以115200波特率异步通讯 ACLK = REFO = ~32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz。 N = fBRCLK/Baudrate = 1048576/115200 = ~9.10 UCBRx = INT(N) = INT(9.10) = 9 UCBRSx = round( ( N –INT(N) )×8 ) = round( ( 9.10 –9) × 8 )=round(0.8 )=1 UCA0CTL1 |= UCSSEL_2;// 选SMCLK为时钟 UCAxBR0 = 9; UCAxBR1 = 0; UCAxMCTL = 0x02;//7-4:UCBRFx,3-1:UCBRSx,0:UCOS16 UCBRSx 为寄存器UCAxMCTL的1-3位,所以写入0x02(00000010) 例2:32768Hz频率下驱动以2400波特率异步通ACLK = REFO = ~32768Hz, MCLK = SMCLK = DCO ~1.045MHz N = fBRCLK/Baudrate = 32768/2400 = ~13.65 UCBRx = INT(N) = INT(13.65) = 13 UCBRSx = round( ( N –INT(N) )×8 ) = round( ( 13.65 –13) × 8 )=round(5.2)=5 UCA0CTL1 |= UCSSEL_1; // 选ACLK为时钟 UCAxBR0 = 13;UCAxBR1 = 0 ; UCAxMCTL = 0x0A;//7-4:UCBRFx,3-1:UCBRSx,0:UCOS16 UCBRSx为寄存器UCAxMCTL的1-3位,所以写入0x0A(00001010) Oversampling Baud Rate Mode Setting 在oversampling mode 与分频器设置如下:
串口控件的使用及属性说明
上位机软件,尤其是串口监听软件是我们常用到的工具。这里我讲解一下使用https://www.360docs.net/doc/7c1468124.html, 时,串口控件的使用和串口的配置。 一、认识串口控件,名称SerialPort。 二、串口常用参数说明:
三、代码例程 1、串口配置代码 Sub PortStart() 'SerialPort1.PortName = COMX'计算机串口设置X,是串口号。可以使用下列列表框选择。 SerialPort1.BaudRate = 9600 ‘波特率设置 SerialPort1.DataBits = 8 '数据位设置 SerialPort1.StopBits = StopBits.One '停止位设置 SerialPort1.Encoding = Encoding.UTF8 SerialPort1.DtrEnable = True SerialPort1.ReadTimeout = 500 '超时时间 SerialPort1.NewLine = vbCrLf '行结束符合 End Sub 2、计算机串口读取 Sub GetSerialPortNames() '计算机串口读取 For Each sp As String In https://www.360docs.net/doc/7c1468124.html,puter.Ports.SerialPortNames CompList.Items.Add(sp) ‘CompList是一个下列框控件,这里修改为你的下列框名称 Next CompList.Text = CompList.Items(0) End Sub 3、串口打开 Sub PortOpen() Try SerialPort1.Open()
Call PortStart() Catch ex As UnauthorizedAccessException MsgBox("串口被占用或串口错误!", https://www.360docs.net/doc/7c1468124.html,rmation, "提示!") End Try End Sub 4、串口关闭 Sub PortOpen() Try SerialPort1.Close() Catch ex As Exception MsgBox("串口未打开或串口异常!", https://www.360docs.net/doc/7c1468124.html,rmation, "提示!") End Try End Sub 5、串口读取数据 Sub ComRec() Dim Rxstr As String Try Rxstr = SerialPort1.ReadLine ’读取一个新行 Application.DoEvents() ComTxT.AppendText(Rxstr) ‘读取到的数据添加到文本框中显示Catch e As TimeoutException ’当超时以后,读取串口所有的数据Rxstr = SerialPort1.ReadExisting ComTxT.AppendText(Rxstr) Application.DoEvents() End Try End Sub 6、发送数据 SerialPort.Write,将数据写入串行端口输出缓冲区。
linux 串口输出
1.修改/etc/inittab文件 tty:2345:respawn:/sbin/agetty -L ttyS0 9600 vt100 “tty”为该行ID;“2345”指该行的运行级别是2、3、4、5级;“respawn”使命令退出后再执行一次,以便其它用户能够登录;“/sbin/getty ttyS0 9600 vt100”表示具体 的命令,该命令通过/sbin/getty程序打开串口/dev/ttyS0(COM1),波特率设置为9600bps,终端模式为vt100。 2.修改/etc/securetty文件 该文件是一个被允许以root身份登录的tty设备列表,这些设备由/bin/login程序读取。为了使用户能以root身份通过串口登录,需要在该文件中添加“ttyS0”,告诉系统COM1 是安全的。 3.修改/etc/lilo.conf文件 本文假设系统使用LILO启动。为了使LILO和内核的启动信息能够输出到串口,必须修改/etc/lilo.conf文件,在“linear”一行后添加“serial=0,9600n8”,将 “append="root=LABEL=/"”改为“append="root=LABEL=/ console=ttyS0,9600"”。 serial选项使LILO的启动信息输出到串口,以便选择不同的系统或内核进行启动。其中,“0”表示串口使用COM1;“9600”表示波特率为9600bps;“n”表示无校验位;“8”表 示有8位数据位。 “append="root=LABEL=/ console=ttyS0,9600"”的作用是向内核传递参数,使系统启动信息输出到串口COM1,波特率设为9600bps。修改完成后,重新运行一下LILO命令使配置生 效。 修改grub.conf 完整conf default=0 timeout=10 password --md5 $1$wwmIq64O$2vofKBDL9vZKeJyaKwIeT. serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console title Red Hat Linux (2.4.9-21) root (hd0,0) kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6 console=tty0 console=ttyS0,9600n8 initrd /initrd-2.4.9-21.img title Red Hat Linux (2.4.9-21) single user mode lock root (hd0,0) kernel /vmlinuz-2.4.9-21 ro root=/dev/hda6console=tty0 console=ttyS0,9600n8
串口设置详解
串口设置详解 本节主要讲解设置串口的主要方法。 如前所述,设置串口中最基本的包括波特率设置,校验位和停止位设置。串口的设置主 要是设置struct termios结构体的各成员值,如下所示: #include
单片机波特率的计算方法
51单片机波特率计算的公式和方法 51单片机芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器。它的各个位的具体定义如下: SM0SM1SM2REN TB8RB8TI RI SM0、SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。串行口工作模式设置。 波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。这里所指的波特率,如标准9600不是每秒种可以传送9600个字节,而是指每秒可以传送9600个二进位,而一个字节要8个二进位,如用串口模式1来传输那么加上起始位和停止位,每个数据字节就要占用10个二进位,9600波特率用模式1传输时,每秒传输的字节数是9600÷10=960字节。 51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M的晶振来计算,那么它的波特率可以达到1M。模式2的波特率是固定在fosc/64或fosc/32,具体用那一种就取决于PCON寄存器中的SMOD位,如SMOD为0,波特率为focs/64,SMOD为1,波特率为focs/32。 模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率,就是说定时器1每溢出一次,串口发送一次数据。那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算。
上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2下定时器1溢出速率的计算公式如下: 溢出速率=(计数速率)/(256-TH1初值) 溢出速率=fosc/[12*(256-TH1初值)] 上式中的“计数速率”与所使用的晶体振荡器频率有关,在51芯片中定时器启动后会在每一个机器周期使定时寄存器TH的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到9600的波特率,晶振为11.0592M和12M,定时器1为模式2,SMOD 设为1,分别看看那所要求的TH1为何值。代入公式: 11.0592M 9600=(2÷32)×((11.0592M/12)/(256-TH1)) TH1=250
路由器串口配置命令
路由器串口配置命令 https://www.360docs.net/doc/7c1468124.html,2002-12-11保存本文推荐给好友QQ上看本站收藏本站 1. async mode 设置异步串口的建立链路方式。 async mode { dedicate | interactive } 【缺省情况】 异步串口的缺省建立链路方式为直接方式(dedicate)。 【命令模式】 串口配置模式 【使用指南】 异步串口可以有两种建立链路方式: 直接方式(Dedicate):拨号成功之后,直接采用链路层协议配置参数建立链路。 交互方式(Interactive):拨号成功之后,主叫方向对端发送配置命令(与用户从远端手工键入配置命令效果相同),设置对端的链路层协议工作参数,然后建立链路。 比较常用的是直接方式,但在与同样支持交互方式的路由器(如Cisco路由器等)互连时,采用交互方式显得更为灵活。 交互方式一般与外接Modem以及Modem Script共同使用。 【举例】 设置异步串口建立链路采用交互方式。 Quidway(config-if-Serial0)#async mode interactive 【相关命令】 modem,chat-script 2. baudrate 设置串口的波特率。
baudrate baudrate 【参数说明】 baudrate为串口的波特率,单位为bps,取值范围300~4096000。 【缺省情况】 异步串口的缺省波特率为9600bps,同步串口的缺省波特率为64kbps。 由于同异步支持的波特率范围不同,当进行同异步切换时,如果现工作方式不支持原波特率,则将波特率修改为现工作方式下的缺省波特率。 【命令模式】 串口配置模式 【使用指南】 异步串口支持的波特率有: 300bps 600bps 1200bps 4800bps 9600bps 19200bps 38400bps 57600bps 115200b 同步串口支持的波特率有: 1200bps 4800bps 9600bps 19200bps 38400bps 57600bps 115200bps 56000bps 64000bps 72000bps 128000bps
(完整word版)MOXA串口服务器设置步骤
串口服务器设置 MOXA的串口服务器设置可以通过网络或MOXA提供的专用设置软件:NPort Administrator来设置,所有设备的默认IP地址是:192.168.127.254。我们的设备的操作模式可以提供Real COM,TCP Server,TCP Client,UDP等操作模式,本公司的上位机软件主要支持TCP Server 和Real COM模式,下面是设备如何设置这两种模式的方式。 TCP Server 模式设置 1、通过网络来设置 一、确认上位机IP地址 首先确认上位机的IP地址,在电脑:开始—运行输入cmd 按确定后出现下面对话框,在对话框中输入ipconfig 按回车键出现下面对话框
上图显示本机的IP地址是:192.168.1.22 二、通过IE来设置 1、添加IP 在网上邻居—右键—属性—本地连接—右键—属性—常规—双击协议(TCP/IP)出现下面对话 点击右下角高级出现下面对话框
在IP地址栏里点击添加出现下面对话框 在对话框中输入IP地址,我输入的是:192.168.127.200 在IE里输入IP地址:192.168.127.254 就出现下面界面
在Network Settings里设置IP地址,改成:192.168.1.254,因为我本机是192.168.1.22,所以要改成同一网段内,设置好后点击Submit
设置串口设备的波特率等参数,点击Submit 设置操作模式,本次在Operation mode右边的下拉列表选择TCP Server Mode 模式,设置端口号,设备默认端口号是4001,设置好后点击Submit
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 口看到标准输入输出信息。
PLC串口设置
一般是不用设的,首先通过设备管理器/端口里看你的COM口是多少,然后在你的GX DEVELOPER中的串口中设置相应的端口就可以了;FX系列的编程口参数一般为9600,7位,1位,偶校验,如果是串口通讯测要看寄存器D8120中的二进制数值是多少 vb和三菱FX2N-48MR的串口通訊協議 三菱FX係列PLC編程口通信協議舉例1、DEVICE READ(讀出軟設備狀態值)計算機向PLC發送:始命令首地址位數終和校驗 STX CMD GROUP ADDRE BYTES ETX SUM 例子:從D123開始讀取4個字節數據 'STX'010F604'ETX'74 02h 30h 31h,30h,46h,36h 30h,34h 03h 37h,34h 地址算法:addre =addre *2 1000h再轉換成ASCII31h,30h,46h,36h 我對上麵的算法不是太熟悉(1)地址算法:addre =addre *2 1000h 怎麼得到的31h,30h,46h,36h,能不能在說的詳細一下好嗎?(2)sum=30h 31 ...... 03h=74h,得到的74h 為什麼要轉化成37h,34h.這種變化叫什麼啊,能不能詳細給說明一下啊請知道的朋友告知一下好嗎?我的電子郵件:lw2008sd@https://www.360docs.net/doc/7c1468124.html, 一、三菱PLC编程口通讯协议三菱PLC编程口的通讯协议比较简单,只有四个命令,即:命令命令码目标设备 DEVICE READ CMD "0" X,Y,M,S,T,C,D DEVICE WRITE CMD "1" X,Y,M,S,T,C,D FORCE ON CMD " 7" X,Y,M,S,T,C FORCE OFF CMD "8" X,Y,M,S,T,C五个标示: ENQ 05H 请求 ACK 06H PLC正确响应 NAK 15H PLC错误响应 STX 02H 报文开始 ETX 03H 报文结束 使用累加方式的和校验,帧格式如下: STX CMD DATA ...... DATA ETX SUM(upper) SUM(lower) 和校验: SUM= CMD+……+ETX。如SUM=73H,SUM=“73”。 1、DEVICE READ(读出软设备状态值) 计算机向PLC发送: 始命令首地址位数终和校验 STX CMD GROUP ADDRESS BYTES ETX SUM
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 例如:
MSComm串行通讯控件设置 串口、波特率等参数方法
MSComm串行通讯控件设置串口、波特率等参数方法(转 (2010-03-07 14:07:21) 转载 分类:程序设计 标签: it 一.想一进入程序,有默认的串口参数设置: 1.把参数值设定死 在OnInitDialog()函数里添加: if (m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(FALSE); m_ctrlComm.SetCommPort(1); // 选择com1 if (!m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE); // 打开串口 else AfxMessageBox("cannot open serial port"); m_ctrlComm.SetSettings("9600, n, 8, 1"); // 波特率9600,无校验,8个数据位,1个停止位 m_ctrlComm.SetInputMode(1); // 1表示以二进制方式检取数据 m_ctrlComm.SetRThreshold(1); // 参数为1,表示每当串口接收缓冲区中有对于或等于一个字符时,将引发一个接收数据的OnComm事件 m_ctrlComm.SetInputLen(0); // 设置当前接收区数据长度为0 m_ctrlComm.GetInput(); // 先预读缓冲区以清除残留数据
2. 用COMBO BOX下拉框选择串口、波特率 m_cbPortSelect.ResetContent(); m_cbPortSelect.AddString(_T("COM1")); m_cbPortSelect.AddString(_T("COM2")); m_cbPortSelect.AddString(_T("COM3")); m_cbPortSelect.AddString(_T("COM4")); m_cbPortSelect.AddString(_T("COM5")); m_cbPortSelect.SetCurSel(3); m_cbPortRate.ResetContent(); m_cbPortRate.AddString(_T("1200")); m_cbPortRate.AddString(_T("2400")); m_cbPortRate.AddString(_T("4800")); m_cbPortRate.AddString(_T("9600")); m_cbPortRate.SetCurSel(0); 二.想动态地设置串口相关参数: CString str_setting; str_setting.Format(_T("%d, %c, %d, %d"), baud_num, 'n', 8, 1); m_ctrlComm.SetSettings(str_setting); // 设置波特率,校验位,数据位,停止位;m_ctrlComm是通信控件变量 想在Edit Box里显示实时值:
串口基本配置命令
串口基本配置命令 【命令】async mode { protocol | flow | tty | printer | posapp | pos id } 【视图】异步串口视图、AUX 接口视图 【参数】protocol:协议模式。指物理连接建立之后,接口直接采用已有的链路层协 议配置参数建立链路。flow:流模式,也称交互模式。指物理连接建立之后,链路的两端进行交互,主叫端向接收端发送配置命令(与用户从远端手工键入配置命令效果相同),设置接收端的链路层协议工作参数,然后建立链路。一般用于拨号等人机交互的情况下。tty:终端接入方式。当路由器的异步串口用于终端接入服务时,通过此关键字以及相应参数来设置待接入的物理终端和虚终端(VTY)号。 【描述】async mode 命令用来设置异步串口的工作方式。缺省情况下,异步串口工作在协议方式(protocol 方式),AUX 接口缺省工作在流方式(flow)。 【举例】# 设置异步串口工作在流方式。 [Quidway-Serial0]async mode flow 【命令】baudrate baudrate 【视图】串口视图 【参数】baudrate:串口的波特率,单位为bps。对于异步串口取值范围为300~115200,对于同步串口取值范围为1200~2048000。 【描述】baudrate 命令用来设置串口的波特率。缺省情况下,异步串口的缺省波特率为9600 bps,同步串口的缺省波特率为64000 bps。 异步串口支持的波特率有:300 bps、600 bps、1200 bps、2400 bps、4800 bps、9600 bps、19200 bps、38400 bps、57600 bps、115200 bps。 同步串口支持的波特率有:1200 bps、2400 bps、4800 bps、9600 bps、19200 bps、38400 bps、57600bps、64000 bps、72000 bps、115200 bps、128000 bps、384000 bps、2048000bps。 另外同步串口对于不同的物理电气规程,所支持的波特率范围有所不同。 &<048698;&O1472;V.24 DTE/DCE:1200 bps~64000 bps &<048698;&O1472;V.35 DCE/DCE、X.21 DTE/DCE、EIA/TIA-449 DTE/DCE 以及EIA-530 DTE/DCE:1200 bps~2048000 bps 当同/异步串口进行同异步切换时,接口的波特率将恢复为新工作方式下的缺省波特率。 在设置串口波特率时,要注意串口的同异步方式以及外接电缆的电气规程等因素。另外要注意异步串口的波特率只在路由器与Modem 之间起作用,两台Modem 之间的波特率则由它们互相协商确定,因此在异步方式下两端路由器的波特率设置可以不一致;在同步方式下,由DCE 侧路由器决定线路传输的波特率,只需在DCE 侧设定即可。 【举例】# 设置异步串口的波特率为115200 bps。 [Quidway-Serial0]baudrate 115200 【命令】clock { dceclk | dteclk1 | dteclk2 | dteclk3 | dteclk4 } 【视图】串口视图 【参数】无 【描述】clock 命令用来设置同步串口的时钟选择方式。缺省情况下,作为DCE 设备的情况,为DCEclk (即向DTE 设备提供时钟);作为DTE 设备的情况,为DTEclk3。同步串口有两种工作方式:DTE 和DCE。不同的工作方式有不同的时钟选择。如果同步串口作为DCE 设备,需要向对端DTE 设备提供时钟,这时需要选择DCEclk;如果同步串口作为DTE 设备接受对端DCE 设备提供的时钟,由于同步设备的接收和发送时钟是独立的,则DTE 设备的接收时钟可以选择DCE 设备的发送或接收时钟,而且DTE 设备的发送时钟也可以选择DCE 设备的发送或接收时钟,产生四种组合,即在DTE 侧可以有四种时钟选择。 【举例】# 设置同步串口作为DTE 设备的时钟选择方式为DTEclk2。 [Quidway-Serial0]clock dteclk2
Linux下扩展串口配置方法
编号: 版本号:V1.0 受控状态: 分发号: Linux下扩展串口配置方法 应用注记 编制:日期: 审核:日期: 标审:日期: 质量:日期: 批准:日期: 北京盛博协同科技有限责任公司
版本控制 (C:创建;A:补充;M:修改;D:删除)
目录 1概述 (1) 1.1文档目的 (1) 1.2基本说明 (1) 1.3定义 (1) 1.4参考资料 (1) 1.5注意事项 (1) 2方法 (1) 2.1环境 (1) 2.2方法 (1) 3附录 (2) 3.1串口资源 (2)
1 概述 1.1 文档目的 本文旨在说明在Linux操作系统下扩展串口的方法,供测试人员、技术支持人员和用户参考。 1.2 基本说明 Linux操作系统自带串口驱动(i8250芯片兼容),公司研发的串口扩展卡(A3CSD、MSP4I)不需要重新开发驱动,只需要一定配置即可使用。本文给出配置的方法供参考。 1.3 定义 Linux:一种开源、现代操作系统。 Fedora:一种Linux系统的发行版本。 A3CSD:北京盛博协同公司开发的扩展串口卡。 MSP4I:北京盛博协同公司开发的扩展串口卡。 PM4060:北京盛博协同公司开发的处理器板卡。 1.4 参考资料 《如何在LINUX下驱动多串口扩展卡》。 1.5 注意事项 Linux操作系统不同内核,不同发行版本存在一定差异,本文方法只保证在所试环境成功。 BIOS中必须释放扩展串口卡需要使用到的资源。 方法中使用的资源必须与扩展串口卡使用的资源一致。 如果所用Linux操作系统中没有方法中的命令,请安装或从类型系统拷贝。 2 方法 2.1 环境 1.LX3160(BC30CV31); 2.A3CSD(串口资源见附录); 3.CF 4G(Fedora 7); 4.鼠标、键盘、显示器、电源、线缆等。 2.2 方法 1.启动linux操作系统,以root身份进入命令控制台。 2.运行mknod /dev/ttyS9 c 4 64命令创建串口设备文件。 3.运行setserial /dev/ttyS9 port 0x100 irq 10 uart 16550A命令,链接设备文件到芯片。 4.重复步骤3,根据资源添加其他串口。 5.若想Linux启动后串口随即生效,把上述命令添加到启动脚本rc.local中。 图1