前言

第一次学习STM32的时候,不知道有调试器这个东西,所以一直是通过串口来给STM32下载程序,下载速度也还算可以,一般是几秒钟完成。后来用了调试器,可以直接在Keil环境下进行下载,而且还可以进行在线调试,所以后来就很少使用串口来下载程序了。前几天在uFUN试用群里看到有几个朋友在使用串口下载程序时,遇到了各种各样的问题,所以在这里简单介绍一下如何通过串口来给STM32下载程序。

STM32的启动模式介绍

从STM32参考手册上,可以查阅到,STM32的启动模式,共有下列三种,可以通过BOOT0和BOOT1电平的不同组合,来选择不同的启动模式。

关于这几种模式的介绍,下面是我个人的理解:

主闪存启动模式:即运行模式,单片机上电即运行程序。

系统存储器启动模式:即串口下载模式。上电之前要先设置BOOT0=1,BOOT1=0,然后才能通过串口下载程序。或者在已经上电的情况下,设置BOOT0=1,BOOT1=0,然后按一下复位键,这样也能通过串口下载程序。

SRAM启动模式:即调试模式。假如我只修改了代码中一个小小的地方,如果直接擦除整个Flash,比较费时,而且Flash的擦写次数也是有限制的。所以可以考虑从RAM中启动代码,用于快速的程序调试,等程序调试完成后,再将程序下载到Flash中。

有的朋友可能遇到过这种情况:程序第一次下载的时候可以运行,但是掉电重启之后,程序就不能运行了。这种情况就有可能是把BOOT设置成了串口下载模式,所以掉电之后,并不会自动运行。如果想要即使掉电重启也能直接运行程序,可以把BOOT设置为主闪存启动模式,即BOOT0=0。

安装USB串口驱动

在进行串口下载程序之前,如果串口芯片的驱动程序没有安装,那么电脑不能识别串口,如上图所示,设备管理器里有一个未识别的设备。在安装串口驱动之前,要先确定开发板所使用的串口芯片,我们的uFUN开发板使用的是CH340串口芯片。这里我提供了几个常用串口芯片的驱动程序下载地址,大家如果使用其他的串口芯片,要安装对应的驱动程序:

如果驱动安装成功,在设备管理器里可以看到该设备对应的串口号:

设置启动模式为系统存储启动模式

上电前,设置BOOT0=1,BOOT1=0。或者是在上电后,设置BOOT0=1,BOOT1=0之后,然后按一下复位按键。这两种方式都可以让设置为系统存储启动模式,从而通过串口下载程序。

参考uFUN的原理图:

可以看出,BOOT的选择是通过拨码开关实现的。S1对应BOOT1,S2对应BOOT0,开关处于ON状态,BOOT直接接地,为低电平0;开关处于OFF状态,BOOT上拉为高电平1,即:

这一点和【uFun 开发板快速入门指南 V10】介绍的有所出入,在这里手动@管理员核对一下。

对于uFUN开发板,要切换到串口下载模式,只需要设置S1=ON,即BOOT1=0,S2=OFF,即BOOT0=1,就可以进行下一步的程序下载。如下图所示:

使用FlyMCU下载程序

STM32串口下载软件主要两个,一个是国人开发的FlyMCU,另一个是ST官方的Flash Loader Demonstrator,这两个软件的下载方法我都会介绍,不过我个人认为FlyMCU更简单易用一些。

FlyMCU是由单片机在线编程网开发的一款串口下载软件,我使用的是V0.188版本,主界面如上图所示,如果大家想获取最新版的软件可以到官方网站下载。我去官网上看了一下,又发布了免费的Free ISP软件,可以支持STM32和LPC2xxx程序的下载。如果有朋友从事LPC2xxx MCU的开发,而又没有调试器,可以尝试一下这个软件。 好了,话不多说,下面来看一下如何使用FlyMCU通过串口来给uFUN开发板下载程序。

  • 1.软件的下载

可以到官方网站下载最新版,或者是下载我使用的这个版本,FlyMCU V0.188

  • 2.选择COM号

确保启动模式已经设置为串口下载模式,BOOT1=0,BOOT0=1,即S1=ON,S2=OFF,然后把开发板连接电脑上电,打开软件,选择PORT菜单下对应的COM口。

  • 3.加载hex文件

加载生成的hex文件,并勾选右边的编程前重装文件,这样,就不用每次下载程序,重新加载hex文件了。

  • 4.下载程序

勾选校验编程后执行这两个选项,取消勾选编程到FLASH时写选项字节,然后点击开始编程按钮,如果正常下载的话,右边会输出下载的信息,如果成功下载并运行,最后会输出:

共写入8KB,进度100%,耗时4750毫秒
成功从08000000开始运行

表示程序成功下载。

编程后执行:这个选项是指,程序下载完成后自动运行,而不用切换到BOOT到主闪存启动模式,但是,掉电重启,程序不会直接运行。如果要上电即运行此程序,还需要把BOOT设置回主闪存启动模式BOOT0=0,即S2=ON。

编程到FLASH时写选项字节:这个选项不要勾选,如果勾选了,可能会导致下载失败,或者是运行失败,甚至会导致芯片的锁死。所以,这个选项一定不要勾选。

使用Flash Loader Demonstrator下载

Flash Loader Demonstrator是ST官方的串口下载软件,可以用于STM32系列单片机的程序下载,官网地址:STM32 Flash loader demonstrator

  • 1.软件的下载

通过上面的官网链接,可以下载到最新2.8.0版本的Flash Loader Demonstrator,但是如果要想下载,需要先登陆ST官网的账号,如果不想注册账号的话,可以通过下面的链接下载,这个是我之前找的,版本是2.6.0的,但不影响程序的下载:Flash_Loader_Demonstrator_v2.6.0_Setup

  • 2.连接芯片

和FlyMCU不同的是,要想下载程序,必须要经过连接芯片,等一系列步骤才能完成下载,这一点,也是我觉得这个软件不好用的原因。

打开软件,选择板子串口对应的COM号,波特率可以调成最高,这样下载速度会快一点,但是有的串口芯片,不能支持很高的波特率。

如果和板子连接成功的话,会检测到目标STM32芯片的Flash的大小,我们的uFUN开发板是使用STM32F10RC,256KB Flash。

这一步,可以查看当前Flash各页的读写情况,绿色的锁表示可读/可写,如果芯片被加了读保护,或者写保护,部分页会显示为红色的锁。

![](

  • 3.程序的下载

先加载hex文件,下面的擦除选项可以选择:擦除必要的页、不擦除或者是全片擦除,这里保持默认配置就行,直接点击Next进行程序的下载。

如果下载成功,会显示

这里如果点击Back是不能进行第二次程序下载的,必须重新打开,连接,才能下载。

另外,除了STM32系列单片机程序的下载,它还支持ST公司的STM8的程序下载。

总结

STM32只能通过串口1进行程序下载,即PA9、PA10,其他串口都不具备这个功能,所以,如果自己设计板子,要注意这一点。一些联网的设备进行固件更新也是这个原理,即把WIFI模块,连接到串口1,实现程序的在线升级。当然,具体的实现还是很复杂的,而且还涉及到Bootloader程序的开发,这就是另外一个方面了。虽然STM32的F4系列也可以使用串口下载程序,但擦除时间很长,有十几秒种。推荐大家尽量还是使用调试器来进行程序的下载和调试,方便又好用,单片机开发必备!

参考资料


历史精选文章:


欢迎大家关注我的个人博客

或微信扫码关注我的公众号

如何使用串口来给STM32下载程序的更多相关文章

  1. stm32下载程序,拔了调试器不能运行程序解决方案

    A:肯定是只拔了仿真器与电脑连接的那端,然后把另外端依然接在板子上.我说的没错吧 B: 对的,这样就会一直复位吗 这是复位的问题,当JLINK在板子上连接的时候,断电情况下,会一直把RESET拉低,导 ...

  2. 使用st link v2向stm32下载和调试程序

    st官网 正版ST-link/V2引脚定义和注意事项 分为ST-LINK/V2和ST-LINK/V2-ISOL两种型号 是STM8和STM32微控制器(MCU)系列的在线调试器和编程器(还是下载器.仿 ...

  3. 图解Stm32使用jlink下载程序时jtag接口(SW和JTAG模式)的简化方法

    转自: http://www.it165.net/embed/html/201308/2332.html 用过stm32的人都知道stm32有两种常用下载程序的方法,用串口和jlink.串口下载方法和 ...

  4. 关于第一次STM32连接电脑下载程序

    安装了Keil(ARM)版本之后,不管是自己编程,还是配套的程序运行.我们都想把它下载到STM32芯片里面,在板子上运行.这里介绍几种方法. 1.用J-LINK下载调试. 这个工具,可以直接点击kei ...

  5. STM32无法使用IAR下载程序问题

    一开始建立了工程,然后程序下载都很正常.不知道什么情况自己下载代码之后,再重新下载代码无法成功. 我按照提示找了一下FlashStm32f30x8.flash这个文件,却发现IAR的目录下没并没有.又 ...

  6. 【STM32】无法下载程序

    错误: 使用keil MDK向STM32下载时出现各种错误 Internal command error.Error:Flash download failed.  Target DLL has be ...

  7. Ubuntu环境下载程序到STM32

    1 JLink方式 1.0 下载JLink 传送门:SEGGER官网 图1.0 下载JLink 1.2 安装JLink 双击打开下载文件:JLink_Linux_V644i_x86_64.deb 1. ...

  8. 关于STM32下载问题的简单理解

    首先STM32分为两种下载方式1.ISP(IN-SYSTEM-PROGRAMMING在线编程)  2.JTAG 这里简单谈谈对ISP下载的理解: ISP下载是51单片机,STM等单片机比较常见的一种下 ...

  9. STM32下载方法

    一.JLINK下载方法 1.硬件设置 Boot0,Boot1 = 0,*(测试通过) Boot0,Boot1 = 1,0或者0,1(未测试) 2.软件设置 MDK设置 ① 选择Project -> ...

随机推荐

  1. IOS 多文件上传 Java web端(后台) 使用List<MultipartFile> 接收出现的问题

    先上正确的示例: 主要是设置我们的request的content-type为multipart/form-data NSDictionary *param = @{@"assignee&qu ...

  2. Python基础点

    写这篇的目的并不是要把python的基础知识汇总一遍,而是着重记录一些实际编写代码时遇到的常用/重要的内容 以点的形式记录,之后遇到的内容会慢慢补充进来 1. 斜杠 / :斜字第一笔, 转义用反斜杠 ...

  3. 【redis专题(4)】命令语法介绍之sorted_set

    有序集合可以模拟优先级队列的实现 增 zadd key score1 value1 score2 value2 .. redis 127.0.0.1:6379> zadd stu 18 lily ...

  4. tkinter中combobox下拉选择控件(九)

    combobox控件,下拉菜单控件 combobox控件在tkinter中的ttk下 简单的实现下: import tkinter from tkinter import ttk # 导入ttk模块, ...

  5. 02-OpenLDAP配置

    OpenLDAP配置 在OpenLDAP 2.4版本中,配置OpenLDAP的方法有两种:一种通过修改配置文件实现配置,另一种通过修改数据库的形式完成配置. 通过配置数据库完成各种配置,属于动态配置且 ...

  6. Linux RCU 机制详解

    1.简介: RCU(Read-Copy Update)是数据同步的一种方式,在当前的Linux内核中发挥着重要的作用. RCU主要针对的数据对象是链表,目的是提高遍历读取数据的效率,为了达到目的使用R ...

  7. The Art of Unit Testing With Examples in .NET

    The Art of Unit Testing With Examples in .NET

  8. Python getting started guide

    Get up in the morning. The first thing is to write a blog, although it uses machine translation, it ...

  9. Android 用webService产生java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive错误的解决(转)

    在做android  Webservice开发的时候一般情况下大家接受webservice服务器返回值的时候都是使用 SoapObject soapObject = (SoapObject) enve ...

  10. PyQt5--TextDrag

    # -*- coding:utf-8 -*- ''' Created on Sep 21, 2018 @author: SaShuangYiBing Comment: ''' import sys f ...