如何使用串口来给STM32下载程序

前言

第一次学习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系列也可以使用串口下载程序,但擦除时间很长,有十几秒种。推荐大家尽量还是使用调试器来进行程序的下载和调试,方便又好用,单片机开发必备!

参考资料


历史精选文章:



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

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

原文地址:https://www.cnblogs.com/whik/p/10567287.html

时间: 2024-10-06 21:02:01

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

stm32下载程序,拔了调试器不能运行程序

A:肯定是只拔了仿真器与电脑连接的那端,然后把另外端依然接在板子上.我说的没错吧 B: 对的,这样就会一直复位吗 这是复位的问题,当JLINK在板子上连接的时候,断电情况下,会一直把RESET拉低,导致芯片一直处在复位状态,所以不能正常工作. 把jlink或stlink和stm32板的的连接排线(jtag 接口)也拔掉,这个时候主板就可以工作了. https://www.amobbs.com/thread-5332856-1-1.html http://bbs.21ic.com/icview-4

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

一开始建立了工程,然后程序下载都很正常.不知道什么情况自己下载代码之后,再重新下载代码无法成功. 我按照提示找了一下FlashStm32f30x8.flash这个文件,却发现IAR的目录下没并没有.又怀疑是IAR文件丢失. 重新安装IAR,却发现问题仍然继续.   ~~~~感觉像是芯片坏了~~~ 于是通过STVP工具,读取一下. 奇迹发生了,竟然可以读取程序.  嗯~~那可以排除芯片的问题. 好吧,那我重新用IAR下载应该可以吧.  于是重新下载程序, 晕~~~居然还是弹出那个错误. 难道自己的

Duanxx的STM32学习:STM32下载方式选择

前几天熟悉了STM32的启动方式,主要由Boot0和Boot1设置 现在需要解决的就是STM32的下载的问题. 一开始的时候,我选择的是SWD下载,这种下载方式需要Boot0=0,Boot1=0,占用两个线,同时需要两个电阻和一个电容: 但是我的设计上需要使用串口,利用串口下载程序也是下载到Main Flash中,既然这样的话,直接使用串口下载程序就可以了. 但是使用串口下载程序需要反复的将Boot0抬高,然后复位,然后将下载程序,然后将Boot0拉低,这个操作比较的复杂. 在正点原子的开发板上

jz2240用tftp下载程序步骤

首先jz2440设备为nor启动,上电,进入menu 1.配置IP set addrip 192.168.4.111 set serverip 192.168.4.112 2.下载程序 打开tftp软件,设置目标文件路径 打开串口助手:使用命令下载程序 tftp 30000000 led_on.bin 3.查看分区 mtd 4.察出分区 nand erase u-boot 5.写分区 nand write 30000000 u-boot 6.断电,设置为nand启动,上电 7注意: 每次jz24

STM32下载报错invalid rom table

stm32单片机也用了蛮长时间了,这次遇到的小问题还是蛮有趣的,在这里分享给大家.一起共勉: 今天调试一个stm32板子和往常的习惯一样,会一部分一部分的焊接,今天调试发现下载程序时候报错:invalid rom table.复制到百度里面搜索发现 不是我第一个遇到这样的问题,请参考如下网页: http://blog.csdn.net/yufengzheyang/article/details/76954121 他们遇到超频的时候死掉的问题,我试了是拉高boot1,boot0低电平可以clear

第3章 如何用DAP仿真器下载程序

第3章     如何用DAP仿真器下载程序 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 3.1 仿真器简介 本书配套的仿真器为Fire-Debugger,遵循ARM公司的CMSIS-DAP标准,支持所有基于Cortex内核的单片机,常见的M3.M4和M7都可以完美支持,其外观见图 31. Fire-Debugger支持下载和在线仿真程序,支持XP/WIN7/WIN8/WIN

STMF103系列单片机无法调试和下载程序的原因及其解决

时间:2018/11月/15 经过实践中发现,使用stm32cubeMX 自动生成的代码,烧入单片机后第一次,断电重启后能够运行. 但是,再次对其进行操作的时候,发现无法进行调试,也无法对其下载程序. 怀疑是硬件问题,比如怀疑是硬件不稳定导致的.但是实际上原因并不是. 换了另外一块主芯片一样的不同设计的板子,依然发现了类似现象. 怀疑是软件问题. 经过同事指导,将boot0.boot1的跳线接到高电平,不从内部flash启动. 发现可以在IDE环境下(比如keil v5)对其进行下载程序.这一次

台达PLC实现远程下载程序

台达PLC实现远程下载程序 日期:2019-04-27                    时间    08:33:57 让物联变得更简单 18-09-2411:25 明明在公司调试没问题的设备一到现场就状况百出,往往需要升级软件来解决问题.工程师就要满世界出差,项目成本增加不少.其实优更好的方案:可以通过为PLC配备远传串口终端实现PLC程序的异地远程下载和监控. 其原理如下: 在传统串口通信的基础上,通过搭载物联网技术实现串口数据的远程交互.常用作PLC远程下载程序.设备远程监控.实验数据

P2921下载程序小常识

小常识(非常重要):TXD:发送端,一般表示为自己的发送端,正常通信必须接另一个设备的RXD.RXD:接收端,一般表示为自己的接收端,正常通信必须接另一个设备的TXD.正常通信时候本身的TXD永远接设备的RXD!自收自发:正常通信时RXD接其他设备的TXD,因此如果要接收自己发送的数据顾名思义,也就是自己接收自己发送的数据,即自身的TXD直接连接到RXD,用来测试本身的发送和接收是否正常,是***快***简单的测试方法,当出现问题时首先做该测试确定是否产品故障.也称回环测试. 电平逻辑:TTL电