stm32单片机
程序烧写方式
1.
使用JTAG接口实现
JTAG接口是一种标准的测试协议,可以实现编程时在线调试,利用单步追踪可以很方便的查找代码的Bug,大多数的单片机都支持这种接口。这种接口除了电源线和复位引脚之外,还要用到单片机的四个引脚,分别是:TDI、TMS、TCK、TDO,他们所代表的含义如下所示:
TDI–数据输入,所有写入寄存器的数据都是通过TDI接口串行输入的;TMS–模式选择,Jlink输出给目标CPU的时钟信号;TCK–时钟信号,所有数据的输入输出都是以该时钟信号为基准的;TDO–数据输出,所有从寄存器读出的数据都是通过TDO接口串行输出的;以上这四个引脚都是协议里强制要求的,而且协议建议在设计电路时要选用上拉电阻。JTAG接口有多种形式,常用的20引脚、14引脚和10引脚。
如果用jtag模式下载的话需要接线:
jlink的第1脚(VDD)
第3脚(TRST对应stm32的PB4)
第5脚(TDI对应stm32的PA15)
第7脚(TMS/SWDIO对应stm32的PA13)
第9脚(TCK/SWCLK对应stm32的PA14)
第13脚(TDO\SWO对应stm32的PB3)
第15脚(RESET对应stm32的NRST)
第4.6.8.10.12.14.16.18.20中的任意一个脚(地脚)


上图中JTAG接口都通过电阻上拉了,有的单片机的这几个引脚在内部已经上拉,所以这几个上拉电阻可以省略,减少了成本和PCB空间的占用。JTAG接口烧录方式常用的工具为J-Link,实物图如下图所示。

2.
SWD是一种串行调试接口,与JTAG相比,SWD只需要两根线,分别为:SWCLK和SWDIO。
他们的含义如下:
SWDIO–串行数据线,用于数据的读出和写入;SWDCLK–串行时钟线,提供所需要的时钟信号;一般来说,大多数单片机的JTAG接口和SWDIO接口是复用的,SWD也是用J-Link工具来实现的。所以在使用的时候,只需要在软件界面做一下选择,使用SWD方式还是JTAG方式,硬件上无需改动。除了J-Link外,意法半导体的ST-Link也是支持SWD模式的。
如果用sw模式下载的话需要接线:
jlink的第1脚(VDD)
第7脚(TMS/SWDIO对应stm32的PA13)
第9脚(TCK/SWCLK对应stm32的PA14)
第4.6.8.10.12.14.16.18.20中的任意一个脚(地脚)
第15脚(RESET对应stm32的NRST)可接可不接,大家根据实际自己决定(保险起见还是建议接上)!


SWD的接口如上图所示,可以看出,SWD和JTAG是相互复用的,由于SWD只需要两根线所以大大减少了对单片机GPIO口的占用,SWD方式也是可以在线调试的。
由此可见:使用SW模式PA15,PB3,PB4,都自由了就可以做普通IO口了,只用了stm32的PA13和PA14两个口!
所以强烈推荐使用SW模式。
