UART实验报告
ARM实验报告——UART0通信、I2C主机读写CAT1025和SPI接口

实验题目:UART0通信、I2C主机读写CAT1025和SPI接口一、实验目的1,学习使用UART0通信、I2C主机读写CAT1025和SPI接口控制。
2,熟悉LPC2138开发板的使用。
3,锻炼学生自己的设计、创造和综合能力。
二、实验仪器微型计算机(含软件H-JTAG V0.3.1和ADSv1_2)、Easy ARM2131开发板、USB接口电源线和JTAG接口线以及部分跳线。
三、实验原理(1)UART0特性:管脚描述:(2)I2CLPC2138具有标准的硬件I2C接口,可配置为主机或从机,总线时钟速率可调整,最高可支持400K 总线速率。
使用I2C总线时,相应引脚设置连接I2C总线,并且总线上要接两个上拉电阻,阻值1-10K欧。
相关寄存器功能框图如图4.40所示:(3)SPI主机实验——7段数码管显示实验使用LPC2138的SPI接口作为主机向74HC595发送数据,数据内容由7段数码管显示。
实验电路图如图2.四、实验内容实验使用主硬件I2C软件包,从上位机向UART0发送数据,将接收到的数据通过I2C往CAT1025内部写入数据,然后读出校验,如果正确则使用SPI驱动数码管显示所写数据。
实验程序如下:#include "config.h"#define CAT1025 0xA0 /* CAT1025器件从地址*/#define HC595_CS (1 << 29) // P0.29口为74HC595的片#define UART_BPS 115200 // 串口通讯波特率uint8 n,rcv_data;const uint32 LED1 = (1 << 18); // P1.18控制LED1,低电平点亮const uint32 KEY1 = 1 << 16; // P0.16连接KEY1/* 此表为LED0~F以及L、P的字模*/uint8 const DISP_TAB[16] = {// 0 1 2 3 4 5 6 7 8 90xC0, 0xF9, 0xA4, 0xB0, 0x99 ,0x92, 0x82, 0xF8, 0x80,0x90};******************************************************************************************** 函数名称:DelayNS()** 函数功能:长软件延时** 入口参数:dly 延时参数,值越大,延时越久******************************************************************************************void DelayNS (uint32 dly){uint32 i;for ( ; dly>0; dly--)for (i=0; i<50000; i++);}/******************************************************************************************* 函数名称:MSPI_Init()** 函数功能:初始化SPI接口,设置为主机。
USART通信接口设计实验

UART_Data = 0; } } }
四、实验现象和结果
1、把串口线和 PC 机连接起来,运行程序后,通过串口调试软件发送 ASCII 码字符(需 要以回车键结尾)到单片机实验板,单片机实验板接收到从串口调试软件发送过来的 ASCII
实验四 UART 通信接口设计实验
一、实验目的
1、理解用异步串行通信进行 RS232 通信的原理并能掌握其方法及编程;
2、学习使用定时器 T1 做波特率发生器,掌握计算波特率的方法。
二、实验仪器
1、自制的 C8051f410 实验开发板 1 块
2、直流稳压电源、示波器
各1台
3、仿真器(U-EC6)
1只
码字符后,又将同样的字符回送给串口调试软件,这样串口调试软件可以看到返回同样的字
符,如果收发的字符相同,则说明 PC 机与单片机实验板之间的通信成功,如下图所示。
注: 串口通信波特率、位数据位、停止位、校验等参数设置值参考上图。
五、预习要求
1、读懂程序; 2、预先给出修改代码,以便更快更好的得出实验结果;
4、PC 机
1台
三、实验内容
实验任务:编写程序将单片机的 P0.4、P0.5 口配置为串口 0 通信口,将 PC 机发送给
c8051f410 的数据原样发回 PC 机,程序中用“0x0d”作为帧尾标志。
PC 端发送、接收可采用串口接收软件“串口调试助手 V2.1”。
在程序中通过交叉开关配置 TX0,RX0 分别到 P0.4、P0.5 引脚,由于 I/O 口是 TTL 电 平信号,需要通过 MAX232 转换为 RS-232 电平后才能与 PC 机连接,连接电路如上图所示。
串口通信实验报告

试验三双机通讯试验【1 】一、试验目标UART 串行通讯接口技巧运用二、试验实现的功效用两片焦点板之间实现串行通讯,将按键信息互发到对方数码管显示.三、体系硬件设计(1)单片机的最小体系部分(2)电源部分(3)人机界面部分数码管部分按键部分(4)串口通讯部分四、体系软件设计#include <STC.H>#define uchar unsigned char#define uint unsigned intvoid send();uchar code0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9的数码管显示sbit H1=P3^6;sbit H2=P3^7;sbit L1=P0^5;sbit L2=P0^6;sbit L3=P0^7;uint m=0,i=0,j;uchar temp,prt;/***y延时函数***/void delay(uint k){uint i,j; //界说局部变量ijfor(i=0;i<k;i++) //外层轮回{for(j=0;j<121;j++); //内层轮回}}/***键盘扫描***/char scan_key(){ H1=0;H2=0;L1=1;L2=1;L3=1;if(L1==0){ delay(5);if (L1==0){ L1=0;H1=1;H2=1;if(H1==0){ m=1; //KEY1键按下return(m);}if(H2==0){ m=4; //KEY4键按下return(m);}}}if(L2==0){ delay(5);if (L2==0){ L2=0;H1=1;H2=1;if(H1==0){ m=2; //KEY2键按下return(m);}if(H2==0){ m=5; //KEY5键按下return(m);}}}if(L3==0){ delay(5);if (L3==0){ L3=0;H1=1;H2=1;if(H1==0){ m=3; //KEY3键按下return(m);}if(H2==0){ m=6; // KEY6键按下return(m);}}}return(0);}/***主函数***/main(){P1M1=0x00;P1M0=0xff;SCON=0x50;//设定串行口工作方法1TMOD=0x20;//准时器1,主动重载,产生数据传输速度 TH1=0xfd;//数据传输率为9600TR1=1;//启动准时器1P0&=0xf0;while(1){if(scan_key()) //假如有按键按下{SBUF=scan_key(); //发送数据while(!TI); // 等待数据传送TI=0; // 消除数据传送标记}if(RI) //是否稀有据到来{RI=0; // 消除数据传送标记temp=SBUF; // 将吸收到的数据暂消失temp中}P1=code0[temp]; // 数据传送到P1口输出delay(500); //延时500ms}}五、试验中碰到的问题及解决办法(1)串行口和准时器的工作方法设定是症结,本次是按需传输的是两位十六进制数,串行口为工作方法1,准时器为8位主动重载;(2)采取P0&=0xf0语句使4个数码管静态点亮;(3)在发送和接收进程中,用标识位TI和RI来检测发送和接收是否完成;(4)在用电脑和单片机进行串口通讯测试时,电脑的传世速度必定要和单片机的传输速度相等,不然显示会消失错误.指点先生签字:日期:。
uart实验报告

uart实验报告
《UART实验报告》
实验目的:通过实验学习串行通信的基本原理,掌握UART通信协议的工作原理和使用方法。
实验设备:单片机开发板、串口调试助手、电脑。
实验原理:UART(Universal Asynchronous Receiver/Transmitter)是一种通用的异步串行通信协议,用于在计算机和外部设备之间进行数据传输。
UART通信协议包括数据位、停止位、奇偶校验位等参数,通过这些参数的设置可以实现不同的通信速率和数据传输方式。
实验步骤:
1. 连接单片机开发板和电脑,打开串口调试助手。
2. 在单片机开发板上编写UART通信程序,设置通信参数。
3. 将单片机开发板通过串口连接到电脑,打开串口调试助手。
4. 在串口调试助手上发送数据,观察单片机开发板接收到的数据。
5. 在单片机开发板上发送数据,观察串口调试助手接收到的数据。
实验结果:
经过实验,我们成功地实现了通过UART通信协议在单片机开发板和电脑之间进行数据传输。
在串口调试助手上发送的数据能够被单片机开发板正确接收,并且在单片机开发板上发送的数据也能够被串口调试助手正确接收。
通过调整通信参数,我们还验证了不同通信速率和数据传输方式对通信效果的影响。
实验总结:
通过本次实验,我们深入了解了UART通信协议的工作原理和使用方法,掌握
了串行通信的基本原理。
在今后的学习和工作中,我们将能够更加熟练地应用UART通信协议进行数据传输,为实际工程应用打下了坚实的基础。
ARM UART实验报告

题目:UART串行数据通信实验一. 实验目的通过实验,掌握UART查询1方式程序的设计二. 实验设备●硬件:PC 机一台●LPC2131教学实验开发平台一套●软件:Windows98/XP/2000 系统,ADS 1.2 集成开发环境。
●EasyARM工具软件。
三.实验内容通过串口0接收上位机发送的字符串,如“Hello EasyARM2131!”,然后返回上位机显示四.实验步骤启动ADS 1.2,使用ARM Executable Image for lpc2131工程模板建立一个工程DataRet_C。
②在user 组中的main.c 中编写主程序代码,在项目中的config.h 文件中加入#include <stdio.h>。
③选用DebugInRam生成目标,然后编译连接工程。
④将EasyARM2131开发板上的JP6跳线分别选择TxD0和RxD0端时,方可进行UART0通信实验。
⑤使用串口延长线把LPC2131教学实验开发平台的CZ2(UART0)与PC机的COM1 连接。
PC 机运行EasyARM 软件,设置串口为COM1,波特率为115200,然后选择【设置】->【发送数据】,在弹出的发送数据窗口中点击“高级”即可打开接收窗口。
⑥选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。
⑦全速运行程序,在PC 机上的EasyARM软件发送如“Hello EasyARM2131!”字样的字符串,EasyARM2131开发板接收到数据后,并将接收到的数据回发给PC机五.程序#include “config.h”#define UART_BPS 115200 //串口通信波特率/***************************************************************************** 名称:DelayNS()* 功能:长软件延时* 入口参数:dly 延时参数,值越大,延时越久* 出口参数:无****************************************************************************/void DelayNS(uint32 dly){uint32 i;for(; dly>0; dly--)for(i=0; i<5000; i++);}/***********************************************************************************函数名称:UART0_Init()**函数功能:串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为115200**入口参数:无**出口参数:无*********************************************************************************/void UART0_Init(void){uint16 Fdiv;U0LCR = 0x83; //DLAB = 1,允许设置波特率Fdiv = ( Fpclk / 16 ) / UART_BPS; //设置波特率U0DLM = Fdiv / 256;U0DLL = Fdiv % 256;U0LCR = 0x03;}/********************************************************************************* **函数名称:UART0_GetByte()**函数功能:从串口接收1字节数据,使用查询方式接收**入口参数:无**出口参数:接收到的数据**********************************************************************/uint8 UART0_GetByte(void){uint8 rcv_dat;while((U0LSR % 0x01) == 0); //等待接收标志置位rcv_dat = U0RBR;return (rcv_dat);}/********************************************************************************* **函数名称:UART0_GetStr()**函数功能:从串口接收**入口参数:s 指向接收数据数组的指针n 接收的个数**出口参数:无**********************************************************************/void UART0_GetStr(uint8 *s, uint32 n){for( ; n > 0; n-- )*s++ = UART0_GetByte();}/********************************************************************************* **函数名称:UART0_SendByte()**函数功能:向串口发送字节数据**入口参数:dat 要发送的数据**出口参数:无**********************************************************************/void UART0_SendByte(uint8 dat){U0THR = dat; //写入数据while((U0LSR & 0x40 ) == 0); //等待数据发送完毕}/********************************************************************************* **函数名称:UART0_SendStr()**函数功能:向串口发送一字符串**入口参数:str 要发送的字符串的指针**出口参数:无**********************************************************************/void UART0_SendStr(uint8 const *str){while(1){if( *str == …\0‟ )break; //遇到结束符,退出UART0_SendByte(*str++); //发送数据}}/***************************************************************************** 名称:main()* 功能:从串口UART0接收字符串“Hello EasyARM2131!”,并发送回上位机显示* 说明:需要PC串口显示终端软件,如EasyARM.exe。
实验5 UART的使用

实验五UART的使用一、实验目的1.了解并掌握控制器的UART特性和用途2.掌握控制器UART的使用方法。
3.掌握程序系统调试的方法。
二、实验设备(1)PC机一台ARM-CORTEX-M3教学实验开发平台一套(2)Windows xp 系统和编译软件KEIL三、实验内容1.以中断的方式实现UART和PC串行通信四、实验步骤1.软件安装(1)安装嵌入式软件目录里的winrar340.exe(2) 解压缩文件:mdk3.50绿色版.rar到当前文件夹下,并复制到C盘,覆盖C盘原来的KEIL文件夹。
(3)解压缩嵌入式软件目录里的Setup_JLinkARM_V406b.zip,并安装。
(4)打开C:\Keil\UV3\Uv3.exe(建议创建Uv3.exe快捷方式到桌面)(5)注册KEIL软件(已在课堂上详细讲解)2.硬件连线说明:(1) 实验前,先把所有拨码开关置为off,之后把本次实验用到的拨码开关置为on;(2) 实验结束后,把所有拨码开关置为off;(3) 本次实验的所使用实验板上的硬件资源如下图中黄色圆圈所示,短接相应跳线、把相应拨码开关拨到on的位置。
注意:J4和J5的跳线帽横着连接。
(4) 连接JLINK的排线到电路板(5) 使用USB线连接电路板到计算机的USB口,给电路板供电,同时把J11的V_USB侧使用跳线帽短接;连接JLINK的USB线到计算机的USB口。
3. UART和PC串行通信(1) 打开C:\Keil\UV3\Uv3.exe(2) 在UV3界面下,使用打开project的方式,打开文件:实验5\ UART和PC串行通信\ wireless_slave.Uv2(3)重新编译,下载运行程序,打开嵌入式软件目录里的文件UartAssist.exe(4)在发送栏里,填写要发送的信息,以叹号:!作为一包数据的结束,观察接收数据栏内收到的数据(注意十六进制显示和ASC码显示是不一样的)。
嵌入式系统实验—通用异步收发器(UART)实验

嵌⼊式系统实验—通⽤异步收发器(UART)实验实验五:通⽤异步收发器(UART)实验Technorati 标签: 嵌⼊式系统实验,通⽤异步收发器,UART,mini2440,arm,j-link,keil-uvision,实验报告⼀、实验⽬的1、掌握 UART 外设的操作原理和编程。
2、学习使⽤ UART 进⾏多机通讯。
⼆、实验设备1、硬件:PC 机⼀台、Mini2440 ARM 实验板⼀套 J-link 仿真器⼀套2、软件:WindowsXP 系统,Keil uVision 4.0 集成开发环境三、实验内容(1)使⽤ C 语⾔编写 UART 基本收发数据程序,进⾏ 2 个实验板之间的数据收发测试。
(2)⽤两个实验板模拟嵌⼊式控制系统中的数据采集/控制实验,其中⼀个实验板模拟数据采集模块,将通过UART 返回数据;另⼀块实验板模拟控制系统的主机,通过 UART 采集数据,并通过 UART 发出控制指令。
四、实验预习要求(1)学习 UART 相关的原理概念;(2)查阅 S3C2440 芯⽚⼿册,了解 UART0 结构和原理。
五、实验步骤(1)启动 Keil uVision,新建⼀个⼯程ex05。
不需要系统提供的 Startup ⽂件。
建⽴汇编源⽂件 ex05.s,编写实验程序,然后添加到⼯程中。
设置⼯程选项,存储器映射。
设置⼯程调试选项。
建⽴仿真初始化⽂件 RAM.ini。
(2)建⽴ C 语⾔源⽂件 main.c,编写实验程序,然后添加到⼯程中。
(3)使⽤交叉串⼝电缆连接两个实验板。
(4)编译程序,使⽤仿真器在⽬标板上调试运⾏程序,使⽤单步、设置断点,观察程序执⾏时,收发数据的值。
六、实验程序C 语⾔实验程序见程序清单 5。
程序清单 4.1 UART 实验程序// Uart0#define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)#define RdURXH0() (*(volatile unsigned char *)0x50000024)#define rULCON0 (*(volatile unsigned *)0x50000000) //UART 0 Line control#define rUCON0 (*(volatile unsigned *)0x50000004) //UART 0 Control#define rUFCON0 (*(volatile unsigned *)0x50000008) //UART 0 FIFO control#define rUMCON0 (*(volatile unsigned *)0x5000000c) //UART 0 Modem control#define rUTRSTAT0 (*(volatile unsigned *)0x50000010) //UART 0 Tx/Rx status#define rUERSTAT0 (*(volatile unsigned *)0x50000014) //UART 0 Rx error status#define rUFSTAT0 (*(volatile unsigned *)0x50000018) //UART 0 FIFO status#define rUMSTAT0 (*(volatile unsigned *)0x5000001c) //UART 0 Modem status#define rUBRDIV0 (*(volatile unsigned *)0x50000028) //UART 0 Baud rate divisor#define rGPHCON (*(volatile unsigned *)0x56000070) //Port H control#define rGPHUP (*(volatile unsigned *)0x56000078) //Pull-up control H//PCLK:12MHz#define PCLK 12000000//( (int)(pclk/16./baud+0.5) -1 )#define baud_value 12 //57600void Uart_Init(){int i;rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disablerUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disablerULCON0 = 0x3; //Line control register : Normal,No parity,1 stop,8 bits// [10] [9] [8] [7] [6] [5] [4] [3:2] [1:0]// Clock Sel, Tx Int, Rx Int, Rx Time Out, Rx err, Loop-back, Send break, TransmitMode, Receive Mode// 0 1 0 , 0 1 0 0 ,01 01// PCLK Level Pulse Disable Generate Normal NormalInterrupt or PollingrUCON0 = 0x245; // Control registerrUBRDIV0= baud_value; //Baud rate divisior register 0for(i=0;i<100;i++);rGPHCON |= 0xaa;//use GPH port as uart0rGPHUP =0x0f;//the pull up function is disabled}void Uart_SendByte(int data){WrUTXH0(data);char Uart_Getch(void){while(!(rUTRSTAT0 & 0x1)) //Receive data readyreturn RdURXH0();}main(){char c = 'a';Uart_Init();Uart_SendByte(c);while(1){c = Uart_Getch();c++;Uart_SendByte(c);}七、实验现象两块实验板在接收指令处设断点,然后实验板1全速运⾏,实验板2接着全速运⾏,实验板1⾃动暂停。
UART通信实验

计算机与外部设备之间的通信一般采用两种方式:并行方式和串行方式。
所谓的并行方式就是各个位同时进行传输的通信方式,这种方式通信主要特点是通信的速度快,但当距离远且位数多的时候并行通信的成本就会高很多。
串行通信分为异步与同步串行通信。
UART(通用异步收发器)就是所谓的异步串行通信协议。
只要通信的双方采用相同的数据帧格式(数据位,开始位,校验位,停止位)和波特率就能在未共享同步时钟信号的情况下通过两根据数据线(RX和TX)进行数据通信。
采用这种方式,当数据传输结束后可以通过置位中断位通知处理器进行相应的处理。
STELLARIS系列ARM芯片的UART具有完全可编程,16C550型串口接口的特性(但并不兼容)。
独立发送FIFO(16B)和接收的FIFO(16B)(first in first out),可以将两个FIFO配置成不同程序的触发中断,可供选择的触发深底见下图中。
如:接收FIFO配置成1/4触发深度,则当UART收到4个数据时,产生接收中断。
UART模块的特性如下:下面是PC机的COM接口与ARM芯片的UART接口的典型电路。
注意:图中的电阻不能省略,否则会影响数据的传输。
U1是Exar(原sipex)公司出产的UART 转RS232C的接口芯片SP3232E。
可在3.3V下工作。
UART的功能概述:发送:发送逻辑从发送FIFO读取的数据执行并->串转换。
控制逻辑执行输出起始位在前的串行流,根据控制寄存器中已编程的配置,后面紧跟数据位(注:LSB最低位先输出),奇偶校验位,停止位。
接收:在检测到一个有效的起始脉冲时,接收逻辑对收到以的位流执行串->并转换,此外还会对溢出错误,奇偶校验错误,帧错误和线中止(line-break)错误进行检测。
并将检测到的状态一起写入到接收FIFO中。
波特率的产生:baud-rate divisor(波特率除数)是一个22位数,16位整数和6位小数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四 uart串口通信学院:研究生院学号:1400030034 姓名:张秋明一、实验目的及要求设计一个uart串口通信协议,实现“串<-->并”转换功能的电路,也就是“通用异步收发器”。
二、实验原理uart是一种通用串行数据总线,用于异步通信。
该总线双向通信,可以实现全双工传输和接收。
在嵌入式设计中,uart用来主机与辅助设备通信,如汽车音响与外接ap之间的通信,与pc机通信包括与监控调试器和其它器件,如eeprom通信。
uart作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。
其中各位的意义如下:起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。
资料位:紧接着起始位之后。
资料位的个数可以是4、5、6、7、8等,构成一个字符。
通常采用ascii码。
从最低位开始传送,靠时钟定位。
奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。
停止位:它是一个字符数据的结束标志。
可以是1位、1.5位、2位的高电平。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。
因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
波特率:是衡量资料传送速率的指标。
表示每秒钟传送的符号数(symbol)。
一个符号代表的信息量(比特数)与符号的阶数有关。
例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。
这两者的概念很容易搞错。
三、实现程序library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity uart isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --rs232接收数据信号; rs232_tx:out std_logic --rs232发送数据信号;); end uart; architecture behav of uart is rs232_rx: in std_logic; --rs232接收数据信号 clk_bps: instd_logic; --此时clk_bps的高电平为接收数据的采样点bps_start:out std_logic; --接收到数据后,波特率时钟启动置位rx_data: out std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: out std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送);bps_start:in std_logic --接收数据后,波特率时钟启动信号置位);bps_start:out std_logic; --接收到数据后,波特率时钟启动置位rx_data: in std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: in std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去); signal bps_start_1:std_logic; signal bps_start_2:std_logic; signal clk_bps_1:std_logic; signal clk_bps_2:std_logic; signal rx_data:std_logic_vector(7 downto 0); signal rx_int:std_logic; beginrx_top: uart_rx port map(clk=>clk, rst_n=>rst_n,rs232_rx=>rs232_rx,clk_bps=>clk_bps_1,bps_start=>bps_start_1, rx_data=>rx_data,rx_int=>rx_int); speed_top_rx: speed_select port map(clk=>clk, rst_n=>rst_n,clk_bps=>clk_bps_1,bps_start=>bps_start_1); tx_top:uart_tx port map(clk=>clk, --系统时钟rst_n=>rst_n, --复位信号 rs232_tx=>rs232_tx,--rs232发送数据信号 clk_bps=>clk_bps_2, --此时clk_bps的高电平为发送数据的采样点bps_start=>bps_start_2, --接收到数据后,波特率时钟启动置位rx_data=>rx_data, --接收数据寄存器,保存直至下一个数据来到rx_int=>rx_int --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去);speed_top_tx: speed_select port map(clk=>clk, rst_n=>rst_n,clk_bps=>clk_bps_2,bps_start=>bps_start_2); end behav;-----------------------------------------------------------------------------------------------------------------------3个子模块--------------------------------------------- ---------------------------------异步接收模块------------------------------------------- library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity uart_rx isport(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号rs232_rx: in std_logic; --rs232接收数据信号 clk_bps:in std_logic; --此时clk_bps的高电平为接收数据的采样点bps_start:out std_logic; --接收到数据后,波特率时钟启动置位rx_data: out std_logic_vector(7 downto 0); --接收数据寄存器,保存直至下一个数据来到rx_int: out std_logic --接收数据中断信号,接收数据期间时钟为高电平,传送给串口发送模块,使得串口正在进行接收数据的时候,发送模块不工作,避免了一个完整的数据(1位起始位、8位数据位、1位停止位)还没有接收完全时,发送模块就已经将不正确的数据传输出去); end uart_rx; architecture behav of uart_rx is signal rs232_rx0: std_logic; signal rs232_rx1: std_logic; signal rs232_rx2: std_logic; signal rs232_rx3: std_logic; signal neg_rs232_rx:std_logic; signal bps_start_r:std_logic; signal num:integer;signal rx_data_r:std_logic_vector(7 downto 0); --串口接收数据寄存器,保存直至下一个数据到来begin process(clk,rst_n)beginif (rst_n=0)thenrs232_rx0<=0;rs232_rx1<=0;rs232_rx2<=0;rs232_rx3<=0;elseif (rising_edge(clk)) then rs232_rx0<=rs232_rx; rs232_rx1<=rs232_rx0;rs232_rx2<=rs232_rx1;rs232_rx3<=rs232_rx2;end if;end if;neg_rs232_rx <=rs232_rx3 and rs232_rx2 and not(rs232_rx1)and not(rs232_rx0); end process; process(clk,rst_n)beginif (rst_n=0)thenbps_start_r<=0;rx_int<=0;elseif (rising_edge(clk)) then if(neg_rs232_rx=1) then --接收到串口数据线rs232_rx的下降沿标志信号bps_start_r<=1; --启动串口准备数据接收rx_int<=1; --接收数据中断信号使能else if((num= 15) and (clk_bps=1)) then --接收完有用数据信息bps_start_r<=0; --数据接收完毕,释放波特率启动信号rx_int<=0; --接收数据中断信号关闭end if;end if;end if;end if;bps_start<=bps_start_r; end process; process(clk,rst_n)beginif (rst_n=0)thenrx_data_r<=00000000;rx_data<=00000000;num<=0;elseif (rising_edge(clk)) then if(clk_bps=1)thennum<=num+1;case num is篇二:arm uart实验报告题目:一. 实验目的通过实验,掌握uart查询1方式程序的设计二. 实验设备硬件:pc 机一台lpc2131教学实验开发平台一套软件:windows98/xp/2000 系统,ads 1.2 集成开发环境。