基本信息
文件名称:Microchip 系列:AVR 系列 (基于 ATmega328P)_10.USART通信.docx
文件大小:25.49 KB
总页数:23 页
更新时间:2025-06-17
总字数:约1.12万字
文档摘要

PAGE1

PAGE1

10.USART通信

10.1USART概述

USART(UniversalSynchronousandAsynchronousReceiverandTransmitter)是通用同步和异步收发器,是AVR单片机中一个重要的通信模块。USART可以实现单片机与外部设备之间的串行通信,支持多种通信格式,包括异步通信(如常见的RS-232和RS-485)和同步通信(如SPI和I2C)。在本节中,我们将详细探讨基于ATmega328P的USART通信原理和应用。

10.1.1USART的基本功能

USART的主要功能包括:

异步通信:通过UART协议实现数据的发送和接收。

同步通信:通过SPI协议实现数据的同步传输。

多处理器通信:支持多个处理器之间的通信。

波特率设置:可以设置通信的波特率以适应不同的通信速率。

数据帧格式:可以设置数据帧的格式,包括数据位、停止位和奇偶校验位。

10.1.2USART的工作模式

USART支持以下几种工作模式:

异步模式:数据以非同步的方式传输,通常用于与PC或其他设备的通信。

同步模式:数据以同步的方式传输,通常用于与SPI设备的通信。

多处理器模式:允许多个处理器共享同一总线进行通信。

异步模式下的双倍速模式:提高通信速率,适用于高波特率通信。

10.2异步通信

10.2.1异步通信的基本原理

异步通信使用UART协议,通过TXD和RXD两个引脚进行数据的发送和接收。在异步通信中,数据帧通常包括起始位、数据位、奇偶校验位和停止位。起始位为低电平,表示数据帧的开始;数据位为实际传输的数据;奇偶校验位用于校验数据的正确性;停止位为高电平,表示数据帧的结束。

10.2.2异步通信的配置

在ATmega328P中,USART的配置主要通过以下几个寄存器完成:

UCSRB:USART控制和状态寄存器B,用于启用发送和接收功能。

UCSRC:USART控制和状态寄存器C,用于设置通信模式和数据帧格式。

UBRRH和UBRRL:波特率寄存器,用于设置通信速率。

UDR:USART数据寄存器,用于发送和接收数据。

10.2.2.1配置波特率

波特率的设置是通过公式计算的:

UBRR

其中,FCPU

10.2.2.2配置数据帧格式

数据帧格式可以通过UCSRC寄存器设置,常见的格式包括:

8位数据位

1位停止位

无奇偶校验

10.2.3代码示例

以下是一个配置USART并实现简单串口通信的例子:

#includeavr/io.h

#includeutil/setbaud.h

//初始化USART

voidUSART_Init(unsignedintbaud){

//设置波特率

UBRRH=(unsignedchar)(baud8);

UBRRL=(unsignedchar)baud;

//启用接收和发送

UCSR0B=(1RXEN0)|(1TXEN0);

//设置数据帧格式:8位数据位,1位停止位,无奇偶校验

UCSR0C=(1UCSZ01)|(1UCSZ00);

}

//发送一个字符

voidUSART_Transmit(chardata){

//等待数据寄存器为空

while(!(UCSR0A(1UDRE0))){}

//发送数据

UDR0=data;

}

//接收一个字符

charUSART_Receive(void){

//等待数据到达

while(!(UCSR0A(1RXC0))){}

//读取数据

returnUDR0;

}

intmain(void){

//设置波特率为9600

USART_Init(103);//103=/(16*9600))-1

//无限循环

while(1){

//接收字符

charreceived_data=USART_Receive();

//发送接收到的字符

USART_Transmit(received_data);

}

}

10.2.4代码解释

USART_Init函数:

UBRRH和UBRRL用于设置波特率寄存器。

UCSR0B寄存器启用接收(RXEN0)和发送(TXEN0)功能。