stm32 怎样释放pa15,pb3,pb4作为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
stm32gpio 相关文章:
- STM32 GPIO使用步骤 ST3.0.0库(12-03)
- STM32 GPIO 配置(12-03)
- STM32的GPIO设置(12-03)
- STM32学习之路(三)——GPIO+USART联调(12-02)
- STM32 GPIO设置(12-02)
- STM32 GPIO 相关寄存器(二)(11-29)