STM32F103系列微控制器的PB3和PB4引脚默认配置为JTAG调试接口的一部分,其中PB3为JTDO(JTAG数据输出)和PB4为NJTRST(JTAG非掩码复位)。这就意味着如果您想使用这两个引脚来驱动LED或其他通用目的的输出,首先需要将它们从JTAG功能中解脱出来,配置为普通的GPIO引脚。
要使PB3和PB4能够用作常规的I/O引脚,您需要禁用JTAG或者仅启用SWD(串行线调试),这样可以释放这两个引脚。下面是在STM32 HAL库中进行这一配置的方法:
步骤一:修改系统初始化代码
通常在系统启动时,通过调用HAL_MspInit()
函数来配置系统级别的硬件设置。要修改这些设置,需要更改此函数中的JTAG/SWD配置。在STM32CubeMX生成的代码中,或者您自己手写的初始化代码中找到HAL_MspInit()
,并确保JTAG被禁用或改为仅使用SWD。
以下是一个修改示例,仅启用SWD并禁用JTAG:
void HAL_MspInit(void)
{
__HAL_RCC_AFIO_CLK_ENABLE(); // 启用AFIO时钟
__HAL_AFIO_REMAP_SWJ_NOJTAG(); // 重新映射SWJ,禁用JTAG,仅使能SWD
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
// 其他系统级初始化
}
步骤二:配置PB3和PB4作为GPIO输出
在禁用了JTAG后,您就可以将PB3和PB4配置为通用输出模式了。这通常在初始化这两个引脚的GPIO时完成:
void GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOB_CLK_ENABLE(); // 启用GPIOB时钟
// 初始化PB3和PB4
GPIO_InitStruct.Pin = GPIO_PIN_3 | GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// 其他引脚的配置
}
验证
在应用了上述更改后,重新编译并下载程序到您的STM32F103设备上。这样,PB3和PB4就应该可以正常作为GPIO引脚使用,驱动LED灯或执行其他任务。
注意事项
- 确保您的开发环境支持修改。如果使用STM32CubeMX,检查引脚配置是否正确。
- 重新映射后,PB3和PB4引脚相关的JTAG功能将不可用,这可能会影响使用标准JTAG工具进行调试的能力。
- 在更改硬件配置后,一定要检查与这些引脚相关的其他功能是否受到影响。