最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

串口通信实验

来源:动视网 责编:小OO 时间:2025-09-29 06:27:08
文档

串口通信实验

串口通信实验一、实验目的1.掌握ARM的串行口工作原理。2.学习编程实现ARM的UART通讯。3.掌握CPU利用串口通讯的方法。二、实验内容学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。编程实现ARM和计算机实现串行通讯:ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。三、实验原理介绍通
推荐度:
导读串口通信实验一、实验目的1.掌握ARM的串行口工作原理。2.学习编程实现ARM的UART通讯。3.掌握CPU利用串口通讯的方法。二、实验内容学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。编程实现ARM和计算机实现串行通讯:ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。三、实验原理介绍通

串口通信实验
一、实验目的

1.掌握ARM的串行口工作原理。

2.学习编程实现ARM的UART通讯。

3.掌握CPU利用串口通讯的方法。

二、实验内容

学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。编程实现ARM和计算机实现串行通讯:

ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。

三、实验原理介绍

通信方式

在通信过程中,如果通信仅在点对点之间进行,或者 点对多点之间进行,那么,按消息传输的方向和时间的不同,可以将通信分为单工通信、全双工通信以及半双工通信。

(1)单工

消息只能单方向进行传输的一种通信方式称为单工通信。如图8-1所示,通信只能从A传输到B。这好比一条绝对方向的单行道路,不准双向通信也不能逆向行驶。在现代通信系统中,如模拟广播电视系统(不包括现正在研究应用的HFC双向网络)、无线寻呼系统等。信号只能从广播电视台、无线寻呼中心发送到电视机接收机、BB机上。

图8-1 单工通信方式

(2)全双工

全双工通信是指通信双方可以同时进行双向数据传输而互不影响的工作方式。如图8-2所示,在这种工作方式下,通信双方都可以同时进行信息的发送和接收,因此,全双工通信的信道必须是双向信道。如果是有线的全双工方式,通信双方会有两根的信号线分别传输发送信号和接收信号,从而使得发送和接收可同时进行。生活中的普通电话系统、移动通信系统都是全双工方式。

图8-2 双工通信方式

(3)半双工

这种方式允许数据传输做双向操作,即不仅可以发送,亦可以接收信号,但是,在同一时刻,只能进行发送和接收任意一个操作。因此仍然只采用一个信道。如图8-3所示,如果是有线通信,通信双方只需要一根数据线连接,但是比全双工方式耗时会更多。如对讲机系统就是采用的半双工通信方式。

图8-3 半双通信方式

串行同步通信与串行异步方式

在通信过程中,发送方和接收方每次都只发送和接收一位数据的通信方式称为串行通信方式。也就是说,在任意一个时刻,数据线上仅有一位数据。在传输数据过程中,双方需要协商时钟信号,即规定什么时候发送数据和接收数据,以及每位数据所占用的时间宽度。根据双方接收和发送数据所采用的时钟信号是否是同一个时钟源而分为串行异步通信方式和串行同步通信方式。串行异步通信方式中,通信双方采用自己的时钟信号,根据信号的起始位等判断信息,因此接收和发送仅需要两根信号线分别用来传送和接收信号。而串行同步通信方式中,由通信双方的一方(或者另外设备)提供统一的时钟信号,在一定程序上提高通信速率,但这种通信方式需要额外的时钟信号线。另外,这种通信方式不适合远距离传输,因为远距离会使时钟信号受到干扰,出现误码等现象。

(1)串行异步通信方式

在异步传输模式下,传输数据以字符为单位,数据传输速率多在1.2kb/s以下。当发送一个字符代码时:

●        字符前面要加一个起始信号,其长度为一个码元,极性为“0”,即空号极性。

●        字符后面要加一个终止符号,其长度为1-2个码元,极性为“1”,即传号极性。

加上起始终止信号后,即可区分出所传输的字符,传送时,字符可以连续发送,也可以单独发送,不发字符时线路保持“1”状态,如图8-4所示为起止式同步传输序列,每个字符由8bit组成,加上起止位,信号共11位,两字符之间的间隔长度可以不固定。实现起来比较简单。

图8-4 异步传输模式帧格式

异步串行通信协议规定字符数据的传输规范总结起来有以下几点:

起始位:

通信线上没有数据被传送时处于逻辑“1”状态,当发送设备要发送一个字符数据时,首选发送一个逻辑“0”信号,这个逻辑低电平就是起始位。起始位通过通信线传向接收机,接收设备检测到这低电平后,就开始准备接收数据位信号。起始位所起的作用就是使设备同步,通信双方必需在传送数据位前一致同步。

数据位:

当接收设备收到起始位后,开始接收数据位。数据位的个数可以是5-9位,PC机中经常采用7-8位数据传送。在字符传送过程中,数据位从最低有效位开始传送,依次在接收设备中被转换为并行数据。

奇偶校验位:

数据位发送完后,为了保证数据的可靠性传输,常传送奇偶校验位。奇偶校验用于有限差错检测。如果选择偶校验,则数据位和奇偶位的逻辑“1”的个数必须为偶数,相反,如果是奇校验,逻辑“1”的个数为奇数。

停止位:

在奇偶位或者数据位(当无奇偶校验时)之后发送停止位。停止位是一个字符数据的结束,可以是1-2位的低电平,接收设备收到停止位后,通信线路便恢复逻辑“1”状态,直到下一个字符数据的起始位到来。

波特率设置:

通信线路上传送的所有位信号都保持一致的信号持续时间,每一位的宽度都由数据的码元传送速率确定,而码元速率是单位时间内传送的码元的个数,即波特率。

(2)串行同步通信方式

在同步通信中,通信双方使用同一个时钟源,这个时钟信号可以由通信方式的一方提供或者由第三方提供。其时序图如图8-5所示,所有要传输的数据都需要与此时钟信号同步,即每个传输的数据所占用的时间宽度都需要与一个时钟变换所用时间相等。即数据在时钟跳变(上升沿和下降沿)后一段时间内有效。相应的,接收方根据时钟跳变来确定何时接收一位数据。同步传输使用不同的方式来表示一次传输的开始和结束。

图8-5 串行同步通信方式

S3C2410芯片UART

基于ARM9内核架构的嵌入式处理器的S3C2410的UART(Universal Asynchronous Receiver and Transmitter)单元拥有3个SIO(saynchronous serial I/O),每个单元都可以工作在中断模式以及DMA(Direct Memory Access)模式。UART最大速率可以达到230.4kbps。如果外部设备提供一个时钟信号,其可以工作在更新的通信速率。每个UART通道都包含两个16bit的FIFO来接收和发送数据。

S3C2410处理器的UART支持可编程波特率、IR(infra-red)传输,1~2位停止位,5~8位数据宽度,同时支持奇偶校验。

S3C2410芯片UART结构图

如图8-11所示为S3C2410芯片UART结构图。

图8-11 S3C2410芯片UART结构图

数据发送

S3C2410芯片UART支持可编程数据传输帧格式。在数据帧中包含起止位、5~8位数据位、一位奇偶校验位以及1~2位停止位。具体设置可以在控制寄存器(ULCONn)设置。同时,传输装置支持中断方式,即在传输的时候强制输出逻辑0中断信号。此中断信号在完成一个字符传输后传输,之后传输器继续传输数据至Tx FIFO。

数据接收

同理,接收器亦支持可编程方式,同样包含起止位、5~8位数据位、一位奇偶校验位以及1~2位停止位,具体设置可以在控制寄存器(ULCONn)设置。接收器亦可以探测到数据溢出错误、奇偶校验错误、帧错误以及中断信号,并且每种情况都可置相应的错误标识。

数据溢出错误:在上一字符没有接收完成时新的数据已经到达,从而覆盖了原来的数据。

奇偶校验错误:奇偶位不满足奇偶条件。

帧错误:接收数据没有有效的停止位。

中断信号:RxDn输出持续逻辑0信号(持续时间超过一帧)。

功能寄存器

(1)列控制寄存器

S3C2410的UART单元包含三个列控制寄存器,分别是ULCON0, ULCON1和ULCON2。其说明如表8-6所示。

表8-6 列控制寄存器

寄存器

地址读/写

说明复位值
ULCON00x50000000可读/写

UART0列控制寄存器

0x00
ULCON10x50004000可读/写

UART1列控制寄存器

0x00
ULCON20x50008000可读/写

UART2列控制寄存器

0x00
ULCONn各位功能描述如表8-7所示。

表8-7 ULCONn各位功能描述

ULCONn说明初始化状态
保留位7 0
红外模式6设置是否采用红外模式。0=普通模式,1=红外模式

0
奇偶校验模式[5:3]设置在奇何偶校验模式方式:0XX:=无;100=奇校验;101=偶校验;110=强制为1;111=强制为0。

000
停止位[2]设置每帧停止位位数:0=1位停止位;1=两位停止位。

0
字长度[1:0]设置每帧数据位长度:00=5位、01=6位、10=7位、11=8位。

0
(2)控制寄存器

S3C2410的UART单元包含三个控制寄存器,分别是UCON0, UCON1和UCON2。其说明如表8-8所示。

表8-8控制寄存器

寄存器地址读/写

说明复位值
UCON00x50000004可读/写

UART0控制寄存器

0x00
UCON10x50004004可读/写

UART1控制寄存器

0x00
UCON20x50008004可读/写

UART2控制寄存器

0x00
UCONn各位功能描述如表8-9所示。

表8-9 UCONn各位功能描述

UCONn说明初始化状态
时钟选择10选择时钟来源。0=PCLK,1=UCLK。

0
Tx中断类型

9中断请求类型。0=Pulse。1=Level。

0
Rx中断类型

8中断请求类型。0=Pulse。1=Level。

0
Rx超时

7禁止/允许接收超时终端。0=禁止;1=允许。

0
接收错误状态中断允许6当产生异常时使能UART产生中断中断。如帧错误、奇偶校验错误、溢出错误。0=不产生,1=产生。

0
回环模式5设置是否进入回环模式。0=普通模式;1=回环模式。

0
发送中断信号4设置UART产生中断信号。如果发出一个中断后,此位将自动清0。0=普通传输,1=发送中断信号。

0
传输模式[3:2]决定当前UART采用何种传输模式。00=禁止;01=中断或者轮流模式;10=DMA0请求(UART0),DMA3请求(UART2);11=DMA1请求(UART0)。

00
接收模式[1:0]决定当前UART采用何种接收模式。00=禁止;01=中断或者轮流模式;10=DMA0请求(UART0),DMA3请求(UART2);11=DMA1请求(UART0)。

00
(3)FIFO控制寄存器

S3C2410的UART单元包含三个FIFO控制寄存器,分别是UFCON0, UFCON1和UFCON2。其说明如表8-10所示。

表8-10 FIFO控制寄存器

寄存器地址读/写

说明复位值
UFCON00x50000008可读/写

UART0 FIFO控制寄存器

0x00
UFCON10x50004008可读/写

UART1 FIFO控制寄存器

0x00
UFCON20x50008008可读/写

UART2 FIFO控制寄存器

0x00
ULCONn各位功能描述如表8-11所示。

表8-11 UFCONn各位功能描述

UFCONn说明初始化状态
Tx FIFO触发方式

[7:6]决定传输FIFO信号标准。00 =空,01 = 4-byte,10 = 8-byte,11 = 12-byte。

00
Rx FIFO触发方式

[5:4]决定接收FIFO信号标准。00 = 4-byte,01 = 8-byte,10 = 12-byte,11 = 16-byte。

00
保留3 0
Tx FIFO复位

2自动清零。0 = 一般模式 1= Tx FIFO复位。

0
Rx FIFO复位

1自动清零。0 = 一般模式 1= Tx FIFO复位。

0
FIFO使能

00=禁止,1=使能。

0
(4)MODEM控制寄存器

S3C2410的UART单元包含三个MODEM控制寄存器,分别是UMCON0, UMCON1和UMCON2。其说明如表8-12所示。

表8-12 MODEM控制寄存器

寄存器地址读/写

说明复位值
UMCON00x5000000C可读/写

UART0 MODEM控制寄存器

0x00
UMCON10x5000400C可读/写

UART1 MODEM控制寄存器

0x00
保留0x5000800C---保留---
ULCONn各位功能描述如表8-13所示。

表8-13 MODEM各位功能描述

MODEMn说明初始化状态
保留[7:5]这些位必须为0

00
AFC41=使能,0=禁止

0
保留[3:1]这些位必须为0

000
请求发送0如果使能AFC,此位将被忽略。S3C2410将自动控制nRTS信号。如果禁止AFC。nRTS必须由软件控制。0=高电平,1=低电平。

0
(5)Tx/Rx状态寄存器

S3C2410的UART单元包含三个Tx/Rx状态寄存器,分别是UTRSTAT 0, UTRSTAT1和UTRSTAT 2。其说明如表8-14所示。

表8-14 MODEM控制寄存器

寄存器地址读/写

说明复位值
UTRSTAT00x50000010可读UART0 Tx/Rx状态寄存器

0x6
UTRSTAT 10x50004010可读UART1 Tx/Rx状态寄存器

0x6
UTRSTAT20x50008010可读UART2 Tx/Rx状态寄存器

0x6
UTRSTAT n各位功能描述如表8-15所示。

表8-15 UTRSTATn各位功能描述

UTRSTAT n说明初始化状态
传输装置空2当传输buffer寄存器没有可用数据传输或者传输移位寄存器为空时自动设置为1。0=非空;1=空。

1
传输Buffer空

1当传输寄存器为空时自动设置为1。0=非空,1=空。

1
接收Buffer数据准备好

0当接收buffer寄存器有有效数据通过RxDn端口接收数据。0=空,1=有接收数据。

0
(6)错误状态寄存器

S3C2410的UART单元包含三个错误状态寄存器,分别是UERSTAT0, UERSTAT1和UERSTAT2。其说明如表8-16所示。

表8-16 错误状态寄存器

寄存器地址读/写

说明复位值
UERSTAT 00x50000014可读UART0 错误状态寄存器

0x0
UERSTAT 10x50004014可读UART1 错误状态寄存器

0x0
UERSTAT 20x50008014可读UART2 错误状态寄存器

0x0
UERSTAT n各位功能描述如表8-17所示。

表8-17 UERSTAT n各位功能描述

UERSTAT n说明初始化状态
保留30=接收时无帧错误;1=帧错误。

0
帧错误2在接收操作时无论何时出现错误将自动置1。0=无帧错误。1=帧错误。

0
保留10=无帧错误。1=帧错误。

0
溢出错误0无论何时发生溢出错误将置此位为1。0=无错误。1=溢出错误。

0
(7)FIFO状态寄存器

S3C2410的UART单元包含三个FIFO状态寄存器,分别是UFSTAT0, UFSTAT1和UFSTAT2。其说明如表8-18所示。

表8-18 FIFO状态寄存器

寄存器地址读/写

说明复位值
UFSTAT 00x50000018可读UART0 FIFO状态寄存器

0x00
UFSTAT 10x50004018可读UART1 FIFO状态寄存器

0x00
UFSTAT 20x50008018可读UART2 FIFO状态寄存器

0x00
UFSTAT n各位功能描述如表8-19所示。

表8-19 UFSTAT n各位功能描述

UFSTAT n说明初始化状态
保留[15:10]0=接收时无帧错误;1=帧错误。

0
Tx FIFO满

9如果传送FIFO满将自动设置此位为1。0=0位<=Tx FIFO数据<=15位;1=FULL。

0
Rx FIFO满

8如果接收FIFO满将自动设置此位为1。0=0位<=Tx FIFO数据<=15位;1=FULL。

0
Tx FIFO计数器

[7:4]Tx FIFO数据个数。

0
Rx FIFO计数器

[3:0]Rx FIFO数据个数。

0
(8)MODEM状态寄存器

S3C2410的UART单元包含三个MODEM状态寄存器,分别是UMSTAT0, UMSTAT1和UMSTAT2。其说明如表8-20所示。

表8-18 MODEM状态寄存器

寄存器地址读/写

说明复位值
UMSTAT 00x5000001C可读UART0 FIFO状态寄存器

0x00
UMSTAT 10x5000401C可读UART1 FIFO状态寄存器

0x00
保留0x5000801C---保留---
UMSTAT n各位功能描述如表8-20所示。

表8-20 UMSTAT n各位功能描述

UMSTAT n说明初始化状态
保留3 0
Delta CTS2指示nCTS值相对于上次CPU读取输入状态发生了改变。0=没有发生变化,1=变化。

0
保留1 0
发送清除00=CTS信号没有激活(高电平);1=CTS激活(低电平)。

0
(9)传输缓冲寄存器

S3C2410的UART单元包含三个传输缓冲寄存器,分别是UTXH0, UTXH1和UTXH2。其说明如表8-21所示。

表8-21 传输缓冲寄存器

寄存器地址读/写

说明复位值
UTXH 00x50000020(L)

0x50000023(B)

可写(字节)UART0 传输缓冲寄存器

 
UTXH 10x50004020(L)

0x50004023(B)

可写(字节)UART1 传输缓冲寄存器

 
UTXH20x50008020(L)

0x50008023(B)

可写(字节)UART2 传输缓冲寄存器

 
(10)接收缓冲寄存器

S3C2410的UART单元包含三个接收缓冲寄存器,分别是URXH0, URXH1和URXH 2。其说明如表8-22所示。

表8-22 接收缓冲寄存器

寄存器地址读/写

说明复位值
URXH 00x50000024(L)

0x50000027(B)

可写(字节)UART0 接收缓冲寄存器

 
URXH 10x50004024(L)

0x50004027(B)

可写(字节)UART1 接收缓冲寄存器

 
URXH 20x50008024(L)

0x50008027(B)

可写(字节)UART2 接收缓冲寄存器

 
(11)波特率约数寄存器

S3C2410的UART单元包含三个波特率约数寄存器,分别是UBRDIV0, UBRDIV1和UBRDIV2。其说明如表8-232所示。

表8-23 波特率约数寄存器

寄存器地址读/写

说明复位值
UBRDIV 00x50000028可读/写

UART0 波特率约数寄存器

 
UBRDIV10x50004028可读/写

UART1 波特率约数寄存器

 
UBRDIV 20x50008028可读/写

UART2 接波特率约数寄存器

 
S3C2410串行接口硬件电路

如图8-13所示为S3C2410芯片UART采用MAX3232进行电平转换,从而输出RS232C标准信号的电路图。MAX3232主要实现电平转换功能。两个DB9硬件接口(UART0、UART1)可以直接与计算机以及其它符合RS232C标准的串行接口直接相连。MAX3232左侧的TXD0、RXD0、TXD1、RXD1分别与S3C2410芯片UART0和UART1相连。

图8-13 S3C2410芯片UART接口电平转换电路

四、串行通信实验及C源代码分析

本处给出一个无操作系统支持的串行通信测试程序及源码分析及试验步骤,此试验步骤以博创UP-NETARM2410为试验平台,其串行通信接口电路图如图8-11所示,软件开发平台为ADS1.2(ARM Developer Suite v1.2)。如果读者选用其它硬件平台,试验步骤可能略有差异。但是,此程序可以不经过任何修改即可直接使用。

因为采用无操作系统支持的方式编译此程序,因此,此程序在上传到试验箱时最好能够有bootloader程序加载。当然,读者也可以采用直接烧写的方式加载。

根据图8-11所示硬件电路,此硬件连接方式中每一个串口有两根信号线(TXD和RXD)分别用来传输和发送数据。因此,本试验采用串口异步通信方式。与此程序相关的源代码如下所示。

(1)与UART相关的寄存器宏定义。

●       #define UART_CTL_BASE      0x50000000  /*UART寄存器基地址 */

●       #define UART0_CTL_BASE     UART_CTL_BASE    /*UART0 寄存器基地址 */

●       #define UART1_CTL_BASE     UART_CTL_BASE + 0x4000   /*UART1 寄存器基地址 */

●       #define UART2_CTL_BASE     UART_CTL_BASE + 0x8000   /*UART2 寄存器基地址 */

●       #define bUART(x, Nb)    __REG(UART_CTL_BASE + (x)*0x4000 + (Nb))

●       /* Offset */

●       #define oULCON             0x00 /* R/W, UART 线性控制寄存器 */

●       #define oUCON           0x04 /* R/W, UART 控制寄存器 */

●       #define oUFCON             0x08 /* R/W, UART FIFO控制寄存器 */

●       #define oUMCON             0x0C /* R/W, UART modem 控制寄存器 */

●       #define oUTRSTAT        0x10 /* R  , UART Tx/Rx状态寄存器 */

●       #define oUERSTAT        0x14 /* R  , UART Rx error状态寄存器 */

●       #define oUFSTAT         0x18 /* R  , UART FIFO 状态寄存器 */

●       #define oUMSTAT         0x1C /* R  , UART Modem 状态寄存器*/

●       #define oUTXHL             0x20 /*  W, UART transmit(小端模式) buffer */

●       #define oUTXHB             0x23 /*  W, UART transmit(大端模式) buffer */

●       #define oURXHL             0x24 /* R  , UART receive(小端模式) buffer */

●       #define oURXHB             0x27 /* R  , UART receive(大端模式) buffer */

●       #define oUBRDIV         0x28 /* R/W, 波特率约数 寄存器 */

●       /* Registers */

●       #define ULCON0             bUART(0, oULCON)

●       #define UCON0           bUART(0, oUCON)

●       #define UFCON0             bUART(0, oUFCON)

●       #define UMCON0             bUART(0, oUMCON)

●       #define UTRSTAT0        bUART(0, oUTRSTAT)

●       #define UERSTAT0        bUART(0, oUERSTAT)

●       #define UFSTAT0         bUART(0, oUFSTAT)

●       #define UMSTAT0         bUART(0, oUMSTAT)

●       #define UTXH0           bUART(0, oUTXHL)

●       #define URXH0           bUART(0, oURXHL)

●       #define UBRDIV0         bUART(0, oUBRDIV)

●       #define ULCON1             bUART(1, oULCON)

●       #define UCON1          bUART(1, oUCON)

●       #define UFCON1             bUART(1, oUFCON)

●       #define UMCON1             bUART(1, oUMCON)

●       #define UTRSTAT1        bUART(1, oUTRSTAT)

●       #define UERSTAT1        bUART(1, oUERSTAT)

●       #define UFSTAT1         bUART(1, oUFSTAT)

●       #define UMSTAT1         bUART(1, oUMSTAT)

●       #define UTXH1           bUART(1, oUTXHL)

●       #define URXH1           bUART(1, oURXHL)

●       #define UBRDIV1         bUART(1, oUBRDIV)

●       #define ULCON2             bUART(2, oULCON)

●       #define UCON2           bUART(2, oUCON)

●       #define UFCON2             bUART(2, oUFCON)

●       #define UMCON2             bUART(2, oUMCON)

●       #define UTRSTAT2        bUART(2, oUTRSTAT)

●       #define UERSTAT2        bUART(2, oUERSTAT)

●       #define UFSTAT2         bUART(2, oUFSTAT)

●       #define UMSTAT2         bUART(2, oUMSTAT)

●       #define UTXH2           bUART(2, oUTXHL)

●       #define URXH2           bUART(2, oURXHL)

●       #define UBRDIV2         bUART(2, oUBRDIV)

(2)发送一个字符

●       #define WrUTXH0(ch)  (*(volatile unsigned char *) UTXH0)=(unsigned char)(ch)

●       #define WrUTXH1(ch)  (*(volatile unsigned char *) UTXH1)=(unsigned char)(ch)

●          void Uart_SendByten(int Uartnum, U8 data)//向uartnum发送数据data

●       {                                            //#define U8 unsigned char

●          if(Uartnum==0)

●           {

while(!(UTRSTAT0 & 0x4));        // UART0 Tx/Rx状态寄存器,其第2位标识传输buffer寄存器//是否为空(0为空),发送数据直到传输buffer寄存器为空

●              hudelay(10);          //等待10ms

●              WrUTXH0(data);        //发送data到传输UTXH0中

●           }

●          Else                         //否则选用UART1

●           {

●              while(!(rUTRSTAT1 & 0x4));  

●              hudelay(10);

●              WrUTXH1(data);

●           }  

●       }      

(3)接收字符测试程序

●          char Uart_Getchn(char* Revdata, int Uartnum, int timeout)

●       {             // Revdata为接收的数据,uartnum为串口标识,timeout为超时

●          if(Uartnum==0)

●              {

●              while(!(UTRSTAT0 & 0x1));//UART0 Tx/Rx状态寄存器的第0位标识接收

●                                    //buffer数据是否准备好。1=有接收数据

●              *Revdata=URXH0();         // URXH0:UART0的接收缓冲寄存器

●              return 1;

●             }

●          Else                    //如果从UART1接收数据

●              {

●              while(!(rUTRSTAT1 & 0x1));//Receive data read

●              *Revdata=RdURXH1();

●              return TRUE;

●             }

●       }

(4)测试主程序

●       int main(void)

●       { 

●           char c1[1];

●           char err;

●          ARMTargetInit();              // 初始化ARM2410最小系统

●               Uart_SendByten(0,0xa);        //换行

●          Uart_SendByten(0,0xd);   //回车

●          Uart_SendByten(0,'t');   //输出test字符

●          Uart_SendByten(0,'e');

●          Uart_SendByten(0,'s');

●          uart_SendByten(0,'t');

●          Uart_SendByten(0,'!');

●          while(1)                //此程序一直执行

●          {

●               Uart_SendByten(0,0xa);        //换行

●          Uart_SendByten(0,0xd);   //回车

●               Uart_SendByten(0,0xa);        //换行

●          Uart_SendByten(0,0xd);   //回车

●               err=Uart_Getchn(c1,0,0);      //接收字符

●               Uart_SendByten(0,c1[0]);      //发送字符

●          }

写一个程序,用一个链表存储接收的多个字符,只有当遇到回车时标识接收数据完成,并输出此段字符数据。

写一个程序,用串口1发送数据,用串口2接收数据(相同设置)。

写一个程序,用串口1发送数据,用串口2接收数据(不相同设置)。

初始化设置

(波特率,奇偶校验,数据位)

文档

串口通信实验

串口通信实验一、实验目的1.掌握ARM的串行口工作原理。2.学习编程实现ARM的UART通讯。3.掌握CPU利用串口通讯的方法。二、实验内容学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。编程实现ARM和计算机实现串行通讯:ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。三、实验原理介绍通
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top