当前位置:首页 > 单片机 > 单片机
[导读] 本文章针对的是ARM2200环境下编写串口程序,其中设计轮循方式,中断方式,以及在UC/OS-II操作系统下的串口编程。使用轮循和中断两种方式来实现串口编程。(当然了,用中断实现串口编程,系统的效率较高

本文章针对的是ARM2200环境下编写串口程序,其中设计轮循方式,中断方式,以及在UC/OS-II操作系统下的串口编程

使用轮循和中断两种方式来实现串口编程。

(当然了,用中断实现串口编程,系统的效率较高。但是难度也较大。轮循方式效率较低,但是编程比较简单)


一.串口编程的硬件原理

1.串口特性:

1>16字节接收FIFO和16字节发送FIFO

2>接收FIFO触发点可设置为1,4,8或14字节。

3>内置波特率发生器。

2.UART0引脚:
1>RxD0引脚用于UART0接受数据,接受方式为串行输入。

2>TxD0引脚用于UART0发送数据,发送方式为串行发送数据。

3.UART0的结构和工作方式


先看图在说明:


1>VPB总线提供CPU与UART0之间得的通信连接

(CPU内核通过VPB接口对UART0的寄存器进行读写访问.)

2>UART0接收器模块监视串行输入线RxD0的有效输入。UART0接收单元的移位寄存器(U0RSR)通过RxD0接收有效的字符。当U0RSR接受到一个有效字符时,它将该字符传送到UART0接收单元缓冲寄存器FIFO中,等待CPU通过VPB接口进行访问。

3>UART0发送器模块接收CPU或主机写入的数据并将数据缓存到UART0的FIFO或U0THR中,UART0发送模块中的移位寄存器(U0TSR)读取U0THR或FIFO中的数据并将数据通过串行输出到引脚TxD0发送。

4>UART0的接收模块和发送模块的状态信息保存在U0LSR中。

控制信息保存在U0LCR中。

5>UART0波特率发送器模块产生UART0发送模块所使用的定时。波特率发生器模块时钟源为VPB时钟(pclk)。主时钟与U0DLL和U0DLM寄存器所定义的除数相除得到UART0发送器模块使用的时钟,该时钟必须为波特率的16倍。

6>中断接口包含寄存器U0IER和U0IIR。中断接口接收UART0发送模块和接收模块发出的单时钟宽度的使能信号。

4.UART0和ARM7 CPU之间的通信过程

1>CPU通过UART0发送模块发送信息给外设

lCPU发出信息通过AHB总线到AHB-VPB桥

l通过AHB-VPB桥把信息转换后发送给VPB总线。

lUART0接收模块接受来自VPB总线的数据。并将数据缓存到U0THR寄存器中。

lUART0接受模块的移位寄存器U0TSR读取U0THR中的数据并将数据通过输出引脚TxD0发送

2>外设通过UART0接收模块向ARM7 CPU发送信息

lUART0移位寄存器(U0RSR)通过引脚RxD0接收有效字符。

l当UART0接收到一个有效字符后,通过读取U0RBR寄存器可以将FIFO中最早接收到的字节读出,当FIFO中不再包含有效数据时,该寄存器反映接收到的最后一个有效字节数据。接收的数据不足8位时,高位用0填充。

lVPB总线将缓冲寄存器(U0RBR)中的数据通过AHB-VPB桥传到AHB总线上

lAHB总线将数据传送给ARM7 CPU

二.轮训方式的串口编程

1.串口程序都有那几部分组成

看图:

1>串口初速化

A.串口初始化的流程

l设置I/O引脚连接到UART0

l设置串口波特率

l设置串口工作模式

B.串口初始化需要设置的寄存器

lU0LCR(控制寄存器):设置UART0的通信格式。

lU0DLL,U0DLM(寄存器):设置UART0的通信波特率。

C.具体寄存器的设置

(1)U0LCR(线控制寄存器)

l作用:设置通信格式(通信字符长度,停止位个数,奇偶校验位

l长度:8位寄存器

l各位寄存器的含义:

第[1 ,0]位:表示字长

00:表示5位字长

01:表示6位字符长度

10:表示7位字符长度

11:表示8位字符长度

第2位:表示停止位选择

0:1个停止位

1:2个停止位

3位:表示奇偶使能

0:禁止奇偶产生和校验

1:使能奇偶产生和校验

注:奇偶使能:控制是否进行奇偶校验。如果使能,发送时将添加一位校验位。

第[5 4]位:表示奇偶选择位

00:奇数(数据位+校验位=奇数)

01:偶数(数据位+校验位=偶数)

10:校验位强制为1

11:校验位强制为0

注:奇偶选择主要是设置奇偶校验类型。

第6位:间隔控制

0:禁止间隔发送

1:使能间隔发送

注:当该位为1时,输出引脚(TxD0)强制为逻辑0,可以引起通信对方产生间隔中断。在一些通信方式中,使用间隔中断作为通信的起始信号(eg:LIN Bus)

第7位:除数锁存访问位

0:禁止访问除数锁存寄存器

1:始能访问除数锁存寄存器

(2)U0DLL,U0DLM(除数锁存寄存器)

l作用:U0DLL和U0DLM寄存器一起构成一个16位除数。

lU0DLL和U0DLM都为8位寄存器。

lU0DLL:存放分频值的低8位

lU0DLM:存放分频值的高8位。

注:

?1.使用U0DLL和U0DLM配置波特率之前,必须先计算分频值。

Fdiv=Fpclk/(16*baud)

?2.使用U0DLL和U0DLM配置波特率之前必须把U0LCR控制寄存器的第8位置为1才能进行配置。配置完后要把U0LCR控制寄存器的第8位置位0。

2>串口初始化化程序

A方法一:

/**********************************************************

*作者:tiger-john

*时间:2011年1月17日

*名称:UART0_Init()

*功能:UART0初始化(通讯波特率115200,8位数据位,1位停止

位,无奇偶校验)

*入口参数:bps串口波特率

*出口参数:无**********************************************************/

voidUART0_Init(uint32 bps)

{

uint16Fdiv;

PINSEL0=0x00000005;//设置串口引脚

U0LCR=0x83;    //置为除数锁存位,进行配置

Fdiv=(Fpclk>>4)/UART0_BPS;

U0DLM=Fdiv>>8;

U0DLL=Fdiv&0xff;

U0LCR=0x03;//清除除数锁存位,并设置工作模式

}

B.方法二:

/**********************************************************

*作者:tiger-john

*时间:2011年1月17日

*名称:UART0_Init()

*功能:初始化串口0。设置其工作模式及波特率。

*入口参数:baud波特率

*set模式设置(UARTMODE数据结构)

*出口参数:返回值为1时表示初化成功,为0表除参数出错********************************************************/

/*定义串口模式设置数据结构*/

typedefstructUartMode

{uint8 datab;//字长度,5/6/7/8

uint8 stopb;//停止位,1/2

uint8 parity;//奇偶校验位,0为无校验,1奇数校验,2为偶数校验

}UARTMODE;

uint8UART0_Init(uint32 baud, UARTMODE set)

{uint32bak;

/*参数过滤*/

if( (0==baud)"|(baud>115200) )

{

return(0);

}

if( (set.datab<5)||(set.datab>8) )

{

return(0);

}

if( (0==set.stopb)||(set.stopb>2) )

{

return(0);

}

if( set.parity>4 )

{

return(0);

}

/*设置串口波特率*/

U0LCR = 0x80;// DLAB位置1

bak = (Fpclk>>4)/baud;

U0DLM = bak>>8;

U0DLL = bak&0xff;

/*设置串口模式*/

bak = set.datab-5;//设置字长度

if(2==set.stopb)

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

串行通信需要传输的数据通过调制器(Modulator)将数据转换为模拟信号,经过信号调制(Modulation)后在传输线上传输,接收端通过解调器(Demodulator)将信号解码还原成原始数据。

关键字: 串口 串行通信 并行通信

51 单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺...

关键字: 单片机 全双工 串口

串口是“串行接口”的简称,即采用串行通信方式的接口。串行通信将数据字节分成一位一位的形式在一条数据线上逐个传送,其特点是通信线路简单,但传输速度较慢。因此串口广泛应用于嵌入式、工业控制等领域中对数据传输速度要求不高的场合...

关键字: 串口 RS232 同步传输

串口作为单片机开发的一个常用的外设,应用范围非常广。大部分时候,串口需要接收处理的数据长度是不定的。那么怎么才能判断一帧数据是否结束呢,今天就以STM32单片机为例,介绍几种接收不定长数据的方法。

关键字: 单片机 串口 STM32

这是FPGA之旅设计的第十例啦,在上一例中,已经成功驱动了OLED屏幕,本例将结合上一例,以及第四例多bytes串口通信做一个有趣的例程。

关键字: FPGA OLED屏 串口

接下来测试烧写功能,本次采用串口和USB烧写方式。使用ISP串口烧写这是51单片机常用的方案,本次测试比较顺利,没有遇到什么问题。但是USB烧写没有测试成功,USB烧写方式不需要任何的驱动和硬件支持,直接将USB线和ST...

关键字: PCB控制板 USB 串口

摘要:多功能电能表在配电系统中应用广泛,其计量的准确度对企业管理和考核至关重要,因此在设计多功能电能表时需要对其进行校准,满足一定应用等级。常规的多功能电能表校准方法是以电能脉冲校准为主,现提出一种基于C#和功率校表法的...

关键字: 多功能电能表 串口 波特率

摘 要:为了能通过串口采集电能参数,完成一种基于串口的三相电能采集设备的研制,设计了电能采集设备的硬件和软件部分。其中硬件采用MCU+专用电能计量芯片的结构,结构简单;软件则用于实现输入、输出、三相电能参数的采集和串行通...

关键字: 电能采集 ATT7022B MSP430 串口

如何确定时基假如要测量的波特率为9600,则每一比特位的时间为:1/9600≈104μs,一般示波器横向上每个大格子里5个小格子,要想看清一比特位一般需要一个小格子就够了,则时基为:104μs*5=520μs,也就是说时...

关键字: 串口

VivadoML最新版2021下载方法:《安装Vivado2021.1ML版,编译时间真的会减少吗?》今天我们通过zedboard串口使用的实例来简单介绍vivado和vitis的使用步骤。1,首先打开软件,新建一个空白...

关键字: 串口 zedboard vi
关闭
关闭