STM32多串口开发必看:USART1正常但USART2没反应?可能是这个引脚配置细节在作怪

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初始化应该包含以下关键步骤:

  1. GPIO时钟使能(通常使用APB2)
  2. USART模块时钟使能(区分APB1/APB2)
  3. GPIO模式配置(复用推挽输出/浮空输入)
  4. USART参数配置(波特率、数据位等)
  5. 使能USART模块
  6. 中断配置(如果需要)

正确的USART2初始化示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值