目录
概述
本文主要介绍N32G45XVL-STB之JTAG/SWD 复用功能重映射功能的使用方法,笔者通过阅读文档《N32G45x 系列32-bit ARM® Cortex®-M4 微控制器用户手册 V3.0》,详细了解了JTAG/SWD端口的对应IO口的使用方法,还通过具体的实例验证了其功能。
1 JTAG/SWD 复用功能重映射
1.1 端口映射
芯片上电默认使能 SWD-JTAG 调试接口,调试接口被映射到 GPIO 端口上,如下表所示。
如调试期间需要使用其 GPIO 功能, 可通过设置 AFIO_RMP_CFG. SW_JTAG_CFG[2:0]位,可以改变上述重映像配置。参见下表。
1.2 SWJ_CFG 配置事项
当 APB 桥的写缓冲区满了的时侯,在写 AFIO_RMP_CFG 寄存器时需要多用一个 APB 周期。这是因为SWD_JTAG 脚的释放需要两个 APB 周期完成,以保证 NJTRST 和 JTCK 的输入信号为一个干净的电平。
第一个周期:
输入 1 / 0 的 SWD_JTAG 输入到内核的信号被接为 0 或1(NJTRST/TDI/TMS 接 1, JTCK 接0);
第二个周期:
由 IOM 控制 SWD_JTAG 引脚的控制信号(比如方向,上下拉,施密特输入等)。
1.3 上下拉配置
由于 JTAG 的引脚直接连接到内部的调试寄存器上(JTCK/SWCLK 直接连接到时钟端),因此必须保证 JTAG的输入引脚不能处于浮空态。 为了避免任何非可控的 IO 电平, JTAG 的输入引脚固定内部的上下拉:
NJTRST: 内部上拉
JTDI: 内部上拉
JTMS/SWDIO: 内部上拉
JTCK/SWCLK: 内部下拉
2 软件实现
2.1 GPIO库中的Remap定义
函数原型:
void GPIO_ConfigPinRemap(uint32_t RmpPin, FunctionalState Cmd)
参数介绍:
RmpPin: 选择IO对应的Remap功能
Cmd: 状态选择, 可以被设置为ENABLE / DISABLE
2.2 SW_JTAG Remap定义的功能
在GPIO操作库对应的头文件中已经将Remap的功能通过宏定义的形式描述出来
代码第7行: 使能SWO和JTAG调试功能,仅NJTRST为普通IO接口,其他接口不能配置为IO
代码第10行:使能SWO和禁止使用JTAG调试功能,此时PA15, PB3,PB4,可以被作为IO使用
代码第13行:禁止SWO和JTAG功能,此时PA13,PA14,PA15, PB3,PB4可以被配置为IO端口使用
复用功能 GPIO端口 JTMS/SWDIO PA13 JTCK/SWCLK PA14 JTDI PA15 JTDO PB3 NJTRST PB4
2.3 一个使用范例
在N32G45XVL-STB开发板上有三个LED,其中PB4控制LED2,但PB4端口和JTAG的NJTRST端口是并用的。直接将PB4配置为IO并不能控制LED的工作状态。需要将PB4对应的JTAG功能Disable之后,PB4的IO功能才能被打开。
实现代码如下:
源代码如下:
/*
1) initial LED gpio port
2) disable JTAG, enable SWO
*/
GPIO_ConfigPinRemap(GPIO_RMP_SW_JTAG_SW_ENABLE, ENABLE);
硬件实物图: