PAGE1
PAGE1
串行通信接口(UART,SPI,I2C)
1.UART接口
1.1UART基本原理
UART(UniversalAsynchronousReceiver/Transmitter)是一种通用的异步串行通信接口。它主要用于实现设备之间的数据传输,如单片机与计算机、单片机与传感器等。UART通信的基本原理是通过发送和接收数据线(TX和RX)进行单向或双向通信。通信双方需要约定波特率、数据位、停止位和校验位等参数。
UART通信的主要特点包括:
异步通信:不需要时钟信号同步,通过起始位和停止位来标识数据帧。
波特率:通信速率,常用的波特率包括9600、115200等。
数据帧:一个数据帧通常包括起始位、数据位、校验位(可选)和停止位。
全双工通信:可以同时进行发送和接收数据。
1.2UART配置
在NXP系列单片机中,UART接口的配置主要通过寄存器操作来实现。以下是一个典型的UART配置步骤:
使能UART时钟:通过SCS寄存器使能UART时钟。
配置波特率:通过DLL和DLM寄存器配置波特率。
配置数据帧:通过LCR寄存器配置数据位、停止位和校验位。
使能UART传输和接收:通过IER寄存器使能UART传输和接收中断。
初始化FIFO:通过FCR寄存器配置FIFO模式。
写入数据:通过THR寄存器写入要发送的数据。
读取数据:通过RBR寄存器读取接收到的数据。
1.3UART代码示例
以下是一个在NXP系列单片机上配置和使用UART接口的代码示例。假设我们使用UART0进行通信,波特率为115200,8位数据位,1位停止位,无校验位。
#includeLPC17xx.h
//定义UART0的寄存器基地址
#defineUART0_BASE0x4000C000
#defineLPC_UART0((LPC_UART_TypeDef*)UART0_BASE)
//配置UART0
voidUART0_Init(uint32_tbaudrate){
//使能UART0时钟
LPC_SC-PCONP|=(112);//PCONP[12]:UART0时钟使能
LPC_SC-PCLKSEL0=~(324);//PCLKSEL0[26:24]:选择PCLK时钟源为CCLK(00)
LPC_SC-PCLKSEL0|=(124);//PCLKSEL0[26:24]:选择PCLK时钟源为CCLK(01)
//配置UART0端口
LPC_PINCON-PINSEL0=~(34);//清除P0.2端口功能选择
LPC_PINCON-PINSEL0|=(14);//设置P0.2为UART0_TXD
LPC_PINCON-PINSEL0=~(36);//清除P0.3端口功能选择
LPC_PINCON-PINSEL0|=(16);//设置P0.3为UART0_RXD
//计算波特率
uint32_tPCLK=SystemCoreClock/2;//PCLK为CCLK的一半
uint32_tDLM=(PCLK/16)/baudrate;
uint32_tDLL=DLM0xFF;
uint32_tLCR=0x80;//使能DLAB,允许访问DLL和DLM寄存器
LPC_UART0-LCR=LCR;//设置LCR寄存器
LPC_UART0-DLM=(DLM8)0xFF;//设置DLM寄存器
LPC_UART0-DLL=DLL;//设置DLL寄存器
//配置数据帧
LCR=0x03;//8位数据位,1位停止位,无校验位
LPC_UART0-LCR=LCR;//设置LCR寄存器
//初始化FIFO
LPC_UART0-FCR=0x07;//使能FIFO,清空FIFO,设置触发点为1字节
//使能UART0传输和接收
LPC_UART0-IER=0x01;//使能接收数据可用中