嵌入式基础-串口引脚定义、配置
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. ⚠️ 三、常见问题与注意事项
-
波特率不匹配:确保STM32与外部设备的波特率、数据位、停止位等参数完全一致,否则会出现乱码。
-
引脚配置错误:TX和RX需交叉连接,而非直连。
-
中断未正确使能:若使用中断接收,需在初始化后调用中断使能函数(如
USART_ITConfig()),并在中断服务函数中处理数据。 -
电源和接地:务必共地,否则信号可能失真。
-
使用工具辅助调试:可借助串口助手软件(如XCOM、SecureCRT)或逻辑分析仪检查数据波形。
1.4. 💎 总结
STM32的串口引脚需根据具体型号查询数据手册确定,使用时通过配置GPIO和串口参数实现通信。关键步骤包括:正确连接硬件、设置波特率、选择数据帧格式,并根据需求选择轮询、中断或DMA方式收发数据。掌握这些基础后,可进一步探索多串口协同、高速通信(如RS485)等进阶应用。
更多推荐



所有评论(0)