1. 串口引脚

STM32的串口(USART/UART)是其与外部设备进行数据通信的核心外设之一。下面将详细介绍STM32常见型号的串口引脚定义、配置方法及使用要点。

1.1. 📍 一、STM32串口引脚定义

STM32芯片通常提供多个串口(如USART1、USART2、USART3、UART4、UART5等),每个串口至少包含两个关键引脚:

  • ​TX(发送引脚)​​:用于数据输出,需连接至外部设备的RX引脚。

  • ​RX(接收引脚)​​:用于数据输入,需连接至外部设备的TX引脚。

以STM32F103系列(大容量型号)为例,其串口引脚分配如下:

在这里插入图片描述

​注意​​:

  • 部分引脚支持​​重映射功能​​(如USART1的TX可重映射至PB6,RX至PB7),需参考芯片数据手册配置。

  • 不同STM32系列(如F1/F4/H7)的引脚可能略有差异,应以具体型号的参考手册为准。

1.2. 🔧 二、串口的使用方法

使用串口需完成硬件连接和软件配置两大步骤。

1.2.1. 硬件连接
  • ​基本连接​​:将STM32的TX引脚连接至外部设备(如USB转TTL模块、传感器)的RX引脚,STM32的RX引脚连接至外部设备的TX引脚,并确保共地(GND连接)。

  • ​电平匹配​​:若外部设备为RS232电平(如PC串口),需使用电平转换芯片(如MAX232);若为3.3V TTL电平(如多数模块),可直接连接。

1.2.2. 软件配置步骤(以HAL库为例)

以下是配置串口的通用流程:

​步骤1:使能时钟​

  • 使能串口所属的总线时钟(如USART1属于APB2,USART2/3属于APB1)。

  • 使能对应GPIO端口的时钟。

​步骤2:配置GPIO引脚​

  • 将TX引脚设置为​​复用推挽输出​​(GPIO_Mode_AF_PP),RX引脚设置为​​浮空输入​​(GPIO_Mode_IN_FLOATING)。

​步骤3:初始化串口参数​

关键参数包括:

  • ​波特率​​:常见值有9600、115200等,需与通信双方一致。

  • ​数据位​​:通常为8位。

  • ​停止位​​:通常为1位。

  • ​奇偶校验​​:无校验(Parity_None)、奇校验或偶校验。

  • ​流控制​​:若无硬件流控,设为None。

​步骤4(可选):配置中断/DMA​

  • 若需实时接收数据,可使能接收中断(如RXNE中断)或使用DMA减少CPU开销。

​步骤5:使能串口​

  • 调用使能函数(如USART_Cmd()HAL_UART_Init())启动串口。
1.2.3. 代码示例(STM32F103 USART1初始化)

// 1. 时钟使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

  

// 2. GPIO配置

GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;  // TX

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStruct);

  

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; // RX

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStruct);

  

// 3. 串口参数配置

USART_InitTypeDef USART_InitStruct;

USART_InitStruct.USART_BaudRate = 115200;

USART_InitStruct.USART_WordLength = USART_WordLength_8b;

USART_InitStruct.USART_StopBits = USART_StopBits_1;

USART_InitStruct.USART_Parity = USART_Parity_No;

USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

USART_Init(USART1, &USART_InitStruct);

  

// 4. 使能串口

USART_Cmd(USART1, ENABLE);

1.2.4. 数据收发操作
  • ​发送数据​​:调用库函数(如USART_SendData())或使用DMA。

  • ​接收数据​​:可采用轮询方式(检查RXNE标志)或中断方式(更高效)。

​实用技巧:重定向printf用于调试​

通过重写fputc函数,可直接使用printf打印调试信息:


#include <stdio.h>

int fputc(int ch, FILE *f) {

    HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 1000); // 发送至USART1

    return ch;

}

// 此后可直接调用:printf("当前温度:%d℃\r\n", temp);

1.3. ⚠️ 三、常见问题与注意事项

  1. ​波特率不匹配​​:确保STM32与外部设备的波特率、数据位、停止位等参数完全一致,否则会出现乱码。

  2. ​引脚配置错误​​:TX和RX需交叉连接,而非直连。

  3. ​中断未正确使能​​:若使用中断接收,需在初始化后调用中断使能函数(如USART_ITConfig()),并在中断服务函数中处理数据。

  4. ​电源和接地​​:务必共地,否则信号可能失真。

  5. ​使用工具辅助调试​​:可借助串口助手软件(如XCOM、SecureCRT)或逻辑分析仪检查数据波形。

1.4. 💎 总结

STM32的串口引脚需根据具体型号查询数据手册确定,使用时通过配置GPIO和串口参数实现通信。关键步骤包括:正确连接硬件、设置波特率、选择数据帧格式,并根据需求选择轮询、中断或DMA方式收发数据。掌握这些基础后,可进一步探索多串口协同、高速通信(如RS485)等进阶应用。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐