class="markdown_views prism-tomorrow-night">
前奏
先来copy下 JTAG、SW接口的定义,
JTAG:JTAG(Joint Test Action Group;联合测试工作组)是一种国际标准测试协议,主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
SWD:SW(Serial Wire Mode Interface),串行接口线模式。在串行线模式,只有针TCLK和TMS使用。TDO数据输出引脚是一个可选。
SWD下载调试 原理图:
从图中看到:板子使用SWD接口下载调试,即使用SWDIO、SWCLK(PA13、PA14);PB3–JTDO 默认功能为JTAG的,而这里用作其他的功能–普通I/O。
激情
问题来了:
1、需要关掉PB3的JTAG功能,复用为其他功能。
2、SWD 和传统的调试方式区别。
stm32 JTAG复用相关方法 :
直接上代码,如下:
........
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
.......
但,
当设置了以上语句后,当运行了这两个语句后,JTAG仿真就与目标失去去联系。
解决办法有:
1、设置启动模式为ISP模式(BOOT0=1、BOOT1=0)或设置启动模式为RAM运行模式(BOOT0=1、BOOT1=1)。 将开发板断电后重新上电,此时就因不是在用户程序模式,因此就不会执行禁用JTAG的语句,JTAG功能也就可以正常使用。
2、设置启动模式为ISP模式(BOOT0=1、BOOT1=0),用ISP程序将STM32的FLASH擦除,之后就可恢复JTAG功能。
3、如果你的仿真器支持SWD仿真模式,如IAR下用JLINK、MDK下用ULINK2。 直接将仿真器的模式设为SWD模,就可以不受这个禁止JTAG功能的影响了。
我的环境切合第三个解决方案,IAR设置如下:
SWD 和传统的调试方式区别 :
- SWD 模式比 JTAG 在高速模式下面更加可靠。 在大数据量的情况下面 JTAG 下载程序会失败, 但是 SWD 发生的几率会小很多。基本使用 JTAG 仿真模式的情况下是可以直接使用 SWD 模式的, 只要你的仿真器支持。 所以推荐大家使用这个模式。
- 在大家 GPIO 刚好缺一个的时候, 可以使用 SWD 仿真, 这种模式支持更少的引脚。
- 在大家板子的体积有限的时候推荐使用 SWD 模式, 它需要的引脚少, 当然需要的 PCB 空间就小啦! 比如你可以选择一个很小的 2.54 间距的 5 芯端子做仿真接口。
然后
以上,
散啦。。。。。。