大学嵌入式串口实验报告框架.docx
- 文档编号:1988985
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:11
- 大小:1.36MB
大学嵌入式串口实验报告框架.docx
《大学嵌入式串口实验报告框架.docx》由会员分享,可在线阅读,更多相关《大学嵌入式串口实验报告框架.docx(11页珍藏版)》请在冰豆网上搜索。
大学嵌入式串口实验报告框架
20XX年复习资料
大
学
复
习
资
料
专业:
班级:
科目老师:
日期:
串口编程实验报告
1)实验目的
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。
常用的串口是RS-232接口。
通过本次实验,主要对串口通讯的工作原理进行进一步了解,同时,进一步熟悉串口读写操作。
此外,在了解串口通信的同时,掌握一系列串口通讯调试时基本的检测方法。
2)串口工作原理
串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线UniversalSerialBus或者USB混淆)。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
比如IEEE488定义并行通行状态时,规定设备线总常不得超过20XX米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达20XXXX00米。
典型地,串口用于ASCII码字符的传输。
通信使用3根线完成:
(1)地线,
(2)发送,(3)接收。
由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。
其他线用于握手,但是不是必须的。
串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。
对于两个进行通行的端口,这些参数必须匹配:
a,波特率:
这是一个衡量通信速度的参数。
它表示每秒钟传送的bit的个数。
例如300波特表示每秒钟发送300个bit。
当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。
这意味着串口通信在数据线上的采样率为4800Hz。
通常电话线的波特率为20XXXX400,28800和36600。
波特率可以远远大于这些值,但是波特率和距离成反比。
高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。
b,数据位:
这是衡量通信中实际数据位的参数。
当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。
如何设置取决于你想传送的信息。
比如,标准的ASCII码是0~20XXXX7(7位)。
扩展的ASCII码是0~255(8位)。
如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。
每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。
由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。
c,停止位:
用于表示单个包的最后一位。
典型的值为1,1.5和2位。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。
因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
d,奇偶校验位:
在串口通信中一种简单的检错方式。
有四种检错方式:
偶、奇、高和低。
当然没有校验位也是可以的。
对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。
例如,如果数据是020XXXX,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。
如果是奇校验,校验位位1,这样就有3个逻辑高位。
高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。
这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步.
Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备。
在linux系统下面,每一个串口设备都有设备文件与其关联,设备文件位于系统的/dev目录下面。
如linux下的/ttyS0,/ttyS1分别表示的是串口1和串口2。
下面来详细介绍linux下是如何使用串口的:
1. 串口操作需要用到的头文件
#include
#include
#include
#include
#include
#include
#include
#include
#include
2. 串口通讯波特率设置
波特率的设置定义在
常用的波特率常数如下:
B0-------à0 B20XXXX00-------à20XXXX00
B50-----à50 B2400------à2400
B75-----à75 B4800------à4800
B20XXXX0XX----à20XXXX0XX B20XXXX00------à20XXXX00
B20XXXX4----à20XXXX4.5 B20XXXX20XX0-----à20XXXX20XX0
B20XX0----à20XX0 B38400------à38400
B300----à300 B57600------à57600
B600----à600 B76800------à76800
B20XXXX00---à20XXXX00 B20XXXX520XX0-----à20XXXX520XX0
假定程序中想要设置通讯的波特率,使用cfsetispeed()和cfsetospeed()函数来操作,获取波特率信息是通过cfgetispeed()和cfgetospeed()函数来完成的。
比如可以这样来指定串口通讯的波特率:
#include
structtermiosopt; /*定义指向termios结构类型的指针opt*/
/***************以下设置通讯波特率****************/
cfsetispeed(&opt,B20XXXX00);/*指定输入波特率,20XXXX00bps*/
cfsetospeed(&opt,B20XXXX00);/*指定输出波特率,20XXXX00bps*/
/************************************************/
一般来说,输入、输出的波特率应该是一致的。
3. 串口属性配置
在程序中,很容易配置串口的属性,这些属性定义在结构体structtermios中。
为在程序中使用该结构体,需要包含文件
该结构体定义如下:
#defineNCCS20XXXX
structtermios{
tcflag_tc_iflag; /*输入参数*/
tcflag_tc_oflag; /*输出参数*/
tcflag_tc_cflag; /*控制参数*/
tcflag_tc_ispeed; /*输入波特率*/
tcflag_tc_ospeed; /*输出波特率*/
cc_tc_line; /*线控制*/
cc_tc_cc[NCCS]; /*控制字符*/
};
其中成员c_line在POSIX(PortableOperatingSystemInterfaceforUNIX)系统中不使用。
对于支持POSIX终端接口的系统中,对于端口属性的设置和获取要用到两个重要的函数是:
(1).inttcsetattr(intfd,intopt_DE,*ptr)
该函数用来设置终端控制属性,其参数说明如下:
l fd:
待操作的文件描述符
l opt_DE:
选项值,有三个选项以供选择:
TCSANOW:
不等数据传输完毕就立即改变属性
TCSADRAIN:
等待所有数据传输结束才改变属性
TCSAFLUSH:
清空输入输出缓冲区才改变属性
l *ptr:
指向termios结构的指针
函数返回值:
成功返回0,失败返回-1。
(2).inttcgetattr(intfd,*ptr)
该函数用来获取终端控制属性,它把串口的默认设置赋给了termios数据数据结构,其参数说明如下:
l fd:
待操作的文件描述符
l *ptr:
指向termios结构的指针
函数返回值:
成功返回0,失败返回-1。
4. 打开串口
在前面已经提到linux下的串口访问是以设备文件形式进行的,所以打开串口也即是打开文件的操作。
函数原型可以如下所示:
intopen(“DE_name”,intopen_Status)
参数说明:
(1).DE_name:
要打开的设备文件名
比如要打开串口1,即为/dev/ttyS0。
(2).open_Status:
文件打开方式,可采用下面的文件打开模式:
l O_RDONLY:
以只读方式打开文件
l O_WRONLY:
以只写方式打开文件
l O_RDWR:
以读写方式打开文件
l O_APPEND:
写入数据时添加到文件末尾
l O_CREATE:
如果文件不存在则产生该文件,使用该标志需要设置访问权限位mode_t
l O_EXCL:
指定该标志,并且指定了O_CREATE标志,如果打开的文件存在则会产生一个错误
l O_TRUNC:
如果文件存在并且成功以写或者只写方式打开,则清除文件所有内容,使得文件长度变为0
l O_NOCTTY:
如果打开的是一个终端设备,这个程序不会成为对应这个端口的控制终端,如果没有该标志,任何一个输入,例如键盘中止信号等,都将影响进程。
l O_NONBLOCK:
该标志与早期使用的O_NDELAY标志作用差不多。
程序不关心DCD信号线的状态,如果指定该标志,进程将一直在休眠状态,直到DCD信号线为0。
函数返回值:
成功返回文件描述符,如果失败返回-1
例如假定以可读写方式打开/dev/ttyS0设备,就可以这样操作:
#include
intfd
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 嵌入式 串口 实验 报告 框架
![提示](https://static.bdocx.com/images/bang_tan.gif)