You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F103C8T6的PB3、PB4引脚失效问题求助

STM32F103C8T6 PB3/PB4引脚无输出的原因解析

问题场景

在CubeIDE中将STM32F103C8T6的PB3、PB4配置为普通输出模式后,运行以下测试代码发现这两个引脚无高低电平输出,但PB5-PB7工作正常,更换芯片后问题依然存在:

while (1)
{
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);
  HAL_Delay (1000);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);
  HAL_Delay (1000);
}

添加以下代码后问题解决:

__HAL_RCC_AFIO_CLK_ENABLE();
__HAL_AFIO_REMAP_SWJ_NOJTAG();

技术原因解析

  1. PB3/PB4的默认复用绑定
    STM32F103系列芯片的PB3、PB4引脚默认被分配给JTAG调试功能:
  • PB3对应JTAG的JTDO(测试数据输出)引脚
  • PB4对应JTAG的NJTRST(测试复位)引脚
    芯片上电后,这两个引脚会自动进入JTAG复用模式,优先级高于普通GPIO配置,因此即使在CubeIDE中设置为普通输出,引脚也会被JTAG功能占用,无法正常输出电平。
  1. 解决代码的作用
  • __HAL_RCC_AFIO_CLK_ENABLE();:AFIO(复用功能IO)外设负责引脚复用映射的配置,必须先开启其时钟,才能对引脚的复用模式进行修改。
  • __HAL_AFIO_REMAP_SWJ_NOJTAG();:该宏将SWJ调试接口切换为仅保留SWD模式,禁用JTAG模式。执行此配置后,PB3和PB4的JTAG复用绑定被解除,引脚回归普通GPIO功能,此时才能按照你的配置输出高低电平。
  1. 更换芯片无效的原因
    所有STM32F103C8T6芯片的默认引脚复用配置是硬件固化的,上电后PB3/PB4都会默认绑定JTAG功能,因此更换芯片无法解决问题,这属于芯片的默认行为而非硬件故障。

内容的提问来源于stack exchange,提问作者Maxim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:32:39