STM32多串口开发陷阱:USART2失效的时钟配置真相
第一次在STM32上同时使用USART1和USART2时,我遇到了一个诡异的现象——USART1工作正常,但USART2死活没反应。调试了整整两天,最后发现竟然是时钟树配置上栽了跟头。这种问题特别具有迷惑性,因为代码编译不报错,硬件连接也没问题,但功能就是无法实现。本文将深入剖析这个典型问题,帮助开发者避开这个坑。
1. 多串口开发中的时钟陷阱
STM32的USART模块分布在不同的APB总线上,这是许多开发者容易忽略的关键细节。以STM32F103C8T6为例:
- USART1挂在APB2总线
- USART2/USART3挂在APB1总线
时钟使能函数的差异:
// USART1 (APB2) 的正确时钟使能方式
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
// USART2 (APB1) 的正确时钟使能方式
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
常见错误是把USART2也使用APB2的时钟使能函数,这种错误在复制粘贴代码时特别容易发生。编译器不会报错,因为函数原型和参数类型都是合法的,但功能就是无法实现。
2. 完整的多串口初始化流程
一个健壮的USART初始化应该包含以下关键步骤:
- GPIO时钟使能(通常使用APB2)
- USART模块时钟使能(区分APB1/APB2)
- GPIO模式配置(复用推挽输出/浮空输入)
- USART参数配置(波特率、数据位等)
- 使能USART模块
- 中断配置(如果需要)
正确的USART2初始化示


1494

被折叠的 条评论
为什么被折叠?



