您的当前位置:首页正文

串口通信发送接口

2023-01-01 来源:好走旅游网
南通大学(课程设计)

第一章 绪论

1.1 概述

随着计算机系统的应用和微机网络的发展,通信功能越来越显的重要。这里所说的通信是只计算机与外界的信息交换。因此,通信既包括计算机与外部设备之间,也包括计算机和计算机之间的信息交换。由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。对于那些与计算机相距不远的人-机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。在实时控制和管理方面,采用多台微机处理机组成分级分布控制系统中,各CPU之间的通信一般都是串行方式。所以串行接口是微机应用系统常用的接口。

许多外设和计算机按串行方式进行通信,这里所说的串行方式,是指外设与接口电路之间的信息传送方式,实际上,CPU与接口之间仍按并行方式工作。

1.2 现场可编程门阵列FPGA

FPGA(field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路出现的,既解决了制定电路的不足,又克服了原有可编程器件门电路数有限的缺点。

目前以硬件描述语言(Verilog 或 VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至 FPGA 上进行测试,是现代 IC 设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。

系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。

1.3 Verilog HDL简介

Verilog HDL这种硬件描述语言被用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序

1

南通大学(课程设计)

建模。Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。 Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。

第二章 串行通信系统

2.1 串行通信的概念和特点

串行通信是指使用一条数据线(另外需要地线,可能还需要控制线),将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机、计算机与外设之间的远距离通信。使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0。

1100110111001101发送端11001101并/串转换串/并转换接收端 串行通信的特点是:数据传送按位顺序进行,最少值只需要一根传输线即可完成,节省传输线。与并行通信相比还有较为显著的优点,传输距离长,可以几米到几千米。在长距离内串行数据传送速率比并行数据传送速率快,,串行通信的通信时钟频率容易提高,串行通信的干扰能力十分强,其信号间的互相干扰完全可以忽略。

正是由于串行通信的接线少、成本低,因此它在数据采集和控制系统中得到了广泛的应用,产品也多种多样。

2

南通大学(课程设计)

2.2 串行通信的分类

串行传输中,数据时一位一位按照到达的顺序依次传输的,每位数据的发送的接受都需要时钟来控制,发送端通过发送时钟确定数据位的开始和结束,接受端需要在适当的时间间隔对数据流进行采样来正确的识别数据。接收端和发送端必须保持步调一致,否则数据传输就会出现差错。为了解决以上问题,串行通信可采用以下两种方法:同步通信和异步通信。

⑴同步通信:

同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。

它们均由同步字符、数据字符和校验字符(CRC)组成。其中同步字符位于帧开头,用于确认数据字符的开始。数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。

⑵异步通信:

串行异步通信即RS232通信,是主机与外部硬件设备的常用通讯方式。可以双向传输。

异步通信中,在异步通行中有两个比较重要的指标:字符帧格式和波特率。数据通常以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。

接收端检测到传输线上发送过来的低电平逻辑\"0\"(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。

异步通信中典型的帧格式是:1位起始位,7位(或8位)数据位,1位奇偶校验位,2位停止位。

3

南通大学(课程设计)

2.3串行通信的工作模式

通过单线传输信息是串行数据通信的基础。三种传送模式:单工、半双工、全双工。

1. 单工形式:单工形式的数据传送是单向的。通信双方中,一方固定是发送端,另一方则固定是接收端,使用一根传输线,如图1-2所示。

发送端地线接收端 图1-2 单工形式

2. 半双工形式:半双工通信使用同一根传输线,即可发送数据又可接受数据,但不能同时发送和接受。在任何时刻只鞥由其中的一方发送数据,另一方接受数据。因此半双工形式既可以使用 一条数据线,也可以使用两条数据线。如图1-3所示。

发送端接收端发送端接收端地线图1-3半双工形式

半双工通信中每个端口都需要有一个收/发切换电子开关,通过切换来决定数据向哪个方向传输。因为有切换,所以会产生时间延迟,信息传输效率较低。 2. 全双工形式:RS-232

全双工数据通信分别由两根可以在两个不同的端点同时发送和接收的传输线进行传送,通信双方都能在同一时刻进行发送和接收操作。如图1-4所示。

发送端接收端发送端接收端地线图1-4全双工形式

4

南通大学(课程设计)

在全双工形式中,每一端都有发送器和接收器,有两条传送线,可在交互式应用和远程监控系统中使用,信息传输效率较高。

2.4 RS232简介

通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现,一般个人计算机上会有两组 RS-232 接口,分别称为 COM1 和 COM2。 RS-232 标准规定的数据传输速率为每秒150、300、600、1200、2400、4800、9600、19200波特。

RS-232 标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。

第三章 UART通信协议

在异步通信中,是以字符为单位传送数据,是从低位到高位逐位传送,一个字符表示一帧信息。。串行异步通信协议中字符代码传输格式如图2.3所示,通常UART的一帧数据由四部分组成:一个起始位S(一般逻辑为“0”),后面是数据长度可变的数据位D0~D7(一般为6位到8位之间可变,数据的低位在前),一个可选的校验位PB(可选奇校验、偶检验或不需要检验),随后是一定长度的停止位P(可选1位、1.5位、或2位),停止位必须为逻辑“1”。在没有数据被传输时,数据线会一直处于逻辑“1”状态。

SDDDDDDDDPB P

5

南通大学(课程设计)

图2-3 UART的字符帧格式

a,起始位:它是数据采样的第一个点,当接收模块检测串行输入数据管脚上的电平从“1”到“0”的跳变来确定一个UART包的起始位。起始位检测8个连续脉冲的另一个更重要的原因是,采用16倍频采样的时钟,第8个采样脉冲所对应的数据波形正好是该位数据位波形的正中点(以时钟上升沿采样),在该处读写数据应该是最安全点。

b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。。

c,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶数个或者奇数个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不为真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

d,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

在UART协议中,数据的发送者与接收者不共享时钟信号,也就是说,在一次UART通信过程中,并没有一个时钟信号从发送端传输到接收端,因此,这个协议被称为异步方式。

由于没有共享时钟信号,因此在进行数据传输之前,收发双方必须协商好一个数据 传输的波特率,也就是说,UART接收端应该知道发送端发送数据的波特率(相应的发送端也需要知道接收端的波特率)。在大多数情况下,发送数据和接受数据的波特率是相同的。UART发送端按照低位在前,高位在后的顺序移位输出数据。一旦在初始化过程中,双方协商好了通信的波特率,收发双方的内部时钟都设定在同一波特率(但时钟的相位不同)。在一个UART包传输开始,接收端将它的内部时钟调整到与发送端同步。这样接收端就可以在每一位的中心位置对数据位进行采样,保证数据传输的正确性。

6

南通大学(课程设计)

第四章 课程设计

4.1设计课题——串行通信发送接口

功能:通过DE2的拨码开关来选择要发送的数据,当DE2上的某一个独立按键被按下的时候,数据会通过RS232串口发送到PC。

基本要求:掌握串口通信协议,完成串口数据的发送功能

硬件验证要求:在PC机通过“串行通信接口调试助手”软件接收由DE2发送过来的数据。

4.2设计方案

设计中采用动态扫描的方式把数据输出出来,共用到八个DE2开关,当DE2上的某一个独立按键被按下的时候,按键输入的信号会通过相应的端口进行传输,数据会通过RS232串口发送到PC,最后由软件调试助手显示出来。

4.3设计流程图

开始 是否产生按键 中断 Y 显示数据模块 N 结束

7

南通大学(课程设计)

4.4 Verilog HDL程序

module write(clk,rst,dout_ser,button,txclk); input[7:0]button;

input clk; //时钟信号 input rst; // 复位信号 reg [13:0]q; reg m;

reg[9:0] dout_buf,dout_buf1; //输出缓冲寄存器,加了起停位 output reg dout_ser; //串行数据输出

output reg txclk; //发送数据时钟。发数据取9600的波特率 reg txdone=1'b1; //一个字节数据传输完毕标志 reg[3:0] state_tx=0;

always @(posedge clk) //分频,波特率为9600 if(q==2604) begin

q<=2605; txclk<=1; end

else if(q==5208) begin q<=0; txclk<=0; end else

q<=q+1;

always@(posedge txclk or posedge rst) begin if(rst) begin

dout_ser<=1'bz; state_tx<=0; txdone<=1'b0; end

else

begin

dout_buf={1'b1,button[7:0],1'b0};

8

南通大学(课程设计)

begin //DE2开关检测 if(m==0) begin

dout_buf1<=dout_buf; m<=m+1; end end

begin

if(dout_buf1-dout_buf!=0) begin

m<=0;

state_tx<=0; end end

begin

case(state_tx) 0:begin

dout_ser<=dout_buf[0];state_tx<=state_tx+1;end 1:begin

dout_ser<=dout_buf[1];state_tx<=state_tx+1;end 2:begin

dout_ser<=dout_buf[2];state_tx<=state_tx+1;end 3:begin

dout_ser<=dout_buf[3];state_tx<=state_tx+1;end 4:begin

dout_ser<=dout_buf[4];state_tx<=state_tx+1;end 5:begin

dout_ser<=dout_buf[5];state_tx<=state_tx+1;end 6:begin

dout_ser<=dout_buf[6];state_tx<=state_tx+1;end 7:begin

dout_ser<=dout_buf[7];state_tx<=state_tx+1;end 8:begin

dout_ser<=dout_buf[8];state_tx<=state_tx+1;end 9:begin

dout_ser<=dout_buf[9];state_tx<=state_tx+1;end default dout_ser<=1'bz; endcase end end end endmodule

9

南通大学(课程设计)

4.5仿真波形

4.6逻辑图及引脚图

引脚图

10

南通大学(课程设计)

4.7实验结果

把实验板上电,下载完成后在PC上打开串口调试助手,实现的功能如图所示,这就是FPGA里实现从PC接收数据,然后把接收到的数据发回去。使用的是串口UART协议进行收发数据。用串口调试助手,如下:

对结果进行说明或分析

在上方接收区的串口选择COM1,波特率选择9600,但发送数据的波特率可选9600bps,19200bps,38400bps,57600bps,115200bps等,是可调的。发送格式为:1bit起始位,8bit数据,1bit停止位,无校验位。经过下载验证,其结果完全符合UART协议的要求和预期的结果。

11

南通大学(课程设计)

总结

为期两周的课程设计结束了,它不仅锻炼了我查阅资料,进行方案构思的能力,而且教会了了如何更好的进行团队合作。在设计过程中,我们按照指导老师的要求逐步完善设计方案。对指导老师提出的问题进行了详细的修改。较好的完成了设计任务。但也暴露出了一些问题。

在这次课程设计中,由于理论知识的不足,再加上平时没有什么设计经验,一开始的时候有些手忙脚乱,不知从何入手。但在老师辛勤的指导下,和同学的热情帮助下,是我顺利的完成了设计。现在想想其实课程设计当中的每一天都是很累的,特别是在仿真波形对的情况下,而在下载到板子上无反应时,由于在设计之前都没有接触过,所以在试验中遇到了大大小小不少的问题,其实正像老师说的一样,硬件描述语言的课程设计没有那么简单,你想copy或胡乱做几个原理图和程序来偏偏老师都是不行的,因为你的程序最后是要通过实物验证的。虽然困难很多,但是我进了自己最大的努力去克服,然而还是难免有些遗漏和疏忽的地方。完美总是可望而不可求的,不在同一个地方跌倒两次才是最重要的。抱着这个心里我一步步走了过来,最终完成了我的任务。

在这次的实践过程中我学到了一些除理论知识以外的其他东西,领略到了别人在处理专业问题是显示的优秀品质,更深切的体会到人与人之间的那种相互协调合作的机制,最重要的还是自己对一些问题的看法产生了良性的变化。

参考文献

[1] 夏宇闻 ,Verilog数字系统设计教程(第2版)[M] ,北京航空航天大学出版社,2008

[2] 蒋艳红 基于FPGA的UART设计与应用[J].工程应用技术与实现 2008.34(21):225-229.

[3] 韩德红 ,基于FPGA的串口控制器设计与实现[J].空军雷达学院学报,2008,6(02):113-116

[4] 利民、屠玲刚、潘忠鸽、朱志亮 ,基于FPGA的串口通信设计与实现[J].,黑龙江科技信息

[5] 陆重阳,卢东华.FPGA技术及其发展趋势[J].微电子技术,2003,(01):5-7

12

南通大学(课程设计)

致 谢

在这段将近两个星期的时间里,我一直围绕着我的课程设计奋斗,有时也挺痛苦的,现在我终于完成了我的课程设计,在做个设计以及写论文期间,出现了很多问题,但是指导老师是一个有耐心又称职的老师,他也不厌其烦得给我解决我的问题,如:帮助我对这个设计的理论基础,整个系统的构造的详细了解;帮助我查阅资料和资料提供;我之所以能完成好这个毕业设计,多亏了我的指导老师对我的细心教导,所以我非常感谢我的指导老师。

也感谢我们的Verilog数字系统老师,因为他平时上课对我们的监督,以及他上课方式,让我们喜欢他的课。也感谢他在开题时的指导,以及给予我对这次设计思路的提点。

其次感谢我的同学,感谢他们给予我精神上的开导和生活上的帮助以及对我在论文写作的部分时间的监督。

最后感谢中国共产党给予我学习的机会,更要感谢南通大学电子信息学院给予我一个学习的平台,让我好好的完成了我的课程设计,让我有一个美好的经历和回忆。

再次由衷的感谢所有给予我帮助和指导的人。

13

因篇幅问题不能全部显示,请点此查看更多更全内容