PAGE1
PAGE1
TivaC系列UART通信
1.UART通信基础
1.1UART通信简介
UART(UniversalAsynchronousReceiver-Transmitter)是一种串行通信接口,用于在设备之间传输数据。UART通信的特点是异步传输,即不需要同步时钟信号来协调数据的发送和接收。数据的传输是通过一个起始位、一个或多个数据位、一个可选的奇偶校验位和一个停止位来完成的。这些位的组合称为一个帧。
1.2UART通信帧结构
一个典型的UART通信帧结构如下:
起始位:通常是一个低电平(0),表示数据传输的开始。
数据位:通常为5到8位,具体取决于配置。
奇偶校验位:可选,用于检测传输错误。可以是偶校验、奇校验或无校验。
停止位:通常是一个高电平(1),表示数据传输的结束。可以是1位、1.5位或2位。
1.3UART通信波特率
波特率是UART通信中数据传输速率的单位,表示每秒传输的位数。常见的波特率有9600、19200、38400、57600和115200等。波特率需要在发送和接收设备之间进行匹配,否则会导致数据传输错误。
2.TivaC系列UART配置
2.1UART模块概述
TivaC系列单片机集成了多个UART模块,每个模块都有独立的寄存器组,可以通过编程进行配置。TivaC系列的UART模块支持全双工通信,即可以同时进行数据的发送和接收。
2.2配置UART模块
配置UART模块通常需要以下步骤:
使能UART模块:通过系统控制模块(SystemControl)使能UART模块的时钟。
配置GPIO引脚:将GPIO引脚配置为UART功能。
配置UART参数:设置波特率、数据位、奇偶校验位和停止位。
使能UART中断:如果需要中断处理,使能相应的中断。
初始化UART模块:完成上述配置后,初始化UART模块。
2.2.1使能UART模块
使能UART模块的时钟可以通过SystemControl模块的寄存器进行配置。例如,使能UART0模块的时钟:
//使能UART0模块的时钟
SYSCTL_RCGCUART_R|=SYSCTL_RCGCUART_R0;
while((SYSCTL_RCGCUART_RSYSCTL_RCGCUART_R0)==0){
//等待时钟使能
}
2.2.2配置GPIO引脚
将GPIO引脚配置为UART功能需要通过GPIO模块的寄存器进行设置。例如,配置PA0和PA1引脚为UART0的TX和RX引脚:
//使能端口A的时钟
SYSCTL_RCGCGPIO_R|=SYSCTL_RCGCGPIO_R0;
while((SYSCTL_RCGCGPIO_RSYSCTL_RCGCGPIO_R0)==0){
//等待时钟使能
}
//配置PA0和PA1为UART0的TX和RX引脚
GPIO_PORTA_AFSEL_R|=(10)|(11);//选择GPIO复用功能
GPIO_PORTA_PCTL_R=(GPIO_PORTA_PCTL_R~(GPIO_PCTL_PA0_M|GPIO_PCTL_PA1_M))|
(GPIO_PCTL_PA0_U0TX|GPIO_PCTL_PA1_U0RX);//配置复用功能
GPIO_PORTA_DEN_R|=(10)|(11);//启用数字功能
GPIO_PORTA_DIR_R|=(10);//设置PA0为输出(TX)
2.2.3配置UART参数
配置UART参数包括设置波特率、数据位、奇偶校验位和停止位。例如,配置UART0模块的波特率为9600,8位数据位,无奇偶校验位,1位停止位:
//配置UART0模块
UART0_CTL_R=~UART_CTL_UARTEN;//禁用UART0模块
UART0_IBRD_R=500;//整数波特率除数
UART0_FBRD_R=44;//分数波特率除数
UART0_LCRH_R=UART_LCRH_WLEN_8|UART_LCRH_FEN;//8位数据,使能FIFO
UART0_CTL_R|=UART_CTL_UARTEN|UART_CTL_TXE|UART_CTL_RXE;//使能UART0模块,启用TX和RX
2.2.4使能UART中断
如果需要中断处理,可以通过配置UART模块的中断寄存器来使能相应的中断。例如,使能UART0模块的接收中断:
//使能UART0模块的接收中断
UA