forgot 发表于 2025-4-30 11:45

JTAG脚用作普通GPIO

将JTAG引脚用作普通IO时,需要通过复用功能重映射来释放调试接口占用的引脚资源。
void JTAG_To_GPIO_Config(void)
{
    // 关闭JTAG功能(保留SWD调试接口)
    AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;

    // 配置释放的JTAG引脚为普通IO
    // PA13/PA14/PA15配置
    GPIO_InitTypeDef GPIO_InitStruct = {0};
   
    // PA13 -> 输出模式
    GPIO_InitStruct.Pin = GPIO_PIN_13;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
   
    // PA14 -> 输入模式带上拉
    GPIO_InitStruct.Pin = GPIO_PIN_14;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
   
    // PB3 -> 复用功能(如SPI1_SCK)
    GPIO_InitStruct.Pin = GPIO_PIN_3;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;      // 复用推挽输出
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}完全禁用SWD后,将无法通过调试器更新程序
建议保留SWD功能(AFIO_MAPR_SWJ_CFG_JTAGDISABLE)
若必须禁用所有调试接口,需保留BOOT0引脚用于ISP编程

10299823 发表于 2025-5-3 23:47

在特定情况下可以当作普通 GPIO

uptown 发表于 2025-5-4 01:04

优先使用SWD替代JTAG            

olivem55arlowe 发表于 2025-5-4 02:37

通过GPIO_PinRemapConfig函数关闭JTAG调试端口,释放引脚

wyde518 发表于 2025-5-4 10:53

可以完全禁用SWD,但必须利用复位脚,程序上电后增加一定延时

iyoum 发表于 2025-5-4 19:47

在资源受限的设计中,如果I/O资源紧张且JTAG功能不是必需的,复用JTAG引脚可能是一个合理的选择。

mmbs 发表于 2025-5-6 09:39

部分芯片的JTAG引脚可能与其他功能复用(如USART、TIM),需检查数据手册。

linfelix 发表于 2025-5-6 11:37

AFIO 时钟是配置引脚重映射的前提

plsbackup 发表于 2025-5-6 13:25

可能需要额外的配置来重映射这些引脚作为GPIO使用。

updownq 发表于 2025-5-6 15:15

使用ST-Link Utility等工具强制重新启用JTAG模式

elsaflower 发表于 2025-5-6 17:23

后续能通过SWD重新烧录程序。            

qiufengsd 发表于 2025-5-6 19:11

避免在原理图上将JTAG引脚作为固定拉高/拉低或连接其他信号,否则可能导致引脚状态冲突

uytyu 发表于 2025-5-6 21:28

在进行引脚功能切换之前,要检查硬件连接
页: [1]
查看完整版本: JTAG脚用作普通GPIO