昨晚调板子发现同一组LED灯,接在引脚上唯独配置在PB4引脚上的那个LED一直保持1.65V半亮半不亮的状态。查了半天电路图未果之后,PB4旁边的NJTRST引起了我的注意。一查定义发现是JTAG的一个功能引脚,瞬间明白是怎么回事了,应该是功能引脚没禁用的锅。
STM32的PB4这个IO口可以作为GPIO驱动LED,但是根据手册,这该引脚复用功能默认为JNTRST,而禁用JTAG服用只用简单的一句
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
就好了。但是这里需要注意的是如果你用的是SWD或者JTAG调试的话禁掉这些口就没法调试了,而且还没法通过这些接口重新烧写回去,只能通过改BOOT脚从ISP重新烧写程序,所以使用前一定要慎重,最好留个输入引脚电平判断以便重新恢复JTAG。
禁止也可以选择只禁止JTAG相关引脚而继续使用SWD:
#define GPIO_Remap_SWJ_NoJTRST ((uint32_t)0x00300100) /*!< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST */
#define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /*!< JTAG-DP Disabled and SW-DP Enabled */
#define GPIO_Remap_SWJ_Disable ((uint32_t)0x00300400) /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */