基于linux的嵌入式串口通信.docx
- 文档编号:16073214
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:25
- 大小:259.83KB
基于linux的嵌入式串口通信.docx
《基于linux的嵌入式串口通信.docx》由会员分享,可在线阅读,更多相关《基于linux的嵌入式串口通信.docx(25页珍藏版)》请在冰点文库上搜索。
基于linux的嵌入式串口通信
天津电子信息职业技术学院
嵌入式软件编程》课程报告
课程名称:
基于linux的嵌入式串口通信课程代码:
115229姓名:
甘琦
学号:
48
专业:
物联网应用技术
班级:
物联S14-1
完成时间:
2016年10月28日
摘要1
前言2
一、嵌入式串口通信概述2
1.1嵌入式串口通信的原理2
1.2嵌入式串口通信的开发工具2
1.2.1CC2530功耗2
1.2.2ARM简介3
1.2.3Linux系统简介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.2DTR和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
前言嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可定制,适用于不同应用场合,对功能,可靠性,成本,体积,功耗有严格要求的专用计算机系统。
它一般由嵌入式微处理器,外围硬件设备,嵌入式操作系统,用户应用程序4个部分组成。
用于实现对其他设备的控制,监视或管理等功能。
嵌入式系统已经广泛应用于科学研究,工业控制,军事技术,交通通信,医疗卫生,消费娱乐等领域,人们常用的手机,PDA,汽车,智能家电,GPS等均是嵌入式系统的典型代表。
串口通信是简单嵌入式系统的一个应用,串口通信是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。
一、嵌入式串口通信概述所谓串口通信,是指外设和计算机间使用一根数据信号线(另外需要地线),数据在一根数据信号线上一位一位地进行传输,每一位数据都占据一个固定的时间长度。
串口传输是二进制代码序列在一条信道上以位(元码)为单位,按时间顺序且按位传输的通信方式。
串行传输时,发送端按位发送,接收端按位接受,同时还要对所传输的位加以确认,所以收发双方要采取同步措施,否则接受端将不能正确区分出所传输的数据。
串口通信不但能实现计算机与嵌入式开发板之间的数据传输,而且还能实现计算机对嵌入式开发板的控制。
若采用普通单片机,对外部设备的访问就需要利用复杂的汇编语言进行编程或者使用C51自己编写设
备的初始化以及读写访问程序,这样的过程不仅复杂,而且不利于大规模的开发和设计。
ARM与8051等普通单片机相比,具有开发简单、灵活,而且性能稳定、功能易于扩展等一系列优势,因而在汽车电子、手持
设备、无线领域和航空航天等嵌入式系统中得到广泛的应用。
将Linux移植到ARM嵌入式处理器后,可以利用操作系统中提供的系统调用把串口及其他外设当成普通文件进行操作,读写方便,因此进行相应开发可以提高系统编程效率,而且还可以简化调试的复杂程度。
1.1嵌入式串口通信的原理
串行端口的本质功能是作为CPU和串行设备间的编码转换器。
当数从CPU经过串行端口发送出去时,字节
数据转换为串行的位。
在接收数据时,串行的位被转换为字节数据。
串口是系统资源的一部分,应用程序要使用串口进行通信,必须在使用之前向操作系统提出申请要求(打开串口),通信完成后必须释放资源(关
闭串口)。
1.2嵌入式串口通信的开发工具
本次开发采用的硬件平台是利用OURS-IOTV2-2530实验箱和C语言来实现本次系统的开发。
1.2.1CC2530功耗
CC2530使用不同的运行模式或功耗模式以允许低功耗运行。
超低功耗是通过关闭模块电源以避免静态功耗
以及通过使用时钟门控和关闭振荡器来减少动态功耗而获得的。
CC2530有4个功耗模式,被称为PM0、PM1、
PM2和PM3。
PM0是激活模式而PM3具有最低功耗。
PM0:
全功能模式。
连接到数字内核的电压调整器打开。
16MHzRC振荡器或32MHz晶体振荡器运行或者它
们同时运行。
32.753KHzRC振荡器或32.768KHz晶体振荡器运行。
PM1:
连接到数字部分的电压调整器打开。
16MHzRC振荡器和32MHz晶体振荡器都不运行。
32.753KHzRC振荡器或32.768KHz晶体振荡器运行。
在产生复位、外部中断或当睡眠定时器到期时系统将返回到PM0。
PM2:
连接到数字内核的电压调整器关闭。
16MHzRC振荡器和32MHz晶体振荡器都不运行。
32.753KHzRC
振荡器或32.768KHz晶体振荡器运行。
在产生复位、外部中断或当睡眠定时器到期时系统将返回到PM0。
PM3:
连接到数字内核的电压调整器关闭。
没有振荡器运行。
在产生复位或外部中断时系统将返回到PM0。
PM0是全功能模式,在该模式下,CPU、片内外设和RF收发器都处于激活状态,数字电压调整器打开。
该模式也被称为激活模式时。
1.2.2ARM简介
ARM(AdvancedRISCMachines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。
1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。
目前,
采用ARM技术知识产权(IP)核的微处理器,即通常所说的ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统、军用系统等各类产品市场,基于ARM技术的微处理器应用约占据了
32位RISC微处理器70%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。
ARM公司是
专门从事基于RISC技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可,由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其ARM微处理器核,
根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。
目前全世界有几十家大的半导体公司都使用ARM公司的授权,因此既使得ARM技术获得更多的第三方工具、制造、
软件的支持,又使整个系统成本降低,使产品更容易进入市场并被消费者所接受,更具有竞争力。
ARM微处理器一般具有如下特点:
(1)体积小、低功耗、低成本、高性能;
(2)支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8/16位器件;
(3)大量使用寄存器,指令执行速度更快;
(4)大多数数据操作都在寄存器中完成;(5)寻址方式灵活简单,执行效率高;
(6)指令长度固定。
1.2.3Linux系统简介
Linux是一类Unix计算机操作系统的统称。
Linux操作系统也是自由软件和开放源代码发展中最著名的例子。
Linux一般有四个主要部分:
内核、Shell、文件结构和实用工具。
(1)Linux内核内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。
它从用户那里接受命令并把命令送给内核去执行。
(2)LinuxShell
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。
它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。
不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。
Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
(3)Linux文件结构文件结构是文件存放在磁盘等存储设备上的组织方法。
主要体现在对文件和目录的组织上。
目录提供了管理文件的一个方便而有效的途径。
我们能够从一个目录切换到另一个目录,而且可以设置目录和文件的权限,设置文件的共享程度。
使用Linux,用户可以设置目录和文件的权限,以便允许或拒绝其他人对其进行访问。
(4)Linux实用工具
标准的Linux系统都有一套叫做实用工具的程序,它们是专门的程序,例如编辑器、执行标准的计算操作等。
用户也可以产生自己的工具。
1.3嵌入式串口通信的基本任务
(1)实现数据格式化:
因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务。
在异步通信方式下,接口自动生成起止式的帧数据格式。
在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。
(2)进行串---并转换:
串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。
所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。
因此串并转换是串接口电路和的重要任务。
(3)控制数据传输速率:
串行通信接口电路应具有对数据传输速率波特率进行先择和控制的能力。
(4)进行错误检测:
在发送接口电路对传送的字符数据自动生成奇偶校验位或其他校验码。
在接收时,接
口电路检查字符的奇偶校验或其他检验码,确定是否发生传送错误。
(5)进行TTL与EIA电平转换:
CPU和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换。
1.4嵌入式串口通信协议及实现
串行端口的本质功能是作为CPU和串行设备间的编码转换器,一般微机内都配有通信适配器,使计算机能够与其他具有RS-232C串口的计算机或设备进行通信。
本系统主要目的是实现宿主机与目标机之间的近距离串行通信,采用的宿主机是IntelCentrino架构的RedHatLinux9.03环境PC机,而目标机是
ARM架构的开发板。
本系统中目标机开发板的内核采用的是三星的S3C2410,该开发板采用核心板加底板的模式,核心板
接口采用DIMM200标准连接器,工作非常可靠,可稳定运行在203MHz的时钟频率下。
其外设非常丰富,功能强大,完全可以满足设计需要。
串口线采用常用的RS-232C型接口模式,能实现计算机与开发板间的数据传输与控制。
嵌入式串口通信采用EIARS-232C标准。
二、RS-232C标准
RS-232C是1969年由电子工业协会(EIA)公布的标准。
该标准的用途是定义数据终端设备DTE
(DataTerminalEquipment)与数据通信设备DCE(DataCommunicationEquioment)的接口特性。
数据终端设备就是连接通信两端设备的连线(如空MODE)M或其他设备。
RS-232C标准的构架如
图2.1所示。
(数据终端设备DTE)(数据通信设备DCE)(数据通信设备DCE)(数据终端设备DTE)
计算机B
RS-232C标准的一些主要规范如下。
图2.1RS-232C标准的构架
电气特性
RS-232C采用非归零、双极性编码,且使用负逻辑规定的逻辑电平:
-15~-5V规定为逻
辑“1”。
+5~+15V规定为逻辑“0”。
信号电平与TTL电平不兼容,所以需要电平转换电路(通常使用MAX3232转换)。
电平转换电路如图2.2所示。
图2.2RS-232C的电平转换电路
2.1引脚定义
目前广泛的DB9引脚定义如图2.3所示。
信号引脚定义的说明见表2.1。
图2.3DB9引脚定义
9针串口DB9
针号
功能说明
缩写
1
输入,数据载波检测
DCD
2
输入,接收数据
RXD
3
输出,发送数据
TXD
4
输出,DTE准备就绪
DTR
5
信号地
GND
6
输入,MODE准M备就绪
DSR
7
输出,请求发送
RTS
8
输入,允许发送
CTS
9
输入,振铃指示
DELL
表2.1DB9引脚说明
2.2字符(帧)格式
RS-232C采用起止式异步通信协议,其特点是一个字符接着一个字符进行传输,并且传输一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。
其传输格式如图2.4所示,每一个字符的前面都有一位起始位(低电平,逻辑“0”),字符本身有5~8位数据位,接着字符后面是一位校验码(也可以没有校验码),最后是停止位。
停止位后面是不定长度的空闲位。
停止位和空闲位都规定为高电平(逻辑值“1”),这样就能保证起始位开始处一定有一个下跳沿,便于接受方识别。
的间隔
图2.4串行传输的工作原理示意图
从图2.4中可以看出,这种格式是靠起始位和停止位来实现字符的界定或同步的,故称为起止式协议。
没有统一的时钟,没有同步字符,依靠起始位和停止位标识每一帧,传输时,数据的地位在前,高位在后。
起始位实际上是作为同步信号附加进来的,当它变为低电平时,告诉接受方传输开始,后面接着是数据位;而停止位则标志一个字符的结束。
这样就为通信双方提供了何时开始收发、何时结束的标志。
传输开始前,收发双方把所采用的字符格式(包括字符的数据位长度、停止位位数、有无校验位以及是奇校验还是偶校验等)和数据的传输速率进行统一规定。
传输开始后,接收设备不断地检测线路,看是否有起始位到来。
当收到一系列的“1”(停止位或空闲位)之后,检测到一个下跳沿(由“1”变为“0”),
说明起始位出现,起始位经确认后,就开始接收所规定的数据位和奇偶校验位以及停止位。
然后去掉停止位,对数据位进行串并转换,并且经奇偶校验无误后,才算正确地接收到一个字符。
一个字符接收完毕,接收设备又继续测试线路,监视“0”电平的到来和下一位字符的开始,直到全部数据传输完毕。
2.3握手协议
RS-232C标准除了规定的字符格式和通信波特率以外,还在数据终端设备DTE和数据通信设备DCE之间定义了一套握手协议。
握手协议的过程如图2.5所示。
数据终端设备DTE本地MODEM远程MODEM远程DTE
图2.5DTE与DCE的握手协议过程
1DTR:
数据终端设备DTE准备就绪。
DTE加电并能正确实现通信时,向DCE发出DTR信号。
2DSR:
数据通信设备DCE准备就绪。
MODEM加电并能正确执行通信功能时,DTE发出DSR信号。
3RTS:
请求发送。
当DTE有数据需要向另一远程DTE传输时,DTE在检测DSR有效时向本地MODEM发出RTS信号。
本地MODEM检测到RTS有效,然后根据目的电话号码向远程MODEM发出呼叫。
远程MODEM
收到该呼叫,发出回答载波信号。
本地MODEM接受到此载波信号,然后向远程MODEM发出原载波信号进行
确认,同时向DTE发出数据载波信号DCD。
4DCD:
数据载波信号检测。
由MODEM发向数据终端设备DTE,表示已检测到对方载波信号。
5CTS:
允许发送,当一个MODEM辨认出对方MODEM已经准备接收时,使用CTS信号通知自己的
DTE,表示这个通信通路已经做好数据传输的准备,允许DTE进行数据发送。
至此,通信链路建立,可以
通信。
6RI:
振铃指示。
如果MODEM具有自动应答能力,当对方呼叫传来时,MODEM向DTE发出该信号,
指示此呼叫。
在电话呼叫振铃结束后,MODEM在DTE已准备好的情况下(即DTR有效),立即向对方自动
应答。
2.4双机互连方式
双机可以利用RS-232C通信接口进行直接互连(数据终端设备DTE到DTE),即空MODEM连接。
这种
形式在嵌入式系统中应用极为广泛。
由于RS-232C标准中有两对硬件握手协议的引线:
DTR和DSR、RTS和CTS,根据应用握手协议的机制不同,可分为3种情况:
无硬件握手、DTR和DSR握手、RTS和CTS握手。
2.4.1无硬件握手情况
无硬件握手的双机互连如图2.6所示。
图2.6无握手的双机互连
无硬件握手的连线最简单,只需要3根线,应用比较多。
但通信不可靠,接收缓冲区容易溢出。
2.4.2DTR和DSR握手情况
DTR和DSR握手的双机互连如图2.7所示。
图2.7DTR和DSR握手的双机互
已经做好接收数据的准备,连可以发送数据。
若计算机A为准备好,则DTR无效,计算机B通过采集DSR,
得知计算机A尚未做好接收数据的准备,停止发送数据。
2.4.3RTS和CTS握手情况
RTS和CTS握手的双机互连如图2.8所示。
图2.8RTS和CTS握手的双机互连
利用RTS和CTS握手进行发送和接收数据的过程如下(设计算机A接收、计算机B发送):
若计算机A已经准备就绪,则使RTS有效。
计算机B通过采集CTS,得知计算机A已经做好接收数据的准备,可以发送数据。
若计算机A未准备好,则RTS无效,计算机B通过采集CTS,得知计算机A尚未做好接收数据的准备,停止发送数据。
三、嵌入式串口驱动程序设计由于嵌入式系统是一个受资源限制的系统,因此不能直接在嵌入式系统硬件上进行编程。
作为一个完整的嵌入式系统,其软件设计也是一个很重要的方面。
本系统软件的实现是通过串口设置和读写串口等操作来完成宿主机与目标机间的串口通信。
3.1嵌入式串口操作需要的头文件
在开发嵌入式Linux串口驱动程序时,需要以下头文件。
#include
#include
#include
#include
#include
#include
#include
#include
3.2打开串口
在嵌入式Linux系统中,打开一个串口设备和打开普通文件一样。
嵌入式Linux系统下的串口文件通常位于/dev下:
串口一为/dev/ttyS0;串口二为/dev/ttyS1。
打开串口时通过使用标准的文件函数open()来进行操作的,下面假设以读写方式打开串口一。
intfd;//文件描述符
fd=open(“/dev/ttyS0”,O_RDWR);//以读写方式打开串口
if(fd==-1)//如果不能打开串口一
{
perror(“提示错误!
”);
}
3.3串口设置
在Linux系统中,设备都是以文件的形式表示的,串口参数一般包括波特率、起始位数量、停止位数量等。
下面对这些串口参数进行详细说明。
起始位
通信线路上没有数据被传送时,处于逻辑“1”状态。
当发送字符数数据是首先发送一个逻辑“0”信
号,这个逻辑低电平就是起始位。
起始位通过通信线路传输到接收端,接收端检测到这个低电平之后,就开始准备接收数据位信号。
起始位所起的作用就是使通信双方同步。
数据位
当接收端收到起始位后,开始接收数据位。
数据位的个数可以是5~8位。
在数据传送过程中,数据
位从最低有效位开始传送,接收端收到数据后,依次将其转换成并行数据。
奇偶校验位数据位发送完后,为了保证数据的可靠性,还要传送一个奇偶校验位。
奇偶校验用于差错检测。
如果选择偶检验,则数据位和奇偶位的逻辑“1”的个数必须为偶数,相反,如果是奇检验,则数据位和奇偶
位的逻辑“1”的个数为奇数。
停止位
在奇偶位或数据位(当无奇偶校验时)之后发送停止位。
停止位表示一个数据的结束。
它可以是1~2
位的低电平。
接收端收到停止位后,通信线路便恢复逻辑“1”的状态,直到下一个数据的起始位到来。
波特率通信线路上传输的位(码元)信号都必须保持一致的信号持续时间,单位时间内传送码元的数目称为波特率。
对大多数嵌入式设备来说,其波特率都设置为115200。
访问串行口通过对设备文件的访问来实现,仅需打开相应的设备文件。
串口的设置主要是设置struct
termios
结构体中的各成员值。
#include
structtermio
unsignedshortc_iflag;
/*
输入模式标志*/
unsignedshortc_oflag;
/*
输出模式标志*/
unsignedshortc_cflag;
/*
控制模式标志*/
unsignedshortc_lflag;
/*
本地模式标志*/
线路规范*/
控制特征值*/
unsignedcharc_line;/*unsignedcharc_cc[NCC];/*
}
①波特率设置:
structtermiosoption;tcgetattr(fd,&option);
cfsetispeed(&option,B115200);/*设置为115200Bps*/cfsetospeed(&option,B115200);
tcsetattr(fd,TCANOW,&option);②检验位设置:
无校验8位:
options.c_cflag&=~PARENBoptions.c_cflag&=~CSTOPB;options.c_cflag&=~CSIZE;
options.c_cflag︱=~CS8;奇效验(Odd)7位:
options.c_cflag︱=~PARENB;options.c_cflag&=~PARODD;options.c_cflag&=~CSTOPB;
options.c_cflag&=~
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 linux 嵌入式 串口 通信
文档标签
- 基于C#串口通信
- 基于FPGA串口通信
- 基于嵌入式LINUX车载
- 基于嵌入式linux全彩
- 基于Labview串口通信
- 基于ARMCOSII嵌入式
- 基于SKYEYE嵌入式Linux
- 基于嵌入式ARMLinuxmp3
- 基于ARM9嵌入式Linux
- 基于嵌入式Linux温度
- 基于armuclinux串口
- 基于LABview串口通讯
- 基于s3c2440嵌入式linux
- 基于MatlabGUI串口通信
- 基于嵌入式linux网络
- 基于STM嵌入式web
- 基于VBPC串口
- 基于ARM9嵌入式linux
- 基于VHDLRS232串口
- 基于STCSTC15F2K60S2单片机串口
- 基于SystemViewPSK通信
- EDA基于VHDL串口
- 信息通信基于单片机
- 基于matlabFM通信
- 基于MATLABMIMO通信
- 单片机通过串口通信