【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口示波器

九、基于串口猎人软件的串口示波器

 

1、实验介绍

本实验,为芯航线开发板的综合实验,该实验利用芯航线开发板上的ADC、独立按键、UART等外设,搭建了一个具备丰富功能的数据采集卡,芯航线开发板负责进行数据的采集并将数据通过串口发送到PC机上,PC端,利用强大的串口调试工具——串口猎人,来实现数据的接收分析,并将数据分别以波形、码表、柱状图的形式动态显示出来,以让使用者能够直观的看到ADC采集到的信号细节。同时,用户也可以使用串口猎人通过串口给下位机(FPGA)发送指令,下位机将对接收到的指令进行解码,然后依据解码结果来配置FPGA中各个子模块的控制寄存器,以实现通过串口控制FPGA中子模块工作状态的功能。

本实验中,涉及到的应用模块和知识点如下所示:

串口收发模块的设计和使用;

串口收发模块仿真模型的设计;

串口简单数据帧的解码;

串口帧转Memory Mapped总线的设计;

Memory Mapped Slave模块的设计;

线性序列机设计思想的应用(ADC驱动);

独立按键消抖的分析与实现;

直接数字频率合成(DDS)的设计与实现;

使能时钟对系统间模块协调工作的重要性;

串口猎人的详细使用;

完整系统的仿真验证设计;

头文件在设计中的运用;

Quartus II软件中可定制化存储器ROM的使用;

本实验不仅注重可综合的代码编写,同时更注重代码的仿真验证。通过仿真,我们能够寻找设计中可能存在的问题并修正。最终,在整个系统仿真无误的基础上,下载到开发板上一次性成功。

2、系统结构

下图为本设计的框架结构图:

图片1

系统采用模块化设计,在模块划分的过程中,重点考虑了系统的可扩展性,下表为对系统中各模块功能的简单介绍。

图片2

系统中各端口和信号的功能介绍如下:

图片3-1图片3-2图片3-3

 

本实验为综合性实验,代码量较大,因此这里只针对部分代码进行讲解。如果文档中没有讲到的内容,大家可以参看代码注释。

模块详解

3.1 Tx_Bps_Gen

Tx_Bps_Gen为发送波特率生成模块,每当有Byte_En信号到来时,即开始产生发送一个完整字节的数据需要的完整波特率时钟信号。

本设计,波特率支持9600bps到921600bps。例如,需要产生的波特率时钟为9600bps,即波特率时钟频率为9600Hz,周期为104.17us。生成9600Hz波特率时钟的核心思想就是对系统时钟进行计数,这里设定系统时钟为50MHz,则一个时钟的周期为20ns,我们只需要对系统时钟计数5208次,每计数5208次产生一个时钟周期的高电平脉冲,即可实现生成9600Hz波特率时钟的功能。相应代码如下所示:

图片4-1图片4-2图片4-3图片4-4图片4-5

第18行“parameter system_clk = 50_000_000;”,这里用一个全局参数定义了系统时钟,暂时设定为50M,可根据实际使用的板卡上的工作时钟进行修改。

所谓波特率生成,就是用一个定时器来定时,产生频率与对应波特率时钟频率相同的时钟信号。例如,我们使用波特率为115200bps,则我们需要产生一个频率为115200Hz的时钟信号。那么如何产生这样一个115200Hz的时钟信号呢?这里,我们首先将115200Hz时钟信号的周期计算出来,1秒钟为1000_000_000ns,因此波特率时钟的周期Tb= 1000000000/115200 =8680.6ns,即115200信号的一个周期为8680.6ns,那么,我们只需要设定我们的定时器定时时间为8680.6ns,每当定时时间到,产生一个系统时钟周期长度的高脉冲信号即可。系统时钟频率为50MHz,即周期为20ns,那么,我们只需要计数8680/20个系统时钟,就可获得8680ns的定时,即bps115200=Tb/Tclk - 1=Tb*fclk - 1=fclk/115200-1。相应的,其它波特率定时值的计算与此类似,这里小梅哥就不再一一分析。20行至28行为波特率定时器定时值的计算部分。

为了能够通过外部控制波特率,设计中使用了一个3位的波特率选择端口:Baud_Set。通过给此端口不同的值,就能选择不同的波特率,此端口控制不同波特率的原理很简单,就是一个多路选择器,第32行至第48行即为此多路选择器的控制代码, Baud_Set的值与各波特率的对应关系如下:

000 : 9600bps;

001 : 19200bps;

010 :38400bps;

011 :57600bps;

100 :115200bps;

101 :230400bps;

110 :460800bps;

111 :921600bps;

3.2 Uart_Byte_Tx

Uart_Byte_Tx为字节发送模块,该模块在波特率时钟的节拍下,依照UART通信协议发送一个完整的字节的数据。当一个字节发送完毕后,Tx_Done产生一个高脉冲信号,以告知其它模块或逻辑一个字节的数据已经传输完成,可以开始下一个字节的发送了。其发送一个字节数据的实现代码如下:

图片5-1图片5-2图片5-3

在UART协议中,一个完整的字节包括一位起始位、8位数据位、一位停止位即总共十位数据,那么,要想完整的实现这十位数据的发送,就需要11个波特率时钟脉冲,如下所示:

 

图片6

BPS_CLK信号的第一个上升沿到来时,字节发送模块开始发送起始位,接下来的2到9个上升沿,发送8个数据位,第10个上升沿到第11个上升沿为停止位的发送。

3.3 Uart_Byte_Rx

单个串口接收模块中实现串口数据接收的主要代码如下所示:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、基本功能 1、支持16个COM口、自动/手动搜索串口串口参数的设置和查看。 2、支持查看或修改串口控制线(DTR、RTS、DCD等等)的状态。 3、支持基本的收、发、查看、保存、载入、清除等功能。 4、两种收发格式:HEX码/字符串,支持中文字符串。(英文=ASCII码,中文=ANSI(GBK)码)。 5、大容量的收码区,为了加快显示速度会把超过10K的数据自动隐藏(可以点击【全显】钮查看)。 6、收码区的显示方式可以灵活设置:原始接收数据、按帧换行、通道数据、发送数据。 7、可以为收到的数据标注时间和来源。 8、可以自动比对发码区和收码区的数据是否一致(用于自发自收测试模式)。 9、收码区的内容,可以点击【转发】钮转到发码区。 10、可以在每次发码之前自动清除收码区。 二、高级发码功能 1、自动发列表功能:支持多组(最多16组)数据的轮流发送。 2、自动发文件功能:支持文件逐行发送。 3、轮发规则可以灵活设置,比如可以定时发,也可以收到应答后立即发。 4、轮发的间隔、无应答重发次数和循环次数均可灵活设置。 5、灵活的帧格式设置。支持自动添加帧头、帧尾、帧长、校验、回车换行符。 6、帧头、帧尾、帧长、校验,是否要参与校验或计入帧长,皆可灵活设置。 7、支持3种校验方式:SC(累加和校验)、LRC(纵向冗余校验)、BBC(异或和校验)。 8、校验码和帧长的长度,可以选择单/双字节。 三、高级收码功能 1、支持按帧接收数据。 2、能自动进行帧结束判定(方式非常灵活,可以按帧头、帧尾、帧长或时间)。 3、即时显示最新一帧内容。 4、拥有八个独立接收通道,可以自动从指定帧中指定位置收取有效数据。 5、每个通道的数据,可以独自显示、保存、清除。也可以送到收码区去显示。 6、可以设置通道收取数据的首地址、字节长度(单字节或多字节)、码制(HEX/BCD)、符号位形式。 7、示波器功能,可把收取的数据用波形方式显示。示波器的通道数、倍率、偏移、周期、颜色和线宽等可调。 8、码表功能,可把收取的数据用码表方式显示。(可以设置码表的最大/最小值和报警值)。 9、柱状图功能,可把收取的数据用柱状图方式显示。(也可以设置最大/最小值和报警值)。 10、可以把实施绘制的图形保存为图片。 四、其它贴心设计 1、用户的设置内容,可以保存/载入或恢复默认值。可以选择启动时载入默认值还是上次设置值。 2、可以通过提示区和状态指示了解软件当前工作状态。 3、当鼠标停留在按钮、文本框或其它控件上,会获得必要的提示。 4、右下角的图钉按钮,可以把窗口钉在最前面,避免被其它窗口覆盖。 5、附送串口电路、协议、码表等参考资料。 6、在【版权信息】标签页有匠人的联系方式,欢迎交流。
串口猎人(Serial Hunter)是一款强大实用的串口调试工具,串口猎人调试工具能以十六进制显示信息,可进行基本发码,高级收码和发码,显示波形及码表,以柱状显示通道信息。点击右侧【清除】按钮,可清除本帮助信息。清除后如想再次查阅,请重启软件。如果要从接收内容中自动提取有效数据,请使用高级收码功能。 串口猎人(Serial Hunter)功能介绍 一、基本功能 1、支持16个COM口、自动/手动搜索串口串口参数的设置和查看。 2、支持查看或修改串口控制线(DTR、RTS、DCD等等)的状态。 3、支持基本的收、发、查看、保存、载入、清除等功能。 4、两种收发格式:HEX码/字符串,支持中文字符串。(英文=ASCII码,中文=ANSI(GBK)码)。 5、大容量的收码区,为了加快显示速度会把超过10K的数据自动隐藏(可以点击【全显】钮查看)。 6、收码区的显示方式可以灵活设置:原始接收数据、按帧换行、通道数据、发送数据。 7、可以为收到的数据标注时间和来源。 8、可以自动比对发码区和收码区的数据是否一致(用于自发自收测试模式)。 9、收码区的内容,可以点击【转发】钮转到发码区。 10、可以在每次发码之前自动清除收码区。 二、高级发码功能 1、自动发列表功能:支持多组(最多16组)数据的轮流发送。 2、自动发文件功能:支持文件逐行发送。 3、轮发规则可以灵活设置,比如可以定时发,也可以收到应答后立即发。 4、轮发的间隔、无应答重发次数和循环次数均可灵活设置。 5、灵活的帧格式设置。支持自动添加帧头、帧尾、帧长、校验、回车换行符。 6、帧头、帧尾、帧长、校验,是否要参与校验或计入帧长,皆可灵活设置。 7、支持3种校验方式:SC(累加和校验)、LRC(纵向冗余校验)、BBC(异或和校验)。 8、校验码和帧长的长度,可以选择单/双字节。 三、高级收码功能 1、支持按帧接收数据。 2、能自动进行帧结束判定(方式非常灵活,可以按帧头、帧尾、帧长或时间)。 3、即时显示最新一帧内容。 4、拥有八个独立接收通道,可以自动从指定帧中指定位置收取有效数据。 5、每个通道的数据,可以独自显示、保存、清除。也可以送到收码区去显示。 6、可以设置通道收取数据的首地址、字节长度(单字节或多字节)、码制(HEX/BCD)、符号位形式。 7、示波器功能,可把收取的数据用波形方式显示。示波器的通道数、倍率、偏移、周期、颜色和线宽等可调。 8、码表功能,可把收取的数据用码表方式显示。(可以设置码表的最大/最小值和报警值)。 9、柱状图功能,可把收取的数据用柱状图方式显示。(也可以设置最大/最小值和报警值)。 10、可以把实施绘制的图形保存为图片。 四、其它贴心设计 1、用户的设置内容,可以保存/载入或恢复默认值。可以选择启动时载入默认值还是上次设置值。 2、可以通过提示区和状态指示了解软件当前工作状态。 3、当鼠标停留在按钮、文本框或其它控件上,会获得必要的提示。 4、右下角的图钉按钮,可以把窗口钉在最前面,避免被其它窗口覆盖。 5、附送串口电路、协议、码表等参考资料。 6、在【版权信息】标签页有匠人的联系方式,欢迎交流。 串口猎人(Serial Hunter)截图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值