单片机串口通信(UART)入门与实战

2025-09发布5次浏览

单片机串口通信,即UART(Universal Asynchronous Receiver/Transmitter)通信,是单片机应用中非常基础且重要的通信方式。UART是一种异步串行通信接口,允许单片机与其他设备(如计算机、其他单片机、传感器等)进行数据交换。UART通信的基本原理是通过两根线——一根发送线(TX)和一根接收线(RX)进行全双工通信。

基本原理

UART通信的核心是字符帧结构。一个UART字符帧通常包括以下几个部分:

  1. 起始位:一个低电平,表示数据开始传输。
  2. 数据位:通常是5到9位,表示实际传输的数据。
  3. 校验位:可选,用于错误检测。常见的校验方式有奇偶校验、无校验和CRC校验。
  4. 停止位:一个或两个高电平,表示数据结束。

初始化设置

在使用UART进行通信之前,需要对其进行初始化设置。主要包括以下几个方面:

  1. 波特率:定义数据传输的速度,常见的波特率有9600、115200等。
  2. 数据位:定义每个字符帧中的数据位数。
  3. 校验位:选择是否使用校验位以及校验方式。
  4. 停止位:定义停止位的数量,通常为1或2。
  5. 流控制:可选,用于控制数据流,防止数据丢失。

实战应用

在单片机中实现UART通信,通常需要编写相应的驱动程序。以下是一个简单的UART通信示例,假设使用的是STM32单片机。

#include "stm32f10x.h"

void UART_Init(void) {
    // 使能GPIO和USART2时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART2, ENABLE);

    // 配置GPIO
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; // USART2 TX和RX
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置USART
    USART_InitTypeDef USART_InitStructure;
    USART_InitStructure.USART_BaudRate = 9600;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
    USART_Init(USART2, &USART_InitStructure);

    // 使能USART
    USART_Cmd(USART2, ENABLE);
}

void UART_SendChar(char ch) {
    while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
    USART_SendData(USART2, ch);
}

char UART_ReceiveChar(void) {
    while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET);
    return USART_ReceiveData(USART2);
}

int main(void) {
    UART_Init();
    UART_SendChar('H');
    char received = UART_ReceiveChar();
    // 处理接收到的数据
    while (1);
}

扩展与深化

UART通信在实际应用中非常广泛,除了基本的点对点通信,还可以通过UART实现多机通信。多机通信中,通常会使用主从结构,其中一台单片机作为主设备,其他单片机作为从设备。主设备通过UART发送指令,从设备根据指令执行相应的操作。

此外,UART通信还可以与其他通信协议结合使用,如I2C、SPI等,实现更复杂的数据交换。在高速数据传输场景下,UART的波特率可以达到数Mbps,但此时需要考虑信号完整性和抗干扰能力。

UART通信的调试也是单片机应用中的一个重要环节。常用的调试工具包括串口调试助手,通过计算机的串口与单片机的UART接口连接,可以实时查看单片机发送和接收的数据,便于调试和问题定位。