STM32烧录程序的多种方式及调试工具介绍

1.烧录程序方式

STM32现在烧录程序的主流方式包括JTAG、SWD和ISP,JTAG和SWD除了可以烧录程序之外还可以实现硬件仿真的,说白了就是可以在Keil MDK上实现在线仿真,调试断点之类的,但是ISP只用于实现程序的烧录,分别说明如下。

1.1 JTAG

JTAG(Joint Test Action Group,联合测试工作组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。多数的高级器件都支持JTAG协议,如DSPFPGA器件等。JTAG 接口的连接有两种标准,即 14 针接口和 20 针接口。

1.2 SWD

SWD串行调试(Serial Wire Debug),是ARM内核调试器的一种通信协议。相比于JTAG协议,占用更少的端口资源。一般只用四个接口即可:SWDIO、SWCLK、VCC、GND。一般SWD电路如下图所示。

1.3 ISP

ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。ISP通过芯片内部的自举程序(即Bootloader,由芯片厂家烧写好,不得更改)来选定一种串行的外设,对芯片内部的FLASH进行编程。最常用的ISP方式就是通过串口下载,最主要的优点就是成本低,缺点是只能用于下载程序,不能用Keil MDK硬件仿真。一般ISP电路如下图所示。

2 烧录程序工具

以上说的JTAG、SWD和ISP都是一种调试协议,各有优缺点,但是协议毕竟是软件层面的意思,实际烧录程序需要硬件去连接的,这就是烧录程序的工具,一般STM32常用的有ST-LINK、JLINK和USB转TTL模块。

2.1 ST-LINK

ST-LINK是ST公司推出的调试工具,ST-LINK现在最新的是V3版本,它的价格大约在300美元左右,当然某宝上几十块钱就能买到一个仿的ST-LINK,大多数国内开发者用的都是这种。从外观上来看,ST-LINK的体积小,方便携带。ST-LINK 支持所有带JTAG/SWD接口的STM32系列单片机。

2.2 JLINK

JLINK是德国SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器,很多ARM芯片的接口协议是JTAG,JLINK一端接电脑USB接口,一端接CPU的JTAG接口,JLINK充当的作用就是USB转JTAG,支持JTAG和SWD两种模式。价格也不便宜,正版的也要几千马内,我之前咨询过一个国内的代理商,V11版本的要7500,某宝上仿的V11几百块,不过相比于STLINK的体积,JLINK要大很多。

2.3 USB转TTL模块

有的STM32开发板自带了ISP下载电路,就不需要USB转TTL模块去烧录程序,但是有的没有带,比如在某宝买的比较便宜的STM32C8T6最小系统,这个时候想烧录程序如果没有STLINK和JLINK那么就需要用USB转TTL模块去烧录了,这个某宝十几块钱就能买到。

3 硬件连接以及烧录步骤 

3.1 ST-LINK

任何工具想和电脑通信都要有驱动的,所以ST-LINK也不例外驱动,ST-LINK的驱动下载网址如下:

https://www.st.com/zh/development-tools/stsw-link009.html

安装好驱动后就可以把STM32和ST-LINK接线了,ST-LINK支持SW和JTAG两种烧录方式,只不过它们的接线是不同的,SW接线如下表所示,表中( )里的数字代表ST-LINK的管脚序号,一般第一个管脚都是有一个小三角符号指示的。

STM32ST-LINK
VCCVCCIN(1)
PA13TCK(9)
PA14TMS(7)
GNDGND(任意一个GND都可以)

对于用ST-LINK使用JTAG方式的烧录程序,一般的STM32开发板都会提供一个20针脚的接口,并且设计了防反插的,一般的都会这么设计,除非反人类的设计不给防呆口,反插就完蛋了,直接把ST-LINK的20pin排线插入STM2开发板的JTAG接口就可以(ST-LINK上还有一个4pin的接口,那个是给STM8用的),如下图所示。

ST-LINK和STM32接好线后把ST-LINK的USB端插入电脑,查看设备管理器,如下图所示代表ST-LINK的驱动正常,已经被电脑识别出。

下一步就是把你自己已经编译过后没有错误的Keil工程打开,然后点击魔术棒

点开魔术棒后会弹出如下界面,然后点击Debug,再在图中序号2的部分选择ST-LINK,第三步就是点击右侧的Settings。

由于我手里没有ST-LINK,所以就没有截图关于ST-LINK被Keil MDK的识别成功。 识别成功后还需要修改FLASH的大小,这个放在后面JLINK里说,我手里的是JLINK。

3.2 JLINK

JLINK想和电脑通信当然也需要驱动安装的,JLINK驱动下载网址如下:

https://www.segger.com/downloads/jlink/

打开后如图所示选择下载即可

不过要说明的一点是JLINK驱动现在最新版本是V7.94C,我下载安装后发现识别不到JLINK,我就下载了V7.82,可能我的JLINK固件版本的问题吧,这不算大问题,如果你遇到和我一样的问题,那你就尝试下载安装低版本的驱动试试。

JLINK与STM32接线和ST-LINK是一样的,就不再重复说了,主要说一下与ST-LINK在eil MDK界面不同的部分。

将JLINK和STM23接好线后将JLINK的USB端插入电脑,查看设备管理器,如下图所示代表JLINK的驱动正常,已经被电脑识别出。

下一步就是把你自己已经编译过后没有错误的Keil工程打开,然后点击魔术棒,点开魔术棒后会弹出如下界面,然后点击Debug,再在图中序号2的部分选择ST-LINK,第三部就是点击右侧的Settings(这一步也是和ST-LINK一样的)。

点击Settings后如图所示,可以看到JLINK的信息,包括它的硬件版本是V11的(某宝买的还是靠谱,我买的就是V11高仿的),Device Name这里也看出来是JTAG的方式,这里有一点要说明,我曾经就在这踩了坑,就是Port这个框框下,如果你硬件上JLINK和STM32是接的JTAG,那么这里就要选择JTAG,不然是识别不出来的。

 如果你硬件上JLINK和STM32是接的SW,那么这里就要选择SW,如下图所示,可以看到Device Name这里显示的就是SW-DP了,这是主要的区别。

然后下一步就是在这个界面下点击Flash Download,这里要选择一下你的STM32的FLASH大小,默认是128K的,点击add,如下图所示。

因为我自己的是STM2C8T6,在建立工程的时候工程文件中CORE中的启动文件是startup_stm32f10x_md.s文件,就是中等容量大小的,如果你的FLASH很大,那么你的驱动文件应该是startup_stm32f10x_hd.s,所以你点击add后列表中会出现512K的FLASH,这个要根据自己的实际情况选取。

完成这些后记得保存,然后就可以点击load将程序下载到STM32单片机内部了,如下图所示,此时程序烧录完成。

3.3 串口烧录

3.3.1 ISP一键下载

前面提到的ISP烧录方式其实就是串口烧录,如果你买的开发板自带了ISP一键下载 ,那么会提供一个ISP串口烧录接口,如下图所示,红框内的就是ISP下载接口,绿框是USB供电接口。

如果有ISP接口的,烧录程序比较简单,首先需要下载CH340的驱动,CH340是南京沁恒研发的,CH340驱动下载网址如下:

https://www.wch.cn/download/CH341SER_EXE.html

打开后点下载就可以,然后安装驱动

驱动安装成功后,需要用STM32开发板自带的线连接好STM32电路板,然后USB端插入电脑,设备管理器查看驱动是否识别到,如下图所示为成功识别,端口为COM4。

如果用串口烧录程序的话就不能用Keil MDK作为上位机了,需要用到FlyMCU软件,FlyMCU下载网址如下:

http://www.mcuisp.com/chinese%20mcuisp%20web/ruanjianxiazai-chinese.htm

下载完成后打开,需要设置成下图所示,CH340驱动正常的话Port这里会显示你的CH340端口,我的为COM4,要根据你实际的设备管理器查看的串口选择,然后将Keil MDK编译后的hex文件通过右边的三个小点选中,中间选择STMISP,最下面的RTS选择低电平复位,DTR选择高电平进BootLoader。

然后就可以点击开始编程,出现如下图所示界面,不过这个时候就体现了一键ISP的意义,需要手动去按一下STM32开发板上的复位按键RST才能开始烧录,否则就一直处于连接状态。

按完复位键RST后出现下图所示的字样就代表烧录成功。

3.3.2 USB转TTL烧录

如果你买的STM2开发板是那种比较便宜的,比如我买的是STM32C8T6这种,就没有ISP接口,也就不能用ISP一键下载,需要外加一个USB转TTL模块,USB转TTL模块其实也是串口下载,只不过需要自己将模块和STM32的串口连接,并且需要手动设置BOOT的启动方式, 先说模块和STM32的接线如下表

STM32USB转TTL模块
3V3(或5V)3.3V(或5V)
TXDPA10
RXDPA9
GNDGND

STM32C8T6的PA9是串口1的TX,所以需要接USB转TTL模块的RXD,同理STM32C8T6的PA10是串口1的RX,所以需要接USB转TTL模块的TXD,串口需要收发对着接才能通信。

然后关于BOOT的启动方式,有一篇比较好的博客推荐大家看一下,链接如下:

https://zhiguoxin.blog.csdn.net/article/details/116051401?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-116051401-blog-124135006.235%5Ev40%5Epc_relevant_3m_sort_dl_base3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-116051401-blog-124135006.235%5Ev40%5Epc_relevant_3m_sort_dl_base3&utm_relevant_index=1icon-default.png?t=N7T8https://zhiguoxin.blog.csdn.net/article/details/116051401?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1-116051401-blog-124135006.235%5Ev40%5Epc_relevant_3m_sort_dl_base3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1-116051401-blog-124135006.235%5Ev40%5Epc_relevant_3m_sort_dl_base3&utm_relevant_index=1我们如果用串口方式烧录程序那么需要使用第二种启动方式,就是将你STM32开发板的BOOT0通过跳线帽接到1端,将BOOT1通过跳线帽接到0端,因为BOOT0=1&&BOOT1=0,STM32在出厂时在这个区域内部预置了一段引导程序BootLoader, 也就是我们常说的ISP程序,选用这种启动模式时是为了从串口下载程序,因为在厂家提供的BootLoader 中,提供了串口下载程序的固件。

同样也是使用FlyMCU作为上位机烧录程序的,和ISP一键下载的配置是一样的,不过要记得下载完程序后需要将BOOT0=0,用跳线帽将BOOT0接到0端,不然程序是没法正常运行的。

  • 26
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值