STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer

STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer

  • 1 概述
    • 1.1资源概述
    • 1.2 STM32串口烧录方式
    • 1.3 STM32 STLINK烧录方式
  • 2.MDK软件下载介绍
  • 3 STM32 ST-LINK Utility介绍
  • 4 STM32CubeProgrammer
    • 4.1 使用STLINK进行下载
    • 4.2 使用串口进行下载
  • 5 官方正版STLINK仿真器
    • 5.1 单独的STLINK V3
    • 5.2 集成在官方开发板上的STLINK
  • 6 连接异常处理
    • 6.1 能连接但下载报错解决方案
    • 6.2 特殊IO口使用导致烧录一次程序后SWD口不能用

1 概述

1.1资源概述

开发板:正点原子STM32F103 Nano开发板
STM32 ST-LINK Utility版本:V4.5.0.0
STM32CubeProgrammer版本:V2.4.0
MDK版本:V5.23
主控芯片型号:STM32F103RBT6
正点原子开发板

1.2 STM32串口烧录方式

使用串口进行烧录,上位机可采用FLYMCU,然后通过USB转串口线(或者板)给目标设备进行烧录。需要注意的是,如果是M3内核非互联网型的板子这里的串口必须是串口1,对应为GPIO9和GPIO10。如果是M4内核,可以是下述端口。
● USART1(PA9/PA10)
● USART3(PB10/11 和 PC10/11)
● CAN2(PB5/13)
● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第1张图片
BOOT1设为0,BOOT0设为1,按复位键即可进入串口下载模式,打开FLYMCU软件,选择正确的串口,点击读器件信息,显示连接成功。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第2张图片
打开所需要下载的HEX文件,这里由于电路上没有自动复位进BOOT区的电路(正点原子部分高级一点的板子有),我们选择不使用RTS和DTR。点击开始编程。直至下载成功。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第3张图片
下载完成后,将BOOT0跳线跳到0,按一下Reset键,程序即可正常运行。
使用这种串口方式烧录时,在KEIL中将检测不到STLINK,若选择STLINK进行烧录,将会报错。未检测到STLINK错误提示。需要编译后,用另外的工具进行烧录。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第4张图片

1.3 STM32 STLINK烧录方式

使用STLINK进行烧录,上位机可采用ST官方的STLINK软件,然后通过STLINK模块给目标设备进行烧录。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第5张图片
使用此种方式进行烧录时,KEIL中可以检测到STLINK。STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第6张图片

2.MDK软件下载介绍

MDK软件即为keil软件,建立工程并编译通过后,可以实现内部集成的烧录工具实现对目标开发板(芯片)的烧录工作。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第7张图片
缺点是显而易见的,当我们工程文件缺失,只有烧录目标程序.bin或者.hex文件时,我们就不能通过这种方式进行烧录操作。接下来我给大家介绍两个ST官方的烧录软件,可以在ST官方网站上下载到。分别是STM32 ST-LINK Utility和STM32CubeProgrammer。

3 STM32 ST-LINK Utility介绍

此软件需要使用STLINK仿真烧录器,支持.bin/.src/.hex/.src/.s19五种格式的烧录文件下载。烧录文件在MDK软件编译工程时会自动生成。正点原子的例程烧录文件位于OBJ文件夹中(.hex)。如果是使用STM32CUBEIDE生成的工程,编译后烧录文件位于Debug文件夹中(.bin)。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第8张图片
这个软件支持开发板板载的STLINK V2.1进行烧录操作,不会提示需要固件升级等任何错误。具备烧录软件和芯片已烧软件比对灯功能。软件体积小巧,非常好用。

4 STM32CubeProgrammer

4.1 使用STLINK进行下载

STM32CubeProgrammer软件是ST新推出的烧录软件,支持更多的方式设置,官方定位是替代ST-LINK Utility。打开如下图所示,支持STLINK、USB、UART以及OTA(均需要对应的烧录工具)下载,支持SWD和JTAG。但是需要说明的是,这个软件烧录时,需要STLINK固件为最新。使用正点原子Nano开发板时,会提示软件非最新,不能进行连接。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第9张图片
弹出的固件需要升级的错误
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第10张图片
如果买的是官方出品的STLINK,可以正常对固件进行升级,如果不是官方的烧录器,升级前请三思,升级后有可能导致烧录器不能正常使用。下图为点击firmware update后出现的弹框。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第11张图片
使用正点原子Nano开发板也无需担心会升级导致不能用,因为你尝试升级时会弹出另外一个提示,需要额外的9856B空间,不能进行升级,原因是我们板载的STLINK芯片采用的STM32F103C8T6只有64K空间,这部分空间已经全部用完,不能再写入更新更大的固件。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第12张图片
另外这个软件也集成在STM32CUBEIDE软件中,STM32CUBEIDE为ST收购的一家编程软件,然后再将STM32CUBEMX和STM32CUBEPROGRAMMER集成整合到一起的综合编程软件,目前用的人还很少。
连接成功的示意图如下,默认会把芯片内部的程序读出来,可以对此程序进行另存为等操作。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第13张图片
使用此烧录工具,烧录时还可以对芯片进行读写保护,避免芯片被恶意读出盗窃烧录底层。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第14张图片

4.2 使用串口进行下载

启动模式说明说明,我们选择系统存储器启动。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第15张图片
内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程: ● 对于小容量、中容量和大容量的产品而言,可以通过USART1接口启用自举程序。串口烧录的原理就是利用这个自举程序读取串口的数据,对内部Flash进行擦写,实现程序的烧录。

1.BOOT设置,将BOOT1跳到0(开发板已经默认拉到地),BOOT0跳到1(3.3V)。按一下RESET按键
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第16张图片
2,打开软件,选择Uart和正确的COM口。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第17张图片
3,连接成功后如下
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第18张图片
4,选择要下载的文件下载,下图所示已经下载成功。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第19张图片
5,将BOOT0跳线还原到BOOT0。若上图勾选了Run after programming,则无需按Reset即会运行新程序,若没有勾选,按一下Reset按键。

5 官方正版STLINK仿真器

5.1 单独的STLINK V3

这里我推荐一款官方的正版仿真器,即STLINK V3 MINI,ST官方近两年推出,采用了STM32F723的芯片,比常见的STLINK V2拥有更多的功能,更快的速度。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第20张图片
这个仿真器非常小,比通常的U盘还小一号,且排线为14P 1.27mm间距的排线。因此不支持常见的2.54杜邦线连接,需要额外的转接板进行转接。这里需要特别注意。
此款仿真器支持一个虚拟的串口(13脚和14脚),支持SWD和JTAG烧录,端口定义如下:
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第21张图片
目前V3系列暂时未发现网上有仿造的产品出售。这款性价比比较高,淘宝价格80元,推荐各位购买。

5.2 集成在官方开发板上的STLINK

官方的开发板集成了STLINK,这个STLINK可以对外进行烧录。这块部分可以裁下来单独使用。当烧录外部设备时,需要将外部烧录跳线拔下来,然后将烧录口和目标板通过杜邦线进行连接。不同的开发板对应的STLINK版本不同,F103对应的是V2.1,F7开发板对应的是V3.0。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第22张图片
可以做一个6PIN转20PIN的转接板,转接到20pin上,成为一个标准的下载器。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第23张图片

6 连接异常处理

6.1 能连接但下载报错解决方案

使用杜邦线进行SWD连接时,如果是散线或者线缆过长,会出现KEIL能连接上,但是下载报错(flash错误或者M3错误)的故障。将线缆更换为排线或者降低线缆的长度可以解决这个问题。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第24张图片

6.2 特殊IO口使用导致烧录一次程序后SWD口不能用

JTAG或者SWD端口被占用,但是却没有进行正确的配置。
在开发STM32F407芯片时,调试18B20温度程序时发现一个问题,当下载完一次程序后,SW就失去连接
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第25张图片
强制烧录时报错信息如下:No target connected
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第26张图片
报错信息Error:Flash Download failed-Target DLL has been cancelled
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第27张图片
使用utility连接也会报错,报错信息如下:Cannot connect to target
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第28张图片
按照提示,在烧录时按Reset按键,成功烧录了软件。使用一行行注释排除的方法,最后定位在DS18B20_Init初始化函数这。程序使用了PB15作为了18B20的输入,这个口也是JTAG的接口,在使用时,不能按照常规GPIO口进行配置。使用时,需要先禁止JTAG,然后使能SWD。如果弄成了最后一种模式就SW下载方式无效,需要按住Reset复位重新连接烧录了。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第29张图片
为了验证这个想法,在程序中将A15改为B15。更改初始化函数

u8 DS18B20_Init(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA时钟,改为使能GPIOB时钟

  //GPIOA15,改为了GPIOB15
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
  DS18B20_Rst();
  return DS18B20_Check();
}

更改头文件定义

//IO方向设置
#define DS18B20_IO_IN()  {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0;}	//PA15输入模式,改为PB15
#define DS18B20_IO_OUT() {GPIOB->MODER&=0XCFFFFFFF;GPIOB->MODER|=0x40000000;} 	//PA15输出模式,改为PB15
 
////IO操作函数											   
#define	DS18B20_DQ_OUT PBout(15) //数据端口	PA15,改为PB15
#define	DS18B20_DQ_IN  PBin(15)  //数据端口	PA15,改为PB15

更改后,可以通过编译,下载后,KEIL也能扫描到设备。
STM32芯片烧录的三种方式介绍,MDK、STM32 ST-LINK Utility以及STM32CubeProgrammer_第30张图片

你可能感兴趣的:(STM32开发学习笔记)