STM32小问题-复用调试接口JTAG/SWD为普通GPIO

时间:2021-01-28 17:49:56

这几天做毕业设计,按键模块用到了PA14和PA15这两个IO口(由于IO是引出到拓展板上,所以刚开始并不知道PA14和PA15是被调试接口占用了)。设置好相应的寄存器后发现只有PA15正常按下能被拉低,而PA14用万用表检测始终处于低电平状态。刚开始我以为这个管脚坏了,就想着设置成输出高电平试试,结果可想而知,查看手册后发现在在复位后JTAG接口的PA14被设置为下拉了,所以按键读回来的永远是低电平。
STM32小问题-复用调试接口JTAG/SWD为普通GPIO
后来发现核心板上PA15引脚连接到了JTAG接口就想能不能通过复用把这几个口解放出来,毕竟在正常应用中调试接口是不工作的,还不如利用起来(其实是我懒得再改板子PCB了),后来查看手册发现真的可以复用起来。

手册描述如下
STM32小问题-复用调试接口JTAG/SWD为普通GPIO

手册给了我们提示,只要设置AFIO的MAPP寄存器中的SWJ_CFG[2:0]这两位就能改变映射关系,所以只要能改变这个寄存器就OK啦。

具体的映射关系设置如下:
STM32小问题-复用调试接口JTAG/SWD为普通GPIO

STM32小问题-复用调试接口JTAG/SWD为普通GPIO

SWJ_CFG[2:0]的描述如下:
STM32小问题-复用调试接口JTAG/SWD为普通GPIO

只要设置这三位为100,就能关闭调试接口,其所占用的IO就变成普通的GPIO了,这就达到了我的目的。既然找到了方法,那解决的办法就简单了。

    //重映射JTAG/SWD接口为普通GPIO
RCC->APB2ENR|=1;
AFIO->MAPR&=0xf8ffffff;
AFIO->MAPR|=0x04000000;

很简单,至于为什么AFIO->MAPR这么设置,只要看懂手册就行啦。