历史上的今天
返回首页

历史上的今天

今天是:2024年09月23日(星期一)

正在发生

2019年09月23日 | UART0串口编程(一):通信协议设计;RS232标准

2019-09-23 来源:eefocus

嵌入式系统之间采用通信方式交换数据,串行通信是一种最基本的通信手段。现在由于各类CPU均集成了UART部件。本节对串口编程时如何设计串口通信协议,以及对RS232接口进行了说明。


1.    通信协议设计


在进行通信时,每次需要传送的信息一般超过1字节。为此,通信双方必须约定通信数据的排列格式,即通信协议。通常把一次通信过程的全部内容称为一个“通信帧”。通信协议设计就是帧结构设计。在一帧内容中,通常包括以下部分。


(1)起始码:由一个或若干个包含特定内容的字节,表示一个通信帧的开始。起始码的内容必须与通信数据内容有明显区别(不能在通信数据里出现与起始码相同的内容)。当通信帧的总长度比较短,信道质量比较高时,为了提高效率,可以不设置起始码。


(2)地址码:在主从结构的多机组网通信系统中,用来指明分机号。


当分机总数在255台之内时,地址码为1字节。可以定义一个特殊的地址码作为广播地址,代表所有的分机。在多主多从(无主从)结构的多机组网通信系统中,地址码包含收发双方的地址。如果是两台设备之间进行点对点的通信,帧结构中就步需要包含地址码。


(3)长度码:在数据长度不固定的通信场合(变长帧),表示本帧数据内容的字节数。当长度肯定不超过255字节时,长度码用1字节表示。如果每次通信数据内容的长度为双方约定的固定值(定长帧),帧结构中就不需要包含长度码。


(4)数据段:通信的实质内容。


(5)校验码:由于通信信道存在干扰,为了判断接收的内容是否受到干扰,需要加入效验码。


效验码算法可以采用


1)简单的异或校验码。


2)也可以像HEX文件那样采用算术加法校验。


3)采用功能极强的CRC校验。


注:当通信环境非常好时(如室内设备之间的通信),帧结构中就不需要包含校验码。


2.    RS232标准


(1)简介:


RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。该标准规定采用一个25个脚的DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。随着设备的不断改进,出现了代替DB25的DB9接口,现在都把RS232接口叫做DB9


注:我们后面所用的都是RS232的DB9接口


(2)接口定义如下图:



引脚1:DCD 载波检测


引脚2:RXD 接收数据


引脚3:TXD 发送数据


引脚4:DTR 数据终端准备好


引脚5:SG 信号地


引脚6:DSR 数据准备好


引脚7:RTS 请求发送


引脚8: CTS 清除发送


引脚9: RI 振铃提示


(3)在UART0串口编程中我们只用到了引脚2,引脚3,和引脚5.


(4)目前的串口线有两中连接方法:


平行线:2接2,3接3(即发对发,接对接)


交叉线:2接3,3接2(即发对接,接对发)


各个外设所用的连接方法都不一样。因此,调试程序时,一定要注意你所用的是那中串口线。如果串口线选错的话,它们之间是不通信的。

推荐阅读

史海拾趣

问答坊 | AI 解惑

求vector CANoe使用手册或教程

论坛里各位兄弟,小弟最近学习Vector的CANoe工具,手头唯一的学习资料就是那些帮助文件,感觉很费力。该工具功能多,都不知道从何学起。 想求Vector CANoe或相关工具学习资料、入门简易教程。不知道有没有那位兄弟愿意提供资料给小弟学习学习,谢 ...…

查看全部问答>

看看程序哪边有错

高手看看显示程序哪里出错啊;--------------------------------------- ;  四位共阳LED动态扫描显示程序 ;  P0为段码口,P2为位选口(低电平有效) ;  参数为要显示的字符串指针 ;----------------------------- ...…

查看全部问答>

一起来学MODELSIM

有对学习MODELSIM感举的朋友,一起来学习吧,欢迎访问我的博客,共同学习,共同进步…

查看全部问答>

很苦恼的GPS座标比对

现有固定座标100个(路径是一个大椭圆形,公交車的行駛路線) 和 现在座标1个(移动的) 如何得知目前的座标是往哪个固定座标移动中? 这问题看似简单,可是很复杂阿! 找出现在座标离最近的一站是可以找的出来,没啥, 就是比对100个固定座标和现在 ...…

查看全部问答>

为什么GPIO中有的Pin要设为Pull_Up/Pull_Down?

如题,其中有的pin为输入pin,有的pin为输出pin,但是为什么要设置一些pin的属性为pull up或者为pull down,pull up/pull down到底是干吗用的?根据什么来设的呢,聆听各位大虾的教诲!!…

查看全部问答>

uc/OSII中关于消息队列的疑惑,望大虾们指教

INT8U OSQPost (OS_EVENT *pevent, void *msg) 1、这个函数是发送消息的函数,如果每次都发送一个消息过来,这个消息是指针,那么我认为这个消息一定是一个占一定内存空间的结构。 2、而清空消息队列的函数只是将消息队列的信息给置成空了,但是 ...…

查看全部问答>

寒假想给自己补充些知识

看了DIY板块,发现自己对一些小制作十分有兴趣,高手可以推荐自己动手做一些东西方便入门嘛~~在学校学习了数模电,但是由于课程安排,实验在下个学期上,我想自己在寒假的时候也能进行些小实验。。  手头上有个avr的学习版,  不知道能不 ...…

查看全部问答>

2011年3月1日 有点惊喜

   今天早上九点多查看六级成绩,过了!呵呵·····    今天晚上在外边吃饭,刚吃完手机响了,原来是在论坛申请的“eZ430-RF2500开发套件”到了!    今天我们学校的一卡通正式开通了;    今天重庆 ...…

查看全部问答>

关于CAN发送的问题

我在用CAN发送报文的时候,模式设置和初始化部分 我能确定都没有问题   但是报文发送时始终出现错误  我读取寄存器时,发现发送错误位检测为1. 问各位一个问题报文发送期间会发生总线错误有哪些原因呢    我用的是MSP430操作MC ...…

查看全部问答>

照相手机闪光灯LED驱动的新思路

replyreload += \',\' + 1340057;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>