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

