PAGE1
PAGE1
LPC15xx系列UART通信
1.UART通信概述
1.1UART通信的基本概念
UART(UniversalAsynchronousReceiver/Transmitter)是一种通用异步收发传输器,用于实现设备之间的串行通信。UART通信是一种半双工通信方式,即在同一时间内只能进行单向通信。然而,通过交替使用发送和接收功能,可以实现全双工通信。UART通信的特点是没有时钟信号同步,而是通过起始位、停止位和波特率来实现数据的同步传输。
1.2UART通信的物理层
UART通信使用两条信号线:Tx(传输线)和Rx(接收线)。在单片机之间,Tx线通常连接到另一个设备的Rx线,Rx线连接到另一个设备的Tx线。此外,UART通信还可以使用第三条线(RTS/CTS)来实现硬件流控制,以防止数据丢失。
1.3UART通信的数据格式
UART通信的数据格式通常包括以下几个部分:
起始位:表示数据传输开始的标志位,通常为低电平。
数据位:实际传输的数据,可以是5位、6位、7位或8位。
奇偶校验位:用于检测数据传输错误的位,可以是无校验、奇校验或偶校验。
停止位:表示数据传输结束的标志位,通常为高电平,可以是1位、1.5位或2位。
2.LPC15xx系列UART模块介绍
2.1UART模块的功能
LPC15xx系列单片机集成了多个UART模块,每个模块都支持以下功能:
异步通信:支持标准的UART异步通信。
可配置的数据格式:可以配置数据位、奇偶校验位和停止位。
可配置的波特率:支持多种波特率设置,以适应不同的通信需求。
硬件流控制:支持RTS/CTS硬件流控制。
中断和DMA支持:支持中断和DMA传输,以提高通信效率。
多模式支持:支持IrDA、SmartCard等多种通信模式。
2.2UART模块的寄存器
LPC15xx系列UART模块的主要寄存器包括:
LSR(LineStatusRegister):线路状态寄存器,用于检测接收缓冲区状态、发送缓冲区状态、错误状态等。
THR(TransmitHoldingRegister):发送保持寄存器,用于存储要发送的数据。
RBR(ReceiveBufferRegister):接收缓冲寄存器,用于存储接收到的数据。
IER(InterruptEnableRegister):中断使能寄存器,用于使能或禁止各种中断。
FCR(FIFOControlRegister):FIFO控制寄存器,用于配置FIFO的使能和模式。
LCR(LineControlRegister):线路控制寄存器,用于配置数据位、奇偶校验位和停止位。
DLL(DivisorLatchLowByte)和DLH(DivisorLatchHighByte):波特率除数寄存器,用于设置波特率。
3.配置UART模块
3.1初始化UART模块
在使用UART模块之前,需要进行初始化配置。以下是一个初始化UART模块的步骤:
配置系统时钟:设置UART模块的时钟源。
配置波特率:根据所需的通信速率计算波特率除数。
配置数据格式:设置数据位、奇偶校验位和停止位。
使能UART模块:启用UART模块。
配置中断:如果需要中断处理,配置中断使能寄存器。
配置FIFO:如果需要使用FIFO,配置FIFO控制寄存器。
3.2示例代码:初始化UART
以下是一个初始化UART模块的示例代码,假设使用LPC1517芯片,配置为8位数据、无奇偶校验、1位停止位,波特率为115200。
#includeLPC15xx.h
#defineUART_BAUD_RATE115200
#defineUART_CLOCK_RATE//假设系统时钟为48MHz
voidUART_Init(uint32_tbaud_rate){
//使能UART时钟
LPC_CCU1-CLK_U0_UART_CFG=1|(124);//使能UART0时钟
while(!(LPC_CCU1-CLK_U0_UART_STAT(10))){
//等待时钟稳定
}
//配置波特率
uint32_tdivisor=(UART_CLOCK_RATE/16)/baud_rate;
LPC_USART0-LCR=0x83;//设置8位数据、无奇偶校验、1位停止位,并允许访问除数寄存器
LPC_USART0-DLL=(uint8_t)divisor;//设置低字节
LPC_USA