STM32:U/J/ST-LINK下载器 ,SWJ-DP协议和ISP相关
对于STM32而言有好几种下载方式,每次用的时候都觉得对于下载相关的知识太过碎片化;决定整理一下思路;
一般我们先拿到的是板子和下载器;所以先了解一下都有啥下载器,以及下载器如何下载代码的;
下载器下载代码通过约定好的引脚端口、使用约定好的通讯方式、把代码写入芯片内部的特定位置;
1 下载工具
STM32可以使用ULINK2下载器,JLINK下载器,STLINK下载器,以及直接通过ISP下载;
1.1 ULINK2下载器
生产公司:英国ARM-Keil公司
适用芯片:8051,Cortex-M,ARM7,ARM9,C166内核系列芯片
适用MDK:KEIL MDK
适用协议:JTAG协议,SWD协议
特点:目前为止没有用过
1.2 JLINK下载器
生产公司:德国SEGGER(大约叫赛格)公司
适用芯片:8051,Cortex-M0/M1/M3/M4/M7/M23/M33,Cortex-A5/A7/A8/A9/A12/A15/A17,ARM7/ARM9/ARM11,Cortex-R4/R5内核系列芯片
适用MDK:几乎全部MDK,实在太多了就不写了;
适用协议:JTAG协议,SWD协议,SPI协议
特点:目前功能最全,性能最稳定的JTAG下载器;支持好几种pins的标准JTAG接口;
1.3 STLINK下载器
生产公司:意法半导体公司
适用芯片:STM8,STM32系列
适用MDK:KEIL,STM32CubeIDE,IAR等,没有JLINK兼容的多;
适用协议:STM8使用SWIM(single wire interface module)协议,STM32使用JTAG协议和SWD(serial wire debug)协议
特点:下载器分别引出了两个接口,SWIM接口给STM8使用,JTAG接口给STM32使用;JTAG和SWD协议共同复用JTAG接口;
1.4 ISP外设直接下载
ISP(in-system programming)在线系统编程不需要借助下载器编程;但需要搭配flash loader下载软件使用,官网可下;
STM32F1系列使用USART1串口在线系统编程,
下载软件通过USART协议与flash内部的bootloader程序通讯,让bootloader将收到的代码搬运到flash内部的启动位置;
STM32其他系列不仅有USART通讯协议,还可以使用SPI和CAN,I2C通讯协议来直接下载;
其他通讯目前为止没用到过,估计以后也用不到;
至于bootloader怎么将代码搬运到flash内部,并没有告诉我们使用的是什么协议,我也懒得找为什么了;
1.4.1 正点原子STM32F1的一键下载电路
因为手上只有一块很早之前买的正点原子的板子,所以只好用这块板子测试;
大概就是因为正点原子搞了个一键下载电路,还得配合这个电路使用flymcu串口下载软件,
搞得我对下载方式有点迷糊,所以才有了这篇博客;
关于这个一键下载电路也有必要单独分析一下,网上超多相关的资料,如果遇到什么问题解决起来很方便;
2 下载协议
使用下载器时,下载器的JTAG接口可以复用出JTAG协议和SWD协议进行下载;使用ISP外设直接下载时用的是常见的通讯协议;
是不是很好奇这些协议又是怎么一回事呢?
常见的通讯协议我们就不了解了,这里就稍微了解一下JTAG和SWD协议吧;具体细节看中文参考手册;
2.1 JTAG
JTAG(joint test action group)边界扫描系统协议是一种国际标准协议用来调试芯片的;
STM32的芯片内核将其作为自己的硬件调试模块;
边界扫描的意思就是可以串行扫描芯片所有外设引脚的数据;可设置或读取引脚的值;就相当于想要芯片干啥芯片就干啥,权限最高的通讯协议了;
具体的功能如下图所示:
2.2 SWD
SWD(serial wire debug)串行调试协议也是芯片内核提供的硬件调试模块;
串行调试协议的功能和JTAG协议的一样;只是使用引脚更少;
通常默认使用的是JTAG协议进行边界扫描;可以通过让JTAG输出指定的序列来激活SWD,关闭JTAG功能;
2.3 JTAG和SWD的引脚