STM32F401RCT6(黑pill)USART1串口通信故障求助
STM32F401RCT6 USART1 串口发送失败排查方案
硬件排查步骤
- 确认引脚连接:USART1 TX对应PA9,需连接到USB转串口模块的RX引脚(交叉连接),同时必须保证开发板与PC端串口模块共地,否则信号无法正常传输。
- 测试线路连通性:用万用表二极管档检测PA9引脚到USB转串口RX引脚的通路,排除虚焊、线路断裂问题。
- 检查USB转串口模块:换一个已知正常的USB转串口模块测试,排除模块损坏可能。
软件配置检查
时钟配置
- 必须确保USART1和GPIOA的时钟已正确使能:
标准库示例:
HAL库示例:RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);__HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_USART1_CLK_ENABLE();
GPIO复用配置
- PA9需配置为复用推挽输出,并正确映射到USART1:
标准库示例:
注意:不要将PA9配置为普通GPIO输出模式,必须启用复用功能。GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; // 可选上拉,增强信号稳定性 GPIO_Init(GPIOA, &GPIO_InitStruct); // 关键:配置引脚复用映射 GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
USART初始化参数
- 确保波特率、数据位、停止位、校验位与PC端串口工具完全一致,示例配置(9600波特率、8N1):
标准库示例:USART_InitTypeDef USART_InitStruct; USART_InitStruct.USART_BaudRate = 9600; 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_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init(USART1, &USART_InitStruct); // 最后必须启用USART1 USART_Cmd(USART1, ENABLE);
发送逻辑检查
- 发送数据时必须等待发送完成标志,避免数据未发送就退出:
标准库单字节发送示例:void USART1_SendChar(uint8_t ch) { // 等待发送寄存器为空 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, ch); // 等待发送完成(可选,但确保数据完全发出) while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); }
额外排查点
- 检查开发板电源:确保3.3V供电稳定,避免因电压不足导致外设工作异常。
- 复位程序:重新烧录程序并复位开发板,排除程序运行异常。
- 引脚冲突:确认PA9未被其他外设占用(比如定时器复用功能)。
若以上步骤无法解决问题,请提供你的时钟初始化、GPIO配置、USART初始化及发送数据的完整代码片段,以便进一步定位问题。
内容的提问来源于stack exchange,提问作者محمود أحمد
相关产品推荐
相关产品推荐

