最近在做项目时需要用到PB3作为检测按键检测引脚。该引脚默认低电平,当按键按键按下时电平信号拉高。因此将按键配置为下拉输入。相应始终也打开使能,但是按键按下后,硬件有反应按键按下,但是软件逻辑不能检测到引脚电平拉高。查阅相关资料后,发现STM3210X系列的芯片在复位后,会将PA13/14/15 PB3/4默认配置为JTAG功能。
当选择SW模式烧录程序时:SWD只需用到PA13 / JTMS,PA14 / JTCK两根线,NREST可以接可不接。
JTAG烧录口下的PB4 / JNTRST,PB3 / JTDO和PA15 / JTDI就可以作为普通IO使用。
因为我们的工程选择的是SW的模式烧录,因此需要释放PB3引脚。故在IO口配置的代码中加入一行代码即可
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
实际测试:PB3仍然不能作为普通引脚使用,原因是初始化化顺序导致的。具体参考博客为以下:
https://blog.csdn.net/a18156289516/article/details/60332934
这里的解释下三个宏定义:
第一个宏定义:SWJ和JTAG全部使能
第二个宏定义:SWJ使能,JTAG失能。(如上所示)
第三个宏定义:SWJ和JTAG全部失能。(慎选)
#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) */
本人第一次由于粗心大意,直接选择宏定义进行的配置,导致SWG和JTAG全部失能,从而使得单片机不能再下程序进去。这就十分的蛋疼了。关于这种情况,网上也有相关的处理方法,这里不做详细的赘述,提供以下链接。
https://blog.csdn.net/q759040024/article/details/23616409
至此STM32的PB3引脚就可以作为普通的IO口进行使用了。