PAGE1
PAGE1
LPC2000系列UART通信
1.UART通信基础
1.1UART通信原理
UART(UniversalAsynchronousReceiver/Transmitter,通用异步收发传输器)是一种串行通信接口,允许两个设备之间进行异步数据传输。UART通信的关键特点是:
异步通信:发送和接收数据时不使用时钟信号,而是通过起始位和停止位来同步数据。
全双工通信:支持同时发送和接收数据。
简单的硬件实现:相比于其他通信接口,UART的硬件实现较为简单,通常只需要两根线(TX和RX)即可完成通信。
在LPC2000系列单片机中,UART模块通常包含多个独立的UART通道,每个通道都可以独立配置和使用。LPC2000系列单片机的UART模块支持多种通信参数设置,包括波特率、数据位、停止位和校验位等。
1.2UART通信参数
波特率:通信速率,单位为bps(bitspersecond)。常见的波特率有9600、19200、38400、57600和115200等。
数据位:每个字符传输的数据位数,通常为5到8位。
停止位:每个字符传输结束时的停止位,可以设置为1位或2位。
校验位:用于检测数据传输错误的位,可以设置为无校验、奇校验或偶校验。
1.3LPC2000系列中的UART模块
LPC2000系列单片机中的UART模块通常包括以下寄存器:
数据寄存器(RBR/THR):接收缓冲寄存器(RBR)用于接收数据,发送保持寄存器(THR)用于发送数据。
状态寄存器(LSR):包含UART的状态信息,如接收缓冲器是否为空、发送保持寄存器是否为空等。
控制寄存器(LCR):用于配置数据位、停止位和校验位等。
波特率寄存器(DLL/DLH):用于设置波特率。
线控制寄存器(FDR):用于配置分数波特率。
中断使能寄存器(IER):用于启用或禁用UART中断。
中断标识寄存器(IIR):用于识别当前中断的类型。
波特率除法器寄存器(DLM/DLL):用于设置波特率的整数部分和小数部分。
2.初始化UART
2.1配置引脚
在使用UART之前,需要先配置相关的引脚。LPC2000系列单片机中的引脚配置通常通过PINSEL寄存器完成。例如,假设我们要使用UART0的TX和RX引脚,它们通常映射到P0.2和P0.3:
//配置UART0的TX和RX引脚
PINSEL0|=(14)|(16);//P0.2和P0.3配置为UART0的TX和RX
2.2设置波特率
波特率的设置是UART通信中最重要的一步。LPC2000系列单片机的UART模块通过DLM和DLL寄存器来设置波特率。波特率计算公式如下:
波特率
其中,PCLK是外设时钟频率,DLM和DLL是波特率除法器寄存器的高8位和低8位。
例如,假设我们使用115200bps的波特率,且PCLK为12MHz:
//设置UART0的波特率为115200bps
#definePCLK
#defineBAUD_RATE115200
//计算波特率除法器的值
uint32_tdivisor=PCLK/(16*BAUD_RATE);
U0DLL=(uint8_t)(divisor0xFF);//设置DLL寄存器
U0DLM=(uint8_t)((divisor8)0xFF);//设置DLM寄存器
2.3配置数据格式
数据格式的配置包括数据位、停止位和校验位的设置。这些配置通过LCR寄存器完成。例如,设置8位数据、1位停止位、无校验位:
//配置UART0的数据格式
U0LCR=(10)|(11)|(32);//8位数据、1位停止位、无校验位
2.4使能UART
完成引脚配置、波特率设置和数据格式配置后,需要使能UART模块。这通常通过设置LCR寄存器的第7位来完成:
//使能UART0
U0LCR|=(17);//设置DLAB位,使能UART
2.5启用中断
如果需要使用中断来处理UART通信,可以通过IER寄存器启用相应的中断。例如,启用接收中断和发送中断:
//启用UART0的接收中断和发送中断
U0IER=(10)|(11);//启用接收中断和发送中断
3.UART数据收发
3.1发送数据
发送数据时,需要将数据写入THR寄存器。在写入数据之前,应检查发送保持寄存器是否为空,以避免数据覆盖。例如,发送一个字符:
//发送一个字符
voidUART0_SendChar(charch){
while(!(U0LSR(