当STM32引脚不行用时,能够分配JTAG/SWD的引脚作为GPIO口运用。
检查数据手册的引脚界说能够看到,PA15引脚复位后的主要功能为JTDI,PB3为JTDO,PB4为JNTRST,如果把这些引脚作为一般引脚运用时,需求进行重映射。

经过设置复用重映射和调试I/O装备寄存器(AFIO_MAPR)的SWJ_CFG[2:0]位,装备为“启用SW-DP,封闭JTAG-DP”来开释PA15(JTDI), PB3(JTDO), PB4(NJTRST)引脚。详见中文参考手册V10.2版别p118 表35 调试端口映像。

库文件中几个相关的宏界说分别为:
#defineGPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */ // 彻底SWJ(JTAG-DP + SW-DP),但没有JNTRST
#defineGPIO_Remap_SWJ_JTAGDisable((uint32_t)0x00300200) /*!< JTAG-DP Disabled and SW-DP Enabled */ // 封闭JTAG-DP,启用SW-DP
#defineGPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */ // 封闭JTAG-DP,封闭SW-DP
别的,留意PB3的脚注,“I/O口只可在不运用异步盯梢时运用”,详见中文参考手册V10.2版别p748 29.16.3 调试MCU装备寄存器。
DBGMCU_CR寄存器的bit7:5(TRACE_MODE[1:0]和TRACE_IOEN),装备TRACE_IOEN=0,不分配盯梢引脚。见下表。

相关代码:
DBGMCU->CR = DBGMCU->CR & ~((uint32_t)1<<5); // 不分配盯梢引脚,开释PB3
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); // 使能复用时钟和引脚GPIO时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); // 切换到SWJ调试,开释PA15,PB4, PB3