RS-232串口通信设计_第1页
RS-232串口通信设计_第2页
RS-232串口通信设计_第3页
RS-232串口通信设计_第4页
RS-232串口通信设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CPLD FPGA 课程设计报告课程设计报告 题 目 RS 232 串口通信设计 院 系 信息科学与工程学院 专业班级 通信工程 11 学生姓名 詹文魁 学 号 指导教师 吴莉老师 2014 年 06 月 09 日至 2014 年 6 月 20 日 华中科技大学武昌分校制华中科技大学武昌分校制 RS 232 串口通信设计 课程设计任务课程设计任务 书书 一 设计 调查报告一 设计 调查报告 论文 题目论文 题目 RS 232 串口通信设计 二 设计 调查报告二 设计 调查报告 论文 主要内容论文 主要内容 下述设计内容需由学生个人独立完成 1 理解电路原理图与工作过程 2 掌握 RS 232 电气特性 3 掌握 RS 232 通信原理及串口通信数据格式 并编程完成串行数据的发送 接收和显示 4 能正确处理编程与调试过程中所遇到的问题 三 原始资料三 原始资料 1 通信与电子系统实验指导书 2 CPLD FPGA 实验箱 四 要求的设计 调查四 要求的设计 调查 论文 成果论文 成果 1 程序结构合理 语言简洁 格式规范 注释详细 2 掌握 RS 232 的工作机制与原理 3 格式为 1 位起始位 8 位数据位 1 位停止位 无奇偶校验位 波特率设定为 300Baud 能与计算机正常通信 4 按要求完成课程设计报告 格式符合学校规范标准 字数不少于 2000 字 五 进程安排五 进程安排 第 1 天 选题 课题讲解 第 2 3 天 课题分析 完成设计方案 第 4 6 天 软件编程 第 7 8 天 软件调试 故障排查 第 9 天 结果验收 评分 第 10 天 撰写课设报告 六 主要参考资料六 主要参考资料 1 陈曦 通信与电子系统实验指导书 武汉 华中科技大学武昌分校 2 谭会生 EDA 技术及应用 西安 西安电子科技大学出版社 2010 3 潘松 黄继业 EDA 技术与 VHDL 北京 清华大学出版社 2009 指导教师 签名 指导教师 签名 2020 年年 月月 日日 目 录 1 课程设计的目的 4 2 课程设计题目描述和要求 4 3 课程设计报告内容 4 3 1 课题设计方案及基本原理 4 3 2 软件设计 7 3 3 问题 14 4 总结 15 5 参考资料 16 附录 程序清单 17 1 课程设计的目的 1 学习RS 232 串口通信数据结构 并编程完成串行数据的接收和显示 2 掌握 RS 232 的工作机制与原理 3 熟练掌握 Quartus2 软件的使用 4 了解 CPLD FPGA 实验箱 2 课程设计题目描述和要求 1 课程设计题目 基于 FPGA 的串口通信程序设计 2 课程设计要求 下述设计内容需由学生个人独立完成 1 理解电路原理图与工作过程 2 掌握 RS 232 电气特性 3 掌握 RS 232 通信原理及串口通信数据格式 并编程完成串行数据的接收和 显示 4 能正确处理编程与调试过程中所遇到的问题 5 在 FPGA 中构造一个异步串行通信控制模块 完成 PC 机发送的接收 并设计 显示模块 完成接收数据的显示 3 要求的设计成果 1 程序结构合理 语言简洁 格式规范 注释详细 2 掌握 RS 232 的工作机制与原理 3 格式为 1 位起始位 8 位数据位 1 位停止位 无奇偶校验位 波特率设定 为 300Baud 能与计算机正常通信 4 按要求完成课程设计报告 格式符合学校规范标准 字数不少于 2000 字 3 课程设计报告内容 3 1 课程设计方案及基本原理 设计方案 利用实验箱上的 MAX232 芯片控制通过适当分频 分频的目的是为了达到要求的 波特率 控制数据传输速率 的串行输入信号 并将其转换为并行信号并通过实验箱 上的数码管的后两位显示从计算机中传输出来的 16 进制数 例如在计算机端输入 FF 则会在试验箱上看到 000000FF 的显示图示 基本原理 RS 323C 标准是美国 EIA 电子工业联合会 与 BELL 等公司一起开发的 1969 年公 布的通信协议 它适合于数据传输速率在 0 20000b s 范围内的通信 这个标准对串 行通信接口的有关问题 如信号线功能 电器特性都作了明确规定 EIA RS 232C 中 3V 15V 之间的电平为 0 3V 15V 的电平为 1 与 TTL 以 高低电平表示逻辑状态的规定不同 因此 为了能够同计算机接口或终端的 TTL 器件 连接 必须在 EIA RS 232C 与 TTL 电路之间进行电平和逻辑关系的变换 实现这种变 换的方法可用分立元件 也可用集成电路芯片 目前较为广泛地使用集成电路转换器 件 如 MC1488 SN75150 芯片可完成 TTL 电平到 EIA 电平的转换 而 MC1489 SN75154 可实现 EIA 电平到 TTL 电平的转换 MAX232 芯片可完成 TTL EIA 双向电平转换 1 串口通信 1 什么是串口通信 串口是计算机上一种非常通用设备通信的协议 大多数计算机包含两个基于 RS232 的串口 串口同时也是仪器仪表设备通用的通信协议 很多 GPIB 兼容的设备也 带 有 RS 232 口 同时 串口通信协议也可以用于获取远程采集设备的数据 串行 接口 Serial port 又称 串口 主要用于串行式逐位数据传输 常见的有一 般电脑应用的 RS 232 使用 25 针或 9 针连接器 和工业电脑应用的半双 RS 485 与全双工 RS 422 2 串口接口规格 串行接口按电气标准及协议来分 包括 RS 232 C RS 422 RS485 USB 等 RS 232 C RS 422 与 RS 485 标准只对接口的电气特性做出规定 不涉及接插件 电缆或协议 USB 是近几年发展起来的新型接口标准 主要应用于高速数据传输 领域 3 串口通信原理 串口通信的概念非常简单 串口按位 bit 发送和接收字节 尽管比按字节 byte 的并行通信慢 但是串口可以在使用一根线发送数据的同时用另一根线接收数据 它很简单并且能够实现远距离通信 比如 IEEE488 定义并行通行状态时 规定设 备线总长不得超过 20 米 并且任意两个设备间的长度不得超过 2 米 而对于串 口 而言 长度可达 1200 米 典型地 串口用于 ASCII 码字符的传输 通信使用 3 根 线完成 1 地线 2 发送 3 接收 由于串口通信是异步的 端口能够 在 一根线上发送数据同时在另一根线上接收数据 其他线用于握手 但是不是必须 的 2 RS232 芯片 1 电气特性 EIA RS 232C 对电器特性 逻辑电平和各种信号线功能都作了规定 在 TxD 和 RxD 上 逻辑 1 MARK 3V 15V 逻辑 0 SPACE 3 15V 在 RTS CTS DSR DTR 和 DCD 等控制线上 信号有效 接通 ON 状态 正电压 3V 15V 信号无效 断开 OFF 状态 负电压 3V 15 2 RS232 接口定义 3 RS232 总线电平转换 4 RS232 数据传输格式 串行通信中 线路空闲时 线路的 TTL 电平总是高 经反向 RS232 的电平总是低 一个数据的开始 RS232 线路为高电平 结束时 RS232 为低电平 数据总是从低位向高 位一位一位的传输 示波器读数时 左边是数据的低位 例如 对于 16 进制数据 55H 和 aaH 当采用 8 位数据位 1 位停位传输时位停止位传输时 55H 01010101B 高低 位倒序后为 10101010B 加入一个起始位 0 一个停止位 1 55H 的数据格式为 0101010101 aaH 10101010B 高低位倒序后为 01010101B 加入一个起始位 0 一个 停止位 1 aaH 的数据格式为 0010101011 5 RS232 通信过程 I 开始通信时 信号线为空闲 逻辑 当检测到由到的跳变时 开始对 接收 时钟 计数 II 当计到 8 个时钟时 对输入信号进行检测 若仍为低电平 则确认这是 起 始位 而不是干扰信号 III 接收端检测到起始位后 隔 16 个接收时钟 对输入信号检测一次 把对应的 值 作为 D0 位数据 若为逻辑 1 作为数据位 1 若为逻辑 0 作为数据位 0 IV 再隔 16 个接收时钟 对输入信号检测一次 把对应的值作为 D1 位数据 直到全部数据位都输入 V 检测校验位 P 如果有的话 VI 接收到规定的数据位个数和校验位后 通信接口电路希望收到停止位 S 逻辑 1 若此时未收到逻辑说明出现了错误在状态寄存器中置 帧错误 标志若没 若此时未收到逻辑 1 说明出现了错误 在状态寄存器中置 帧错误 标志 若 没有错误 对全部数据位进行奇偶校验 无校验错时 把数据位从移位寄存器 中送数据输入寄存器 若校验错 在状态寄存器中置奇偶错标志 VII 本幀信息全部接收完把线路上出现的高电平作为空闲位 VIII 当信号再次变为低时 开始进入下一帧的检测 3 2 软件设计 1 Quartus 顶层设计 如上图所示 整个顶层设计可以分为 4 个部分 1 锁相环 作用是将输入的系 统时钟信号 系统时钟 50MHZ 转换为 12MHZ 的 sysclk 时钟 在进入 RS232 前先进行第 一次分频弥补 RS232 自身分频不足的特点 2 核心模块 RS232 作用是将计算机输入 的串行数据转换为并行数据便于给后方的显示模块处理 3 分频模块 作用是给显 示模块提供所需的时钟 由于显示模块的本质是一个个显示 所以为了能同时显示故 将输入频率调至 1KHz 以上让人眼无法一个个识别形成同时显示的效果 4 显示模块 作用是将输入的并行信号 8 位 分成 4 位一组 即两组进行处理后在试验箱的数码管 上显示 1 1 模块一分析 从上图可以看出 1 inclk 50MHz 2 DC 50 3 Ratio 12 25 从而可以得出 outclk 50MHz 12 25 24MHz 再通过 D 触发器 2 分频后得到 12MHz 的输出系统时钟来 弥补 RS232 模块分频不足的缺点 1 2 模块二分析 上图所示的为 RS232 集成模块 经 VHDL 编译生成的模块文件 输入为 sysclk 12MHz rxd 计算机输入的串行数据串 disp 为 8 位的并行数据段 程序 1 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity rs232 is port sysclk in std logic rxd in std logic disp out std logic vector 7 downto 0 end rs232 分析 定义实体 输入信号 输入时钟信号为逻辑信号 输出信号 disp 为 8 位矢量信号 低位为 0 高位为 7 architecture behv of rs232 is signal b std logic vector 9 downto 0 signal r std logic vector 3 downto 0 signal j std logic vector 15 downto 0 signal frxd gt gtclr cclk gate std logic begin gate gt and cclk disp 7 downto 0 b 8 downto 1 将串行数据段的 1 8 位数据位从 b 中取出至于 disp 中 frxd not rxd 分析 定义机构体 先定义可信号 b r j 其中的 b 作为数据转移的临时载体 R j 分别作为后 续程序的计数单元 其中需要注意的是 j 的位数控制 因为当需要控制波特率的时候 由于 输入的 sysclk 是固定的 12MHz 的系统时钟信号无法改变 故能改变的只有 RS232 中的分频 系 数 但由于分频的系数的改变 于是 j 作为计数信号其值也将随之改变 s1 process sysclk gt begin if gt 0 then j 0 elsif sysclk event and sysclk 1 then if j 1001110001000000 then j 0 else j j 1 end if end if end process 分析 s1 的段码作用是用来计数 所记数为 RS232 的分频系数 上述代码中的 10011100010 为 40000 通过计算 12M 1250 9600 故可以得知波特率为 9600b s 通过改变 j 的值可以很方便的来设 置所需要的波特率 s2 process j begin if j 111001 then cclk 1 else cclk 0 end if end process 分析 s2 的段码作用是当 j 计数到一定数值的时候产生一个脉冲 从而实现分频的作用 其中 j 值 的设定关系到分频的占空比 只需要 j 的值在分频系数之内即可产生分频的效果 s3 process gate gtclr begin if gtclr 1 then r 0000 elsif gate event and gate 1 then r r 1 end if end process s4 process gate r begin if r 1010 then gtclr not gate else gtclr 0 end if end process 分析 s3 s4 段码的作用是计数从 0 10 即计数输入数据段的 10 位 0 起始位 1 8 数据位 9 终止位 s5 process gate rxd b begin if gate event and gate 1 then b 9 downto 0 rxd 将 b 的后 9 位并上 rxd 的第一位组合成新的信号 b end if end process 分析 s5 段码的作用是 将 rxd 的输入信号通过移位寄存的方法将 RXD 中的数据一一取出移动到 信 号 b 中 然后再通过的 b 的移位从而将 rxd 中的数据段完整的转移到信号 b 中保存 s6 process frxd gtclr begin if gtclr 1 then gt 0 elsif frxd event and frxd 1 then gt 1 end if end process end behv 分析 s6 的段码的作用是用于判断起始位 gt 做为标志位 当已经确定为开始时 将 gt 的值置 1 1 3 模块三分析 分析 从上图可以看出其作用是作为分频 将 50MHz 的输入信号先通过 PIN1MHZ 模块将 50MHZ 分为 1Mhz 再将 1MHZ 的信号输入到下一个分频信号中分为频率为 1HZ 488HZ 1953HZ 7812HZ 31250HZ 125kHZ 500kHZ 的信号 程序 1 PIN1hz LIBRARY IEEE USE IEEE STD LOGIC 1164 ALL USE IEEE STD LOGIC UNSIGNED ALL ENTITY PIN1MHZ IS PORT CLKIN IN STD LOGIC CLKOUT OUT STD LOGIC END PIN1MHZ ARCHITECTURE A OF PIN1MHZ IS BEGIN PROCESS CLKIN VARIABLE CNTTEMP INTEGER RANGE 0 TO 49 BEGIN IF CLKIN 1 AND CLKIN EVENT THEN IF CNTTEMP 49 THEN CNTTEMP 0 ELSE IF CNTTEMP 25 THEN CLKOUT 1 ELSE CLKOUT 0 END IF CNTTEMP CNTTEMP 1 END IF END IF END PROCESS END A 分析 上述程序段中可以知道 使用变量 VARIABLE 做为计数 从 0 49 刚好为 50 个数 当小于 25 的时候赋值为 1 其余为 0 使得将 50MHZ 处理为 1MHZ 当取值大于 或 等于 50 时复位为 0 从而达到分频的目的 程序 2 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity cnt is port clk in std logic freq1 out std logic freq488 out std logic freq1953 out std logic freq7812 out std logic freq31250 out std logic freq125k out std logic freq500k out std logic end cnt architecture behv of cnt is signal temp std logic vector 19 downto 0 begin process clk begin if clk event and clk 1 then if temp 11110100001000111111 then temp 00000000000000000000 else temp temp 1 end if end if end process freq1 temp 19 freq488 temp 10 freq1953 temp 8 freq7812 temp 6 freq31250 temp 4 freq125k temp 2 freq500k temp 0 end behv 分析 程序 2 的设计思路同样是使用计数 但和程序 1 的计数不完全相同 数由 16 进 制表示 4 为 2 进制组成 1 位 16 进制 所以从第 0 位开始可以计数 2 位 第一 位 可以计数 4 位 第二位可以计数 8 位 依次可以得出计数量为 2 的 n 1 次方个 数 从而达到同时计数多个的目的从而产生多个时钟信号 1 4 模块四分析 分析 显示模块由两部分组成 74138 的表面作用是译码将输入的 sel 信号翻译出来并选中制定的 数 码管 其实质作用是由输入的信号 0 7 计数为 8 的计数信号输入 来控制数码管的片选 而 display 的作用是来实现片选 将 RS232 输出的并行信号的两部分 每部分 4 位组成一个 16 进制数 进行处理来实现段选 分析 上图为 display 模块的细节图 rxd 中的信号分为两组输入 分别进入 muxer 的第 0 组和第 1 组 其余的组全部拉低 达到出去最低两位显示 其余为显示全 0 的目的 cnt8 为 0 7 的计 数 作用是控制 muxer 进入 led 程序的顺序 而 led 是为了实现段选 点亮数码管的特定位 来 显示输入数值 程序 1 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity cnt8 is port clk in std logic q out std logic vector 2 downto 0 end cnt8 architecture behv of cnt8 is signal temp std logic vector 2 downto 0 begin process clk begin if clk event and clk 1 then if temp 111 then temp 000 else temp temp 1 end if end if end process qdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdout 0000000 end case end process end behv 分析 程序 led 是完成段显 将输入的数值 0 15 翻译成对应的数码管编码 1 5 接收模块 分析 程序 rsSedn 作为接受模块 用于将 232 中发送的数据再次回写到到串口助手的 接收端内 要是程序完全正常的话发送什么就会在接收窗口接收到什么 3 3 问题 如何真正的实现发送和接受同步 并且发送的和接收的完全一样 发送和接收波特率 怎么弄 答 接收和显示的已经做出来了 但是发送的 4 总结 参考文献参考文献 1 通信与电子系统实验指导书 武汉 华中科技大学武昌分校 2 潘松 EDA 技术与 VHDL 北京 清华大学出版社 2009 3 朱运利 EDA 技术应用 第二版 北京 电子工业出版社 2007 4 王行 EDA 技术入门与提高 西安 西安电子科技大学出版社 2009 5 李莉 电子设计自动化 EDA 北京 中国电力出版社 2009 附录 程序清单 程序 1 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity rs232 is port sysclk in std logic rxd in std logic disp out std logic vector 7 downto 0 end rs232 architecture behv of rs232 is signal b std logic vector 9 downto 0 signal r std logic vector 3 downto 0 signal j std logic vector 15 downto 0 signal frxd gt gtclr cclk gate std logic begin gate gt and cclk disp 7 downto 0 b 8 downto 1 frxd not rxd s1 process sysclk gt begin if gt 0 then j 0 elsif sysclk event and sysclk 1 then if j 1001110001000000 then j 0 else j j 1 end if end if end process s2 process j begin if j 111001 then cclk 1 else cclk 0 end if end process s3 process gate gtclr begin if gtclr 1 then r 0000 elsif gate event and gate 1 then r r 1 end if end process s4 process gate r begin if r 1010 then gtclr not gate else gtclr 0 end if end process s5 process gate rxd b begin if gate event and gate 1 then b 9 downto 0 rxd end if end process s6 process frxd gtclr begin if gtclr 1 then gt 0 elsif frxd event and frxd 1 then gt 1 end if end process end behv 程序 2 LIBRARY IEEE USE IEEE STD LOGIC 1164 ALL USE IEEE STD LOGIC UNSIGNED ALL ENTITY PIN1MHZ IS PORT CLKIN IN STD LOGIC CLKOUT OUT STD LOGIC END PIN1MHZ ARCHITECTURE A OF PIN1MHZ IS BEGIN PROCESS CLKIN VARIABLE CNTTEMP INTEGER RANGE 0 TO 49 BEGIN IF CLKIN 1 AND CLKIN EVENT THEN IF CNTTEMP 49 THEN CNTTEMP 0 ELSE IF CNTTEMP 25 THEN CLKOUT 1 ELSE CLKOUT 0 END IF CNTTEMP CNTTEMP 1 END IF END IF END PROCESS END A 程序 3 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity cnt is port clk in std logic freq1 out std logic freq488 out std logic freq1953 out std logic freq7812 out std logic freq31250 out std logic freq125k out std logic freq500k out std logic end cnt architecture behv of cnt is signal temp std logic vector 19 downto 0 begin process clk begin if clk event and clk 1 then if temp 11110100001000111111 then temp 00000000000000000000 else temp temp 1 end if end if end process freq1 temp 19 freq488 temp 10 freq1953 temp 8 freq7812 temp 6 freq31250 temp 4 freq125k temp 2 freq500kdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdout 0000000 end case end process end behv 程序 5 library ieee use ieee std logic 1164 all use ieee std logic unsigned all entity cnt8 is port clk in std logic q out std logic vector 2 downto 0 end cnt8 architecture behv of cnt8 is signal temp std logic vector 2 downto 0 begin process clk begin if clk event and clk 1 then if temp 111

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论