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

  • 1 概述
    • 1.1资源概述
    • 1.2 STM32串口烧录方式
  • 2.KEIL软件下载介绍
  • 3 STM32 ST-LINK Utility介绍
    • 3.1 windows操作系统
    • 3.2 Ubuntu操作系统中烧录
      • 3.2.1 软件安装
      • 3.2.2 软件烧录
      • 3.2.3 使用GUI界面进行烧录
      • 3.2.4 更多详细信息
  • 4 STM32CubeProgrammer
    • 4.1 使用STLINK进行下载
    • 4.2 使用串口进行下载
  • 5 官方正版STLINK仿真器
    • 5.1 STLINK V3 mini下载器
    • 5.2 集成在官方开发板上的STLINK
  • 6 连接异常处理
    • 6.1 能连接但下载报错解决方案
    • 6.2 特殊IO口使用导致烧录一次程序后SWD口不能用
    • 6.3 能识别到芯片,但是下载时弹出报错对话框
  • 7 stlink对芯片的部分Sector进行擦除

1 概述

1.1资源概述

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

1.2 STM32串口烧录方式

启动模式说明说明,我们选择系统存储器启动。

内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程: ● 对于小容量、中容量和大容量的产品而言,可以通过USART1接口启用自举程序。串口烧录的原理就是利用这个自举程序读取串口的数据,对内部Flash进行擦写,实现程序的烧录。
使用串口进行烧录,上位机可采用FLYMCU,然后通过USB转串口线(或者板)给目标设备进行烧录。需要注意的是,如果是M3内核非互联网型的板子这里的串口必须是串口1,对应为GPIO9和GPIO10。如果是M4内核,可以是下述端口。
● USART1(PA9/PA10)
● USART3(PB10/11 和 PC10/11)
● CAN2(PB5/13)
● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)。

BOOT1设为0,BOOT0设为1,按复位键即可进入串口下载模式,打开FLYMCU软件,选择正确的串口,点击读器件信息,显示连接成功。

打开所需要下载的HEX文件,这里由于电路上没有自动复位进BOOT区的电路(正点原子部分高级一点的板子有),我们选择不使用RTS和DTR。点击开始编程。直至下载成功。

下载完成后,将BOOT0跳线跳到0,按一下Reset键,程序即可正常运行。
使用这种串口方式烧录时,若选择STLINK进行烧录,将会报错。未检测到STLINK错误提示。需要使用另外的工具进行烧录。

2.KEIL软件下载介绍

可以使用KEIL内部集成的STLINK组件进行烧录,使用此种方式进行烧录时,将STLINK连接到电脑,在KEIL中可以检测到STLINK。
建立工程并编译通过后,可以实现内部集成的烧录工具实现对目标开发板(芯片)的烧录工作。

缺点是显而易见的,当我们工程文件缺失,只有烧录目标程序.bin或者.hex文件时,我们就不能通过这种方式进行烧录操作。接下来我给大家介绍两个ST官方的烧录软件,可以在ST官方网站上下载到。分别是STM32 ST-LINK Utility和STM32CubeProgrammer。

3 STM32 ST-LINK Utility介绍

3.1 windows操作系统

上位机可采用ST官方的STLINK软件,然后通过STLINK模块给目标设备进行烧录。

此软件需要使用STLINK仿真烧录器,支持.bin/.src/.hex/.src/.s19五种格式的烧录文件下载。烧录文件在MDK软件编译工程时会自动生成。正点原子的例程烧录文件位于OBJ文件夹中(.hex)。如果是使用STM32CUBEIDE生成的工程,编译后烧录文件位于Debug文件夹中(.bin)。

这个软件支持开发板板载的STLINK V2.1进行烧录操作,不会提示需要固件升级等任何错误。具备烧录软件和芯片已烧软件比对灯功能。软件体积小巧,非常好用。

3.2 Ubuntu操作系统中烧录

3.2.1 软件安装

软件直接使用命令行安装即可,UBUNTU的源自带此软件,无需在github上下载源码编译安装。

//安装STLINK
sudo apt install stlink-tools//查看STLINK的版本,确认是否安装成功,如果成功会返回版本号
st-info --version//安装STLINK-GUI界面
sudo apt install stlink-gui//使用命令行进行下载
sudo st-flash write test.bin 0x8000000

使用命令行进行软件的烧写工作,下载命令的格式,比如说可以使用st-flash erase对芯片进行擦除

whs@whs-hp:~/Downloads$ st-flash
invalid command line
stlinkv1 command line: ./st-flash [--debug] [--reset] [--format <format>] [--flash=<fsize>] {read|write} /dev/sgX <path> <addr> <size>
stlinkv1 command line: ./st-flash [--debug] /dev/sgX erase
stlinkv2 command line: ./st-flash [--debug] [--reset] [--serial <serial>] [--format <format>] [--flash=<fsize>] {read|write} <path> <addr> <size>
stlinkv2 command line: ./st-flash [--debug] [--serial <serial>] erase
stlinkv2 command line: ./st-flash [--debug] [--serial <serial>] resetUse hex format for addr, <serial> and <size>.fsize: Use decimal, octal or hex by prefix 0xXXX for hex, optionally followed by k=KB, or m=MB (eg. --flash=128k)Format may be 'binary' (default) or 'ihex', although <addr> must be specified for binary format only../st-flash [--version]
example write option byte: ./st-flash --debug --reset --area=option write 0xXXXXXXXX
example read option byte: ./st-flash --debug --reset --area=option read > option_byte

3.2.2 软件烧录

软件下载示例,烧录文件为bin格式,需要带地址信息,sudo为非必须的,这里使用的版本是1.6.0

whs@whs-hp:~/STM32CubeIDE/workspace_1.6.1/Cube_fl03_led/Debug$ sudo st-flash write Cube_fl03_led.bin 0x8000000
[sudo] whs 的密码:
st-flash 1.6.0
2021-08-27T00:28:36 INFO common.c: Loading device parameters....
2021-08-27T00:28:36 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410
2021-08-27T00:28:36 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2021-08-27T00:28:36 INFO common.c: Attempting to write 15400 (0x3c28) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08003c00 erased
2021-08-27T00:28:36 INFO common.c: Finished erasing 16 pages of 1024 (0x400) bytes
2021-08-27T00:28:36 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id
2021-08-27T00:28:36 INFO flash_loader.c: Successfully loaded flash loader in sram16/16 pages written
2021-08-27T00:28:37 INFO common.c: Starting verification of write complete
2021-08-27T00:28:37 INFO common.c: Flash written and verified! jolly good!
whs@whs-hp:~/STM32CubeIDE/workspace_1.6.1/Cube_fl03_led/Debug$

当烧录文件为hex格式时,由于hex文件里边包含地址信息,因此不需要再指定地址了,但是需要指明烧录的格式。

whs@whs-hp:/media/whs/HP_D/STM32/F103/trunk/FSMLED/Project$ st-flash --format ihex write output\(mdk\).hex

3.2.3 使用GUI界面进行烧录

安装STLINK-GUI后,可以使用GUI程序进行下载,GUI的显示界面如下

3.2.4 更多详细信息

命令行模式仅支持V1和V2版本的仿真器,并不支持V3版本的仿真器。
更多详细信息,可以参见GitHub的官方资料

https://github.com/stlink-org/stlink

4 STM32CubeProgrammer

4.1 使用STLINK进行下载

STM32CubeProgrammer软件是ST新推出的烧录软件,支持更多的方式设置,官方定位是替代ST-LINK Utility。打开如下图所示,支持STLINK、USB、UART以及OTA(均需要对应的烧录工具)下载,支持SWD和JTAG。但是需要说明的是,这个软件烧录时,需要STLINK固件为最新。使用正点原子Nano开发板时,会提示软件非最新,不能进行连接。

弹出的固件需要升级的错误

如果买的是官方出品的STLINK,可以正常对固件进行升级,如果不是官方的烧录器,升级前请三思,升级后有可能导致烧录器不能正常使用。下图为点击firmware update后出现的弹框。

使用正点原子Nano开发板也无需担心会升级导致不能用,因为你尝试升级时会弹出另外一个提示,需要额外的9856B空间,不能进行升级,原因是我们板载的STLINK芯片采用的STM32F103C8T6只有64K空间,这部分空间已经全部用完,不能再写入更新更大的固件。

另外这个软件也集成在STM32CUBEIDE软件中,STM32CUBEIDE为ST将eclipse、STM32CUBEMX和STM32CUBEPROGRAMMER集成整合到一起的综合编程软件,目前用的人还很少,挺好用,而且免费,跨平台。连接成功的示意图如下,默认会把芯片内部的程序读出来,可以对此程序进行另存为等操作。

使用此烧录工具,烧录时还可以对芯片进行读写保护,避免芯片被恶意读出盗窃烧录底层。

在ubuntu中此软件和windows下是相同的。

4.2 使用串口进行下载

我们在此软件中,可以使用串口进行连接烧录,这样做的好处是不需要使用第三方串口烧录工具,另外cubeprogrammer也不会对STLINK的版本信息进行核验。

1.BOOT设置,将BOOT1跳到0(开发板已经默认拉到地),BOOT0跳到1(3.3V)。按一下RESET按键

2,打开软件,选择Uart和正确的COM口,由于用的是串口,因此就和stlink无关了,用一个USB转串口线也可以进行下载。

3,连接成功后如下

4,选择要下载的文件下载,下图所示已经下载成功。

5,将BOOT0跳线还原到BOOT0。若上图勾选了Run after programming,则无需按Reset即会运行新程序,若没有勾选,按一下Reset按键。

5 官方正版STLINK仿真器

5.1 STLINK V3 mini下载器

这里我推荐一款官方的正版仿真器,即STLINK V3 MINI,ST官方近两年推出,采用了STM32F723的芯片,比常见的STLINK V2拥有更多的功能,更快的速度。

这个仿真器非常小,比通常的U盘还小一号,且排线为14P 1.27mm间距的排线。因此不支持常见的2.54杜邦线连接,需要额外的转接板进行转接。这里需要特别注意。此款仿真器支持一个虚拟的串口(13脚和14脚),支持SWD和JTAG烧录,端口定义如下:

嘉立创白嫖自制的转接板,此板的J4插座还支持NUCLEO的SWD扩展口的转接,按键为RESET按键,可以下载完成后手动对烧录好的芯片进行复位。

背面引出的串口,本想放在正面的,结果实物比封装大,翻车了,而且1.27的插件不是一般难焊,很容易连锡。

STLINK V3版本的速度比V2的要快,缺点是不支持山寨芯片,接上后提示无法连接到目标,而STLINK V2是支持山寨STM32芯片的。目前V3系列暂时未发现网上有仿造的产品出售。这款性价比比较高,淘宝价格80元,推荐各位购买。

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

官方的开发板集成了STLINK,这个STLINK可以对外进行烧录。这块部分可以裁下来单独使用。当烧录外部设备时,需要将外部烧录跳线拔下来,然后将烧录口和目标板通过杜邦线进行连接。不同的开发板对应的STLINK版本不同,F103对应的是V2.1,F7开发板对应的是V3.0。

可以做一个6PIN转20PIN的转接板,转接到20pin上,成为一个标准的下载器。

6 连接异常处理

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

使用杜邦线进行SWD连接时,如果是散线或者线缆过长,会出现KEIL能连接上,但是下载报错(flash错误或者M3错误)的故障。将线缆更换为排线或者降低线缆的长度可以解决这个问题。

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

JTAG或者SWD端口被占用,但是却没有进行正确的配置。
在开发STM32F407芯片时,调试18B20温度程序时发现一个问题,当下载完一次程序后,SW就失去连接

强制烧录时报错信息如下:No target connected

报错信息Error:Flash Download failed-Target DLL has been cancelled

使用utility连接也会报错,报错信息如下:Cannot connect to target

按照提示,在烧录时按Reset按键,成功烧录了软件。使用一行行注释排除的方法,最后定位在DS18B20_Init初始化函数这。程序使用了PB15作为了18B20的输入,这个口也是JTAG的接口,在使用时,不能按照常规GPIO口进行配置。使用时,需要先禁止JTAG,然后使能SWD。如果弄成了最后一种模式就SW下载方式无效,需要按住Reset复位重新连接烧录了。

为了验证这个想法,在程序中将A15改为B15。更改初始化函数

u8 DS18B20_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA时钟,改为使能GPIOB时钟//GPIOA15,改为了GPIOB15GPIO_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;//50MHzGPIO_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输出模式,改为PB15IO操作函数
#define DS18B20_DQ_OUT PBout(15) //数据端口 PA15,改为PB15
#define DS18B20_DQ_IN  PBin(15)  //数据端口 PA15,改为PB15

更改后,可以通过编译,下载后,KEIL也能扫描到设备。

6.3 能识别到芯片,但是下载时弹出报错对话框

使用5.34版本的Keil,能识别到芯片,但是下载时报错 Command not supported

点击确认下,报另外一个错误

原因是新版本软件对未能及时升级STLINK固件的烧录器进行了封杀。需要升级仿真器的固件。当然盗版仿真器不能升级固件,唯一的解决办法是将Keil进行降级处理,降低到5.27版本。下图是在keil升级固件的方法。用正版仿真器实验过,没有这个问题。

7 stlink对芯片的部分Sector进行擦除

在使用Bootloader+App的使用方式时,我们烧录App时,如果每次都对全片进行擦除,那么每次的Bootloard将会被我们擦除掉,导致程序需要下载两遍。我们可以选择对部分的Sector进行擦除,而不是全部。
案例:某个Bootloader对应开始地址为0x8000000,结束地址为0x80042B0
APP应用对应的首地址为0x8010000

结束地址为0x8015BD0

当我们不希望擦除Bootloader时,我们可以选择Sector擦除,擦除APP对应的地址段。

此时程序回退到没有下载APP时的运行状态。可以继续下载新的APP应用程序。

STM32芯片烧录的三种方式介绍,串口、STM32 ST-LINK Utility以及STM32CubeProgrammer相关推荐

  1. python的命名空间_python中命名空间的三种方式介绍(附示例)

    本篇文章给大家带来的内容是关于python中命名空间的三种方式介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. python中的命名空间分三种: 内置的命名空间,在启动解 ...

  2. TOM163邮箱如何登陆,163vip邮箱登录三种方式介绍,妥妥干货分享

    邮箱是日常办公中常用的工具,那么如何登录并使用邮箱呢?TOMVIP邮箱通常有三个不同的用户端,有邮箱网页端.客户端以及手机端,下面为大家讲讲如何在三个不同的用户端登录使用邮箱吧! 网页端登录邮箱 网页 ...

  3. 【小项目关键技术】硬件通信三种方式、串口、IIC、SPI

    文章目录 串口UART: IIC SPI SWD 仿真下载接口 串口UART: 引脚 功能 VCC GND TXD 发送数据输出引脚. RXD 接收数据输入引脚. IIC 引脚定义为:SCL.SDA ...

  4. 课程介绍 复习 创建对象的三种方式 自定义构造函数创建对象 工厂模式创建对象

    课程介绍 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...

  5. 简单介绍apache虚拟主机配置的三种方式

    本文主要介绍了apache虚拟主机配置的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 记事本打开httpd.conf文 ...

  6. 时序预测的三种方式:统计学模型、机器学习、循环神经网络

    作者 | luanhz 来源 | 小数志 导读 时序预测是一类经典的问题,在学术界和工业界都有着广泛的研究和应用.甚至说,世间万物加上时间维度后都可抽象为时间序列问题,例如股票价格.天气变化等等.关于 ...

  7. android 定位的几种方式介绍

    [地理位置] android 定位的几种方式介绍 开发中对于地图及地理位置的定位是我们经常要用地,地图功能的使用使得我们应用功能更加完善,下面 www.androidkaifa.com 总结了一下网络 ...

  8. 全站仪与计算机之间的数据传输,【科普】全站仪数据传输的三种方式

    导 读 全站仪的三种数据传输方式:串口.USB.SD卡.请收藏 ! 一般而言,全站仪的数据传输方式有三种,分别是通过串口.USB.SD卡三种方式,因为电脑配置等因素的不同,一些数据传输存在一些微妙不同 ...

  9. Quartus II三种方式实现D触发器及时序仿真

    Quartus II三种方式实现D触发器及时序仿真 一.准备工作 (一)软件下载 (二)D触发器原理 1.简介 2.D触发器的基本结构与信号输入输出关系 3.状态转移真值表以及状态转移图 二.实验要求 ...

最新文章

  1. 图的广度优先遍历算法流程图
  2. Java语言的循环控制结构
  3. 常考数据结构和算法:链表中环的入口节点
  4. 在Spark上用Scala实验梯度下降算法
  5. GSON反序列化时,字符串被转换成科学记数法的问题处理
  6. AlarmManager类的应用(实现闹钟功能)
  7. Python3实现最小栈
  8. php jpeg不支持,php jpeg不支持怎么办
  9. decaNLP-一个可以同时处理机器翻译、问答、摘要、文本分类、情感分析等十项自然语言任务的通用模型
  10. sql 结果相加_SQL联结语句
  11. 基于jsp网上书店设计与实现毕业设计论文
  12. 压倒eBay 挑战亚马逊 Shopify到底厉害在哪儿?
  13. 百度暑期前端实训DAY1心得
  14. 路由器桥接LAN接LAN口(改DHCP以及详细避坑教程)
  15. CEO修炼手册:识人、识人还是识人
  16. 阿里视频直播自定义推拉流地址生成
  17. mysql 分组 列转行,mysql列转行以及年月分组实例
  18. HZNU Training 2 for Zhejiang Provincial Collegiate Programming Contest 2019
  19. 设计模式-请假流程-责任链模式
  20. 手机PIN、PUK码之谜

热门文章

  1. python:matplotlib基础(3)
  2. 光猫+路由器双工配置
  3. hihocoder1383 The Book List 字典树
  4. 力扣热门题目简单部分合集(共23道)
  5. ffmpeg实现视频和音频分离,并且将声音切片
  6. o2o实战报错:addShopImg error:null / character to be escaped is missing
  7. 计算机毕业设计房地产客服管理系统xns程序
  8. C语言实现24点小游戏
  9. qq公众平台出错了609_生鲜农贸行业订单容易出错,生鲜配送管理系统帮您来解决...
  10. lisp语言(转自百度)