您当前的位置:首页 > 技术风向标

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

时间:2015-03-08  来源:扁平线圈电感厂家  点击:

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 内核中是一个非负整数。Linu电感器生产厂家x 设备文件都存放在“/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 所示。

第一步: 打开串口调用open( ) 函数打开串口设备文件,若出错则返回- 1,成功则返回文件句柄。

#define UART1 /dev /ttySAC1int fd;fd = open( “UART1”,O_RDWR) /* 以可读可写方式打开串口设备* /

第二步: 设置串口属性函数tcsetattr ( ) 可以设置串口的结构属性,tcgetatt( ) 可以得到串口的结构属性。在termios 结构中,? &=s ?最重要的是c_cflag,用户通过对其进行赋值可以实现串口波特率、数据位、停止位、奇偶校验位等参数的设置。c_cc 数组中的两个变量VMIN 和VTIME 判断是否返回输入,c _cc[VTIME]设定字节输入时间计时器,c _cc[VMIN]设定满足读取功能的最低接收字节数。这两个变量的值要设定合理,才能保证串口的通信成功率。

int set_attr( int fd){struct termios newtio,oldtio;tcgetattr( fd,&oldtio) ;cfsetispeed( &newtio,B9600) ; /* 设置读波特率为9600* /cfsetospeed( &newtio,B9600) ; /* 设置写波特率为9600* /memset( &newtio,0, sizeof( newtio) );newtio. c_cflag = CS8 | CREAD; /* 设置数据位为8 位并且使能接收* /newtio. c_cflag & = ~ PARENB; /* 不进行奇偶校验* /newtio. c_cflag & = ~ CSTOPB; /* 1 位停止位* /newtio. c_cc[VMIN]= 1; /* 当接收到一个字节数据就读取* /newtio. c_cc[VTIME]= 0; /* 不使用计时器* /tcflush( fd,TCIOFLUSH) ; /* 刷清输入输出缓冲区* /tcsetattr( fd,TCSANOW,&newtio) /* 使设置的终端属性立即生效* /}

第三步: 串口读写,串口关闭设置完通信参数后,就可以用标准的文件读写命令read( ) 和write( ) 操作串口了。最后在退出之前,用close( ) 函数关闭串口。

void rd_wr( ){write( fd,wbuf,10) ;usleep( 500000) ; /* 延时50 ms 等待下位机发送数据* /read( fd, rbuf,10) ;printf( “read string is %s \n”, rbuf) ;}

电感生产厂家

3 通信程序设计

ARM 与单片机的串口通信程序包括两方面: 一方面是作为上位机的ARM 的串口通信程序,另一方面是作为下位机的单片机的串口通信程序。在隔离电感器通信之前必须制定合理的通信协议以保证通信的可靠性和成功率。现约定双方通信协议如下:

( 1) 波特率为9600 bit /s,帧格式为1 - 8 - N - 1( 1 位起始位,8位数据位,无奇偶校验,1位停止位) ;( 2) 由于上位机ARM 的速度远远高于下位机单片机的速度,所以采用上位机主动联络,下位机等待的方式。在数据传送前ARM 先发送联络信号/0xaa,单片机收到后回答一个/0xbb,表示可以发送,否则继续联络;( 工字电感器3) 单片机端可以有中断和查询方式收发串口数据。本文采用中断方式;( 4) ARM 处理器s3c2440 采用UART1 和单片

大电流电感

基于EPM1240的SDRAM控制器的设计摘要:SDRAM的读写逻辑复杂,最高时钟频率达100 MHz以上,普通单片机无法实现复杂的SDRAM控制操作,复杂可编程逻辑器件CPLD具有编程方便,集成度高,速度快,价格低等优点。因此选用CPLD设

浅谈变压器事故应急处理 浅谈变压器事故应急处理来源:崔国忠发布时间:2014-07-25分类:[杂志期刊] 关键词:变压器;事故;处理;原则一、事故处理的一般原则在运行值班人员负责的设备上,或在其管辖范围内发生事故时,运行值班人员可以遵照下列顺序消除事故:1、变压器发生事故时,运行值班人员应仔细注视表计和信号的指示,在主

跨频多路通信转接平台设计与实现摘要:提出一种适合于快速接入、灵活操作的跨频多路通信转接平台设计,可实现灾害现场多种制式的通信系统的互联互通,尤其对于重大灾害事故、突发事件现场,以通信转接平台为核心,实现现场通信指挥组网,并可实现消

注塑加工厂


上一篇基于FPGA和Quartus II的程控滤波器测量系统的设计方案

下一篇基于数字电源控制器UCD3138的一种新的输入电流检测方法(二)


  
  温馨提示
网站首页 | 产品展示 | 科技前沿 | 行业资讯
本公司专业研发、设计、生产、销售贴片电感、插件电感、功率电感、大电流电感、扁平线圈电感、一体成型电感。
专业电感生产制造商,品质优异、交期快。
在线客服
热线电话