UART实验程序解析

合集下载

UART0中断通信解析

UART0中断通信解析

程序清单 4.29 UART 中断方式通信实验程序# include "config.h"# define UART_BPS 115200 /* 串口通信波特率 */volatile uint8 uiGRcvNew; /* 串口接收新数据的标志 */uint8 uiGRcvBuf[30] = {0}; /* 串口接收数据缓冲区 */uint32 uiGNum; /* 串口接收数据的个数 *//******************************************************************* **************************函数名称:DelayNS ** 函数功能:延时函数** 输入参数:uiDly 值越大,延时时间越长 ** 输出参数:无******************************************************************** ***********************/void DelayNS (uint32 uiDly{ uint32 i;for (; uiDly > 0; uiDly-- { for(i = 0; i < 50000; i++; }}/******************************************************************* ************************** 函数名称:UART0_IRQ ** 函数功能:串口中断服务函数** 输入参数:无 ** 输出参数:无******************************************************************** ***********************/void __irq UART0_IRQ (void{ uiGNum = 0;while ((U0IIR & 0x01 == 0 /* 判断是否有中断挂起 */{ switch (U0IIR & 0x0E /* 判断中断标志 */{ case 0x04: /* 接收数据中断 */uiGRcvNew = 1; /* 置接收新数据标志 */for (uiGNum = 0; uiGNum < 8; uiGNum++ /* 连续接收 8个字节 */{ uiGRcvBuf[uiGNum] = U0RBR; }break;case 0x0C: /* 字符超时中断 */uiGRcvNew = 1;while ((U0LSR & 0x01 == 0x01 /* 判断数据是否接收完毕 */{ uiGRcvBuf[uiGNum] = U0RBR;uiGNum++; }break;default:break;}}VICV ectAddr = 0x00;}/******************************************************************* ************************** 函数名称:UARTInit** 函数功能:串口初始化,设置为 8位数据位, 1位停止位,无奇偶校验,波特率为115200 ** 输入函数:uiDly 值越大,延时时间越长 ** 输出函数:无******************************************************************** ***********************/void UARTInit (void{ uint16 uiFdiv;U0LCR = 0x83; / * 允许设置波特率 */uiFdiv = (Fpclk / 16 / UART_BPS; /* 设置波特率 */U0DLM = uiFdiv / 256;U0DLL = uiFdiv % 256;U0LCR = 0x03; /* 锁定波特率 */}/******************************************************************* ************************** 函数名称:UART0SendByte** 函数功能:向串口发送子节数据,并等待数据发送完成,使用查询方式** 输入参数:uiDat 要发送的数据 ** 输出参数:无******************************************************************** ***********************/void UART0SendByte (uint8 uiDat{ U0THR = uiDat; /* 写入数据 */while ((U0LSR & 0x20 == 0; /* 等待数据发送完毕 */}/******************************************************************* ************************** 函数名称:UART0SendStr ** 函数功能:向串口发送字符串** 输入参数:uiStr 要发送的字符串指针 ** uiNum 要发送的数据个数** 输出参数:无******************************************************************** ***********************/void UART0SendStr(uint8 const *uiStr, uint32 uiNum{ uint32 i;for (i = 0; i < uiNum; i++ /* 发送指定个字节数据 */{ UART0SendByte (*uiStr++; }}/******************************************************************* ************************** 函数名称:main** 函数功能:跳线 JP6短接,打开串口调试软件 , 串口 0中断方式通信** 输入参数:无 ** 输出参数:无******************************************************************** ***********************/int main (void{ PINSEL0 = PINSEL0 & (~0x0F;PINSEL0 = PINSEL0 | 0x05; /* 设置 I/O连接到 UART */uiGRcvNew = 0;UARTInit (; /* 串口初始化 */U0FCR = 0x81; /* 使能 FIFO ,设置 8个字节触发点 */U0IER = 0x01; /* 使能接收中断 */IRQEnable (;VICIntSelect = 0x00000000; /* 设置所有中断为向量中断 */VICV ectCntl0 = 0x20 | 0x06; /* 设置串口中断为最高优先级 */VICV ectAddr0 = (uint32UART0_IRQ; /* 设置向量地址 */VICIntEnable = 1 << 0x06; /* 使能串口中断 */while (1{ if (uiGRcvNew == 1 /* 判断是否有新数据 */{ uiGRcvNew = 0; /* 清除标志 */UART0SendStr (uiGRcvBuf, uiGNum; /* 向串口发送数据 */}}return 0;}本实验例程用到了接收中断和超时中断,用户可根据发送字节数多少,对GuiDataBuf[ ]数据缓冲区进行相应的设置。

uart实验报告

uart实验报告

uart实验报告
《UART实验报告》
实验目的:通过实验学习串行通信的基本原理,掌握UART通信协议的工作原理和使用方法。

实验设备:单片机开发板、串口调试助手、电脑。

实验原理:UART(Universal Asynchronous Receiver/Transmitter)是一种通用的异步串行通信协议,用于在计算机和外部设备之间进行数据传输。

UART通信协议包括数据位、停止位、奇偶校验位等参数,通过这些参数的设置可以实现不同的通信速率和数据传输方式。

实验步骤:
1. 连接单片机开发板和电脑,打开串口调试助手。

2. 在单片机开发板上编写UART通信程序,设置通信参数。

3. 将单片机开发板通过串口连接到电脑,打开串口调试助手。

4. 在串口调试助手上发送数据,观察单片机开发板接收到的数据。

5. 在单片机开发板上发送数据,观察串口调试助手接收到的数据。

实验结果:
经过实验,我们成功地实现了通过UART通信协议在单片机开发板和电脑之间进行数据传输。

在串口调试助手上发送的数据能够被单片机开发板正确接收,并且在单片机开发板上发送的数据也能够被串口调试助手正确接收。

通过调整通信参数,我们还验证了不同通信速率和数据传输方式对通信效果的影响。

实验总结:
通过本次实验,我们深入了解了UART通信协议的工作原理和使用方法,掌握
了串行通信的基本原理。

在今后的学习和工作中,我们将能够更加熟练地应用UART通信协议进行数据传输,为实际工程应用打下了坚实的基础。

实验6 UART总线实验

实验6 UART总线实验

(3)引脚P0.8 (TXD1) -P0.15 (RI)功能由 引脚选择寄存器PINSEL0(0XE002 C000) 的D31:D16设置,全部清0:
PINSEL0 =0x00000005;
2、UART0寄存器选择与设置 本实验LPC2210直接通过 RXD0(P0.1 )、TXD0 (P0.0) 2 个引脚 与PC机相连。由于PC机串口是RS232电平, 所以连接时需要使用RS232转换器。
报警中断
增量中断
计数器增量中断 使能寄存器 (CIIR)
PCLK
RTC使用示例--操作流程
设置RTC基准 时钟分频器
初始化RTC时 钟值 报警中断设置
启动RTC
读取当前时间 或等待中断
寄存器描述-预分频寄存器
名称
有效位
描述
访问
PREINT
13
预分频值,整数部分
读写
PREFRAC
CCR
15
4
预分频值,小数部分
UART控制寄存器UnLCR
使用UART前需要设置的寄存器——UnLCR, 设置UART通信字符长度、停止位个数、奇偶校验 位等参数。(P288) UART控制寄存器UnLCR
位 功能 7 6 间隔 [5 : 4] 奇偶选择 6 奇偶设置 2 停止位 [1 :0] 字长
除数 锁存
/* 设置串口波特率 */ U0LCR = 0x80; // DLAB位置1 bak = (Fpclk>>4)/baud; U0DLM = bak>>8; U0DLL = bak&0xff;
TxDn
DTR RTS
UARTn波特率发生器
只有UART1才有 中断存器 UnIIR UARTn高速缓存寄存器 UnSCR

实验5 UART的使用

实验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)实验实验五:通⽤异步收发器(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通信实验

计算机与外部设备之间的通信一般采用两种方式:并行方式和串行方式。

所谓的并行方式就是各个位同时进行传输的通信方式,这种方式通信主要特点是通信的速度快,但当距离远且位数多的时候并行通信的成本就会高很多。

串行通信分为异步与同步串行通信。

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位小数。

实验4 UART实验

实验4 UART实验

实验四uart实验1.实验类型:设计性实验2.实验目的:了解和熟悉实验箱硬件、UART通信程序设计及烧写等3.实验内容:(1) 根据硬件结构写出S3C2410与PC机的串口通信程序;(2) 根据接收命令控制LED灯的显示;4.关键实验步骤:1.把并口线插到pc机的并口,并把并口与JTAG相连,JTAG与开发板的14针JTAT口相连,打开2410-S.2.把整个GIVEIO目录拷贝到C:\WINDOWS下,并把该目录下的giveio.sys文件拷贝到c:/windows/system32/drivers下。

3.在控制面板里,选添加硬件>下一步>选-是我已经连接了此硬件>下一步>选中-添加新的硬件设备>下一步>选中安装我手动从列表选择的硬件>下一步>选择-显示所有设备>选择-从磁盘安装-浏览,指定驱动为C:\WINDOWS\GIVEIO\giveio.inf文件,点击确定,安装好驱动.4.根据硬件连接图编写控制程序,并生成bin文件.5.在d盘新建一目录ARM,把sjf2410.exe和要烧写的bin文件拷贝到该目录下,在程序-附件-msdos下,进入该目录,运行sjf2410 命令如下:sjf2410 /f:bin 文件.在此后出现的三次要求输入参数,第一次是让选择Flash,选0;第二次是选择jtag对flash的两种功能,也选0;第三次是让选择起始地址,选0此后就等待大约3-5分钟的烧写时间,当VIVI 烧写完毕后选择参数2,退出烧写。

烧录后重新启动2410-S,观察不同控制程序的实验现象。

#define ULCON0 (*(volatile unsigned long *)0x50000000)#define UCON0 (*(volatile unsigned long *)0x50000004)#define UTRSTA T0 (*(volatile unsigned long *)0x50000010)#define UTXH0 (*(volatile unsigned long *)0x50000020)#define URXH0 (*(volatile unsigned long *)0x50000024)#define UBRDIV0 (*(volatile unsigned long *)0x50000028)#define GPHCON (*(volatile unsigned long *)0x56000070)//#define GPHDAT (*(volatile unsigned long *)0x56000074) #define GPHUP (*(volatile unsigned long *)0x56000078)void Delay(unsigned long x);int Main(){unsigned long uartrecdata=0x09;ULCON0=0x03;UCON0=0x45;UBRDIV0=0x13;GPHCON=0x000000A0;GPHUP=0x00000000;while(1){while(!(UTRSTAT0&0x2)); //等待知道THR变空//改动延时时间1--10 Delay(100);UTXH0 =uartrecdata;Delay(100);while(!(UTRSTAT0&0x1)); //等待直到接受到一个数据uartrecdata=URXH0;Delay(100);}return 0;}void Delay(unsigned long x){unsigned long i,l=0;for(i=0;i<=x;i++);}IMPORT MainAREA Init,CODE,READONLYENTRYLDR R0,=0x53000000mov r1,#0STR R1,[R0]BL MainEND#define IOPMOD (*(volatile unsigned long *)0x56000020)#define IOPDATA (*(volatile unsigned long *)0x56000024)void Delay(unsigned long x);int Main(){unsigned long LED;IOPMOD=0x00005400; LED=0x00000001;while(1){IOPDATA=LED;LED=(LED<<1);if(LED==0x00000100)LED=0x00000001;Delay(200000);}return 0;}void Delay(unsigned long x){ unsigned long i;for(i=0;i<=x;i++) ;}。

通用异步串行口(UART)实验

通用异步串行口(UART)实验

班级07电本一班学号2007050352姓名钟发炫同组人
实验日期2010. 06. 01 室温大气压成绩
实验题目:通用异步串行口(UART)实验
一、实验目的
1.掌握异步串行通信协议;
2.掌握2812异步收发器模块的应用。

二、实验设备
1. 一台装有CCS软件的计算机;
2. DSP试验箱的TMS320F2812主控板;
3. DSP硬件仿真器。

三、实验原理
1.异步串行通信协议
在传输数据前,数据线处于高电平状态,这称为表示态。

传输开始后,数据线由高电平转为低电平状态,这称为起始位;起始位后面接着5~8个信息位;信息为后面是校验位;校验位后是停止位“1”。

传输完毕后,可以立即开始下一个字符的传输;否则,数据线再次进入标识态。

上面提到的信息位的位数(5~8位)、停止位的位数(1位、1..5位或2位)、校验的方式(奇偶验、偶校验或不校验)等参数都可以根据不同需要进行设置,但对于同一个传输系统中的首发两端来说,这些参数必须保持一致。

异步串行通信方式中另一个重要的参数是波特率。

在一般的“0”“1”系统中,波特率就是每秒钟传输的位数。

国际上规定了一个标准波特率系列,他们是最常用的波特率。

标准波特率系列为110、300、600、1200、1800、2400、4800、9600和19200。

发送端和接收端必须设置统一的波特率,否则无法正确接收数据。

2.电平转换
RS-232-C标准中规定-5V~-15V位逻辑“1”,+5V~+15V位逻辑“0”,因此要用专门的芯片完成TTL电平与RS-232电平的转换,如MAX3232。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//UART实验程序解析
//头文件
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "driverlib/rom.h"
#include "driverlib/pin_map.h"
//串口接收中断服务程序
void UARTIntHandler(void)
{
ui32 ulStatus;
//获取中断状态
ulStatus = ROM_UARTIntStatus(UART0_BASE, true); //清除中断标志
ROM_UARTIntClear(UART0_BASE, ulStatus);
//直到串口FIFO中没有数据时才退出循环
while(ROM_UARTCharsAvail(UART0_BASE))
{
//读串口接收的字符并回发
ROM_UARTCharPutNonBlocking(UART0_BASE,
ROM_UARTCharGetNonBlocking(UART0_BASE));
}
}
//串口发送函数
void UARTSend(const ui8 *pucBuffer, ui32 ulCount)
{
while(ulCount--)
{
//将要发送的字符写进UART
ROM_UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++); }
}
int main(void)
{
//使能FPU
FPUEnable();
FPULazyStackingEnable();
//设置时钟直接使用外部晶振
ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC |
SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
//使能用到的外设
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
//配置PA0和PA1为串口0引脚
ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 |
GPIO_PIN_1);
//使能中断
ROM_IntMasterEnable();
//配置UART0为115200,8-N-1
ROM_UARTConfigSetExpClk(UART0_BASE, ROM_SysCtlClockGet(),
115200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
//使能串口中断
ROM_IntEnable(INT_UART0);
ROM_UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT);
//发送提示信息
UARTSend((ui8 *)"Enter text: \r", 13);
while(1)
{
}
}。

相关文档
最新文档