如何使用RS-232发射器和接收器?
目录
前言
设计一
设计二(回环)
设计二(回环)测试
前言
前面讲到了波特率的产生,发射器以及接收器:
RS232 波特率时钟产生方法?
RS-232 Transmitter
RS-232 Receiver
如何把这些模块链接起来,实现一些功能呢?
这篇博文就是干这个事情的。
参考链接:https://www.fpga4fun.com/SerialInterface5.html
原文提供的思路已经很不错了。
我之前也写过一篇有发射器和接收器构成的一个RS232回环实验:
UART的回环实例
设计一
好了进入正题:
这种设计允许从PC控制一些FPGA引脚(通过PC的串行端口)。
它在FPGA上创建8个输出(名为“GPout”的端口)。 GPout由FPGA接收的任何字符更新。
FPGA上还有8个输入(名为“GPin”的端口)。 每次FPGA接收到字符时都会发送GPin。
GP输出可用于从PC远程控制任何东西,可能是LED或咖啡机......
给出Verilog描述:
module serialGPIO(input clk,input RxD,output TxD,output reg [7:0] GPout, // general purpose outputsinput [7:0] GPin // general purpose inputs
);wire RxD_data_ready;wire TxD_busy;wire [7:0] RxD_data;
asy_receiver RX(.clk(clk), .RxD(RxD), .RxD_data_ready(RxD_data_ready), .RxD_data(RxD_data));
always @(posedge clk) if(RxD_data_ready) GPout <= RxD_data;asy_transmitter TX(.clk(clk), .TxD(TxD), .TxD_start(RxD_data_ready), .TxD_data(GPin), .TxD_busy(TxD_busy));endmodule
调用的模块代码就不在粘贴一遍了,去其他博文里面找。
这里给出RTL原理图,以便看出原理,以及这些模块是如何连接的:
从这幅原理图可以看出RX与TX之间的连接关系,RX接收外部的串行输入,当接收完毕后,RXD_data_ready有效,作为后面同步寄存器的使能,延迟一拍后,通过GPout输出。
同时TX模块接收一个8位数据GPin,开始发送信号也为RxD_data_ready,也就是说,当RX模块接收完数据后,Tx就开始发送GPin。
设计二(回环)
如果将RxD_data直接作为TX的输入,则形成一个RS232回环:
module serialGPIO(input clk,input RxD,output TxD// output reg [7:0] GPout, // general purpose outputs
// input [7:0] GPin // general purpose inputs
);wire RxD_data_ready;wire TxD_busy;wire [7:0] RxD_data;
asy_receiver RX(.clk(clk), .RxD(RxD), .RxD_data_ready(RxD_data_ready), .RxD_data(RxD_data));
//always @(posedge clk) if(RxD_data_ready) GPout <= RxD_data;asy_transmitter TX(.clk(clk), .TxD(TxD), .TxD_start(RxD_data_ready), .TxD_data(RxD_data), .TxD_busy(TxD_busy));endmodule
RTL原理图为:
话说链接是连接了,但是能不能正常工作呢?
第一步,写个测试代码验证一下呗。
设计二(回环)测试
测试代码很简单,直接用之前的 RS232 Receiver
`timescale 1ns / 1psmodule serialGPIO_tb( );reg clk;reg RxD;//wire RxD_data_ready;//wire [7 : 0] RxD_data; // data received, valid only (for one clock cycle) when RxD_data_ready is assertedwire TxD;parameter DATA0 = 10'b1101001010; //从低位开始发送
// parameter DATA1 = 10'b1010011010;reg [9:0] data_in;integer i;initial beginclk = 0;forever #20 clk = ~clk;endinitial begindata_in = DATA0;for(i = 0; i < 9; i = i + 1) begin#8700 RxD = data_in[i]; end#26100for(i = 0; i < 9; i = i + 1) begin#8700 RxD = data_in[i];end//#10000 $stop;endserialGPIO u_serialGPIO(.clk(clk),.RxD(RxD),.TxD(TxD) );endmodule
仿真效果很满意:
RxD_data_ready有效时,接收完毕,于此同时TxD_start有效,开始发送数据。
最后设计一的仿真自己做吧。
如何使用RS-232发射器和接收器?相关推荐
- RF发射器和接收器电路
原文地址:https://circuitdigest.com/electronic-circuits/rf-transmitter-and-receiver-circuit-diagram RF发射器 ...
- APM 学习 13 --- ArduPilot 遥控器 RC 发射器和接收器
英文原文地址: https://ardupilot.org/copter/docs/common-pixhawk-and-px4-compatible-rc-transmitter-and-recei ...
- 红外线发射器与接收器模块使用教学
硬件介绍 (上图为红外线接受模块,下图为红外线发射模块) 红外线接受模块和红外线发射模块均与led外设相同,有三根引脚,其硬件连接方式也大致相同.红外线接受模块只用于空调红外线的解码,而在实品的运用中 ...
- STM32红外遥控实验(发射器和接收器)
这个实验是学院的开放实验,2个小时写完了代码,使用STM32控制器,特此记录一下,比较水,有需要的朋友可以参考一下,想要代码请加入群.欢迎加入QQ群:681976114,点击这里加群 文章来源地址:h ...
- 杰理之AC695_3.0.4_SDK做发射器连接接收器无声问题解决方法【篇】
在bt_emitter.c文件添加此行代码即可:u8a2dp_wait_remote_discovecr=0;
- linux红外驱动程序,基于Linux操作系统和红外发射器实现系统模块的设计
引 言 随着嵌入式系统及集成电路技术的飞速发展,针对移动手持终端的专用芯片获得了长足发展.芯片的RAM和ROM的容量越大,在上面跑操作系统也越来越容易.Linux是当今流行的操作系统之一.由于其内核健 ...
- 每个工程师都应该知道的 5 个射频发射器测量指标(自NI官网翻译)
概述 射频发射器是现代通信的重要组成部分.射频发射器由核心射频组件设计和组装而成,具有多种不同的形式和应用.我们经常想到无线通信中的射频发射器,但这个概念同样适用于有线应用,如有线电视.蜂窝电话.雷达 ...
- tl494组成的超声波发射电路_最简单无线发射电路图大全(超声波发射/射频收发电路/调频发射器) - 全文...
最简单无线发射电路图(一):555构成的超声波发射电路 从555的3脚输出的40kHz的振荡脉冲驱动T-40-16工作,使之发射出40kHz的超声波信号.电路工作电压为9V,工作电流为40-45mA, ...
- 基于simulink使用混合波束成形对射频毫米波发射器进行建模(附源码)
一.前言 本例说明了一种使用66元件混合波束成形天线对32 GHz QPSK射频发射和接收系统进行系统级建模和仿真的方法.该系统包括射频缺陷.发射阵列辐射效应.窄带接收阵列和基带接收器,可校正系统损伤 ...
最新文章
- 如何用eclipse操作MySQL数据库进行增删改查?
- android 投影仪,不要购买投影仪, 安卓手机投屏很简单, 每个手机都可以
- python matplotlib绘图 axes和pyplot用法的区别是什么?子图subplot
- 前端可视化编程:liveReload安装,sublime 3
- 磁盘配额 挂载 和yum源的配置
- android 中空饼图控件,android饼状图内是空心的怎么做
- python作业代码没有缩进严重吗_Python代码需要缩进吗
- matlab 中 diff 函数 cumsum 函数 logical 函数 tabulate 函数 使用方法
- “中国十大名校”之争!
- 选择易优cms建站的十大理由
- SQLmap简单的使用——新手教程解析
- stack.peek
- HP3777打印机一行清晰一行不清晰
- Pycharm导入同级目录模块解决办法汇总
- 数据结构、数据、数据元素、数据项的区别
- 解锁工具Unlocker试用
- Genymotion - 强大好用高性能的 Android 模拟器 (在电脑流畅运行APK安卓软件游戏的利器)
- MFC打印及打印预览
- 大学计算机第七版读书笔记(第一章)
- python识别发票二维码_Python 实现二维码生成和识别
热门文章
- 使用Vim+Ctags+Cscope阅读源代码
- Hibernate 连接池的三种配置方式
- 腐蚀单机怎么进_华强北淘来的iPhone6S,进水后严重腐蚀,小伙飞线拯救又赚到了!...
- java 的继承_关于java中的继承
- franze kafka 游戏_The Franz Kafka Videogame
- java数组缓冲,java – 字节数组缓冲图像转换速度慢
- 炫界 (587) -(牛一邓丽君音)_50音起源 for mac(日语五十音学习软件)
- python资本市场财务数据分析_Python对股票财务数据进行可视化分析
- 计算机文化基础4作业,计算机文化基础试题4
- php无法加载dll插件,php无法加载动态库怎么办