打印
[应用相关]

STM32 MCU 的软件烧写方法探讨

[复制链接]
1099|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
鱿鱼丝|  楼主 | 2020-12-31 15:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
STM32 MCU 的软件烧写方法探讨

STM32xx 系列MCU因为它的易用性和广泛的用户基础而在各种设计中广泛应用。本文重点讨论了几种SMT32xx MCU 软件的烧写方法和其中要注意的问题。


使用特权

评论回复
沙发
鱿鱼丝|  楼主 | 2020-12-31 15:10 | 只看该作者
一. 通过STlink来进行软件的烧写。

对于广大的开发 者来说,用STlink来进行烧写是最简单和常用的方法。一般来说STLink 可以支持JATG模式和SWD模式。SWD模式对于硬件来说比较简单。对于一般的操作来说,至少需要4根线,SWCLK,SWDIO,

使用特权

评论回复
板凳
鱿鱼丝|  楼主 | 2020-12-31 15:11 | 只看该作者
GND和TVDD。在实际的应用中,你要确认你用的STlink是哪一个版本。因为不同版本的STlink硬件的使用方法是有些不同的。

使用特权

评论回复
地板
鱿鱼丝|  楼主 | 2020-12-31 15:11 | 只看该作者
下面总结了一下他们之间的区别。

– ST-LINK/V1 (obsolete)

– ST-LINK/V2 –

STLINK-V3SET –

STLINK-V3MINI –

STLINK-V3MODS

ST-link/V2-1其实是ST-LINK/V2的进化版,它增加了存储空间和一个虚拟串口。

使用特权

评论回复
5
鱿鱼丝|  楼主 | 2020-12-31 15:12 | 只看该作者
ST-LINK/V2-A 支持存储空间,

ST-LINK/V2-B也支持存储空间和虚拟串口。

使用特权

评论回复
6
鱿鱼丝|  楼主 | 2020-12-31 15:12 | 只看该作者
STLINK-V3是最新并且功能最丰富的一代ST-LINK。 它第一次引入了模块化probe的概念。同时它还集成了多路USB桥接的功能。下表是一个较详细的比较例表

使用特权

评论回复
7
鱿鱼丝|  楼主 | 2020-12-31 15:13 | 只看该作者

使用特权

评论回复
8
鱿鱼丝|  楼主 | 2020-12-31 15:14 | 只看该作者
从上表可以看出,用不同的STlink在设计时要注意它的接口电平电压的范围。例如如果你要烧写1.8V的STM32,你就不能选择STLINK/V2-A或者B。而应该选择V2或者V2-1。当然你也可以选择STLINK/V3,同时选择配套的电平转换板。

使用特权

评论回复
9
鱿鱼丝|  楼主 | 2020-12-31 15:14 | 只看该作者
如果你深入的去看STLINK的原理图,你可以看出接口电平的不同,主要在于里面有没有电平转换电路造成的。对于这个电路,下面的IC会经常被采用。

使用特权

评论回复
10
鱿鱼丝|  楼主 | 2020-12-31 15:15 | 只看该作者

使用特权

评论回复
11
鱿鱼丝|  楼主 | 2020-12-31 15:15 | 只看该作者
以上电路中的T_VDD连接到烧写目标板的供电电压,这样就可以通过电平转换芯片来实现电平的自动匹配。

使用特权

评论回复
12
鱿鱼丝|  楼主 | 2020-12-31 15:16 | 只看该作者
很多人经常讨论和争论SWD接口到底要不要Reset信号的问题。其实在绝大多数的情况下,没有RESET的情况下,也是可以实现烧写问题的。但是(凡事就怕但是),在某些情况下如果没有RESET信号的号,STlink是没有办法烧写的。比如说如果芯片内部有firmware,同时firmware对于SWDIO或者SWCLK对应的pin进行了重定义,作为了其他的功能引脚。所以为了保险起见,建议还是把RESET加上。在ST官方的STLINK中,RESET信号总是存在的。

使用特权

评论回复
13
鱿鱼丝|  楼主 | 2020-12-31 15:17 | 只看该作者
当然,对于RESET信号来说,也有一个电平转换的问题,那么为什么不能把RESET信号一起接在TXS0108上面实现电平转换呢?这里面设计到了TXS0108的工作原理了。此芯片是一个自动双向电平转换芯片,为了实现自动判别信号的方向,里面用到了一个较one-shot的电路。但是对于reset这种固定电平的信号来说,这个芯片就不是很合适了。一般采取以下的电路。

使用特权

评论回复
14
鱿鱼丝|  楼主 | 2020-12-31 15:17 | 只看该作者

使用特权

评论回复
15
鱿鱼丝|  楼主 | 2020-12-31 15:18 | 只看该作者
在用STlink硬件连接的情况下,可以直接用STlink-utility这个软件来烧写。最新版本的下载地址为link.
你可以直接用UI界面去进行读写,当然也可以在command line的情况下通过命令的方式进行读写。ST-LINK_CLI.exe在STlinkutility 的安装目录下面,运行这个exe可以看到很多参数的意义和用法,大家可以自己去研究。如果有问题可以在下面提出来,大家一起探讨。

使用特权

评论回复
16
鱿鱼丝|  楼主 | 2020-12-31 15:19 | 只看该作者
当然在用STLink硬件连接的情况下,还可以用OpenOCD来进行烧写。OpenOCD的用法可以参考http://openocd.org/获得更多信息。需要注意的是用OpenOCD来进行烧写时用注意hla_vid_pid 的配置,对于STLINK/V2,hla_vid_pid= 0x0483
0x3748。但是对于STLINK/V2-1,这个值应该为hla_vid_pid= 0x0483 0x374B。

使用特权

评论回复
17
鱿鱼丝|  楼主 | 2020-12-31 15:19 | 只看该作者
二,可以通过STM32的内置的bootlooder来读写firmware

对于STM32xx系列MCU来说,在启动的时候会通过BOOT0脚,BOOT1脚(有的IC无此pin,有BOOT1 option1 bit)来设置BOOT的模式。一般分为以下三种

从flash 启动
从系统内存里启动
从内置的RAM里启动

使用特权

评论回复
18
鱿鱼丝|  楼主 | 2020-12-31 15:20 | 只看该作者
Bootloader就位于系统内存里, 有了它就可以通过USB,UART,SPI, IIC and CAN等接口烧写软件。它是在ST的产线上被写入ROM里的。它主要的功能就是通过上面所示的接口中的一个来下载应用程序到内部FLASH里。

使用特权

评论回复
19
鱿鱼丝|  楼主 | 2020-12-31 15:21 | 只看该作者
下面以用USB interface为例,用Dfuse软件来烧写flash。Dfuse软件可以从链接处下载https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/stsw-stm32080.html。

使用特权

评论回复
20
鱿鱼丝|  楼主 | 2020-12-31 15:22 | 只看该作者
在做烧写操作时,首先要设置BOOT0 和BOOT1的初始状态,然后给IC供电,让IC进入bootloader。打开Dfuse软件,可以看到芯片已经进入DFU mode,可以进行烧写。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

473

帖子

0

粉丝