STM32:程序下载系列概览
1 下载协议
1.1 JTAG协议
JTAG全称 joint test action group,边界扫描系统协议;是调试芯片的通用标准协议;
1.2 SWD协议
SWD全称 serial wire debug,串行调试协议;也是调试芯片的通用标准协议;
2 SWJ-DP
SWJ-DP全称 serial wire/JTAG - debug port,串行和边界扫描系统调试端口;为stm32系列的程序下载端口;
SWJ-DP可复用成JTAG调试接口、SW调试接口,分时复用JTAG协议、SWD协议进行下载;
2.1 stm32f1系列引脚分配
2.2 SWJ-DP功能框图
功能如图332所示:通过AHB-AP访问cm3的总线矩阵,除cm3核心外的所有范围都可以访问读取;
3 下载器
使用下载器下载:通过约定好的引脚端口、使用约定好的通讯方式、把代码写入芯片内部的特定位置;
STM32可以使用ULINK2下载器、JLINK下载器、STLINK下载器,以及各种抄板前三种下载器;
3.1 ULINK2下载器
生产公司:英国ARM-Keil公司
适用芯片:8051,Cortex-M,ARM7,ARM9,C166内核系列芯片
适用MDK:KEIL MDK
适用协议:JTAG协议,SWD协议
特点:目前为止没有用过
3.2 JLINK下载器
生产公司:德国SEGGER(大约叫赛格)公司
适用芯片:8051,Cortex-Mxxx,Cortex-Axxx,ARM7/ARM9/ARM11,Cortex-R4/R5内核系列芯片
适用MDK:几乎全部MDK,实在太多了就不写了;
适用协议:JTAG协议,SWD协议,SPI协议
特点:目前功能最全,性能最稳定的JTAG下载器;支持好几种pins的标准JTAG接口;
3.2.1 最近遇到一个问题,一个14年初的jlink下载器,电脑安装了18年版本的V634 jlink驱动;jlink驱动不会兼容旧的jlink下载器;
所以每次下载都会弹窗报错如下,我应该去下个旧的14年的jlink驱动就可以解决这个问题,先放着;
“the connected J-LINK is defective.proper operation cannot be guaranteed.”
https://www.segger.com/downloads/jlink
3.3 STLINK下载器
生产公司:意法半导体公司
适用芯片:STM8,STM32系列
适用MDK:KEIL,STM32CubeIDE,IAR等,没有JLINK兼容的多;
适用协议:STM8使用SWIM(single wire interface module)协议,STM32使用JTAG协议、SWD协议
特点:下载器分别引出了两个接口,SWIM接口给STM8使用,SWJ-DP接口给STM32使用;
4 不使用下载器下载
不使用下载器下载:通过约定好的引脚端口、使用约定好的通讯方式、把代码写入芯片内部的特定位置;
4.1 IAP
IAP全称 in-applicatin programing,在线应用编程下载;没有接触的机会也就没有了解的兴趣了;
4.2 ISP
ISP全称 in-system programming,在线系统编程下载;
ISP下载时,不能直接通过MDK下载,需要借助flash_loader.exe / fly_mcu.exe下载;
ISP下载时,下载软件通常通过usart1外设,与出厂bootloader程序直接通讯,bootloader将收到的代码搬运到flash内部的启动位置;
下载软件不仅可以通过usart1下载,部分系列芯片还可以使用spi、can、iic等外设;其他外设估计大概率遇不到;
bootloader程序怎么将代码搬运到flash内部并没有告诉我们,我也懒得找为什么了;
4.3 ISP一键下载电路
ch340电平转换芯片作用是直接将USB差分电平信号转换为TTL信号传递给单片机;
大约是ch340厂家将RTS、DTR引脚控制封装进flymcu.exe并提供了电路接法;
flymcu.exe软件关于RTS、DTR的配置选择为:"DTR的低电平复位,RTS高电平进bootloader",离谱妈妈快来开门;
以下倒推一下那俩三极管的作用,为了方便推导,pnp三极管在此简写为n型管、npn三极管在此简写为p型管;
手上只有正点的板子所以用他的电路图,电路boot[1:0]是通过跳线帽手动修改的,本节前提手动配置了[boot1]=0b;
4.3.1 ISP下载
(1) [x:boot0]= x1b,reset先拉低再拉高;此时单片机根据boot[1:0]=x1b 从地址0x1FFF F000启动,ISP下载;
(2) [x:boot0]= x0b,reset先拉低后拉高,此时单片机根据boot[1:0]=x0b 从地址0x0800 0000启动,执行程序;
注意,如果[boot0]=0b,意味着RTS通过R48拉到了vcc,那么p型管始终截止,还怎么控制reset值呢?保留疑问继续;
4.3.2 ISP一键下载
(1) RTS=1,DTR=1
n型管截止断路boot0接地,boot0=0;p型管截止断路reset接vcc,reset=1;
ch340上电初始化值;此时n型管不控制boot0状态,p型管不控制reset值;
(2) RTS=0,DTR \
n型管导通10k和1k电阻串联后分压,boot0=1;p型管导通reset接RTS,reset=0;
ISP地址启动;此时reset低电平有效,芯片复位;当前状态假设持续10ms,F1系列reset复位信号持续典型值为2.5ms;
(3) RTS \ ,DTR=1
n型管状态不变,boot0=1;p型管截止断路reset接vcc,reset=1;
ISP地址启动;此时reset释放,执行程序;芯片读取boot[1:0]=01b,启动ISP下载,直到flymcu.exe下载完成;
(4) RTS=1,DTR \
此时n型管截止断路boot0接地,boot0=0;p型管截止断路reset接vcc,reset=1;
此时n型管不控制boot0状态,p型管不控制reset值;
(5) isp下载完成后,从flash地址重新启动的reset信号不是ch340控制的
可能是由于勾选了flymcu.exe的“编程后执行”提供的,可能是由内核电源模块提供的;
4.3.3 ISP一键下载bug
当usb转串口接电脑之后,再给单片机上电的瞬间DTR和RTS的电平变化导致竞争冒险,使得单片机可能反复重复复位;
以上是野火说的,可以解释以下bug;
当使用STLINK下载同时,同时使用ch340的usb转串口,直接拔掉电脑端stlink_usb,usb转串口会一直重复发送信息;
usb转串口会一直重复发送信息,说明此时芯片在反复重启,反复复位;
可能是因为stlink拔掉的时候reset信号出现了毛刺,可能通过电路板走线影响上了ch340的复位;
然后导致ch340的DTR和RTS的竞争冒险所以单片机一直在复位;
STM32 SWD下载口无法下载的原因和解决办法 - 创世界 - 博客园 (cnblogs.com)
5 小结
感觉自己棒棒哒;