0°

stm32f103出现 hal库PB3,PB4复用JTAG,导致连线到LED灯无法使用

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工具进行调试的能力。
  • 在更改硬件配置后,一定要检查与这些引脚相关的其他功能是否受到影响。
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论