N32G45X无法配置PB3与PB4引脚问题(JTAG/SWD复用)
N32G45X无法配置PB3与PB4引脚的原因
国民技术N32G45X默认打开JTAG调试口占用了PB3与PB4引脚,如下:
(用户手册P134)
复位后,调试系统相关的引脚默认状态为启动 SWD-JTAG,JTAG 引脚被置于输入上拉或下拉模式:
● PA15:JTDI 置于输入上拉模式
● PA14:JTCK 置于输入下拉模式
● PA13:JTMS 置于输入上拉模式
● PB4:NJTRST 置于输入上拉模式
● PB3:JTD0 置于推挽输出无上下拉
(用户手册P137)
解决方法:使能SWD调试接口
由于JTAG调试口占用了5个IO,造成IO资源浪费,所以需将默认的JTAG调试更改为SWD调试,官方给出了库函数:
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO,ENABLE);//使能AFIO复用功能时钟
GPIO_ConfigPinRemap(GPIO_RMP_SW_JTAG_DISABLE, ENABLE);//复用功能重映射
但该代码可能存在BUG不能无法关闭JTAG,所以改为如下函数
(这里参考了:3.国民技术N32G45X例程之-JTAG口复用GPIO)
RCC->APB2PCLKEN|=1<<0; //使能AFIO复用功能时钟
AFIO->RMP_CFG&=0XF8FFFFFF; //清除AFIO_RMP_CFG的[26:24]
AFIO->RMP_CFG|=0X02000000; //关闭jtag,启用SWD([26:24]位设置为010
如果需要重映射为其他功能,只需改变最后一行即可
AFIO->RMP_CFG|=0X00000000; //启用jtag,启用SWD([26:24]位设置为000)
AFIO->RMP_CFG|=0X01000000; //启用jtag,启用SWD,但没有NJTRST([26:24]位设置为001)
AFIO->RMP_CFG|=0X04000000; //关闭jtag,关闭SWD([26:24]位设置为100)