FlyMcu串口下载&STLINK Utility

主要是教大家使用两个小软件,这两个软件也是比较常用的,里面有很多有意思的功能,可以给大家介绍一下。第一个是 Fly MCU 这个软件,这个软件可以通过串口给 STM32 下载程序啊,如果你没有 STLink 就可以用这个软件通过串口下载程序。第二个软件是 STLink Utility, 这个软件是配合 STLink 使用的一个工具啊,可以通过 STLink 给 STM32 下载程序,也可以进行一些其他的操作啊。总的来说,这两个软件的功能差不多,都可以下载程序。 Fly MCU 是串口下载, STLink Utility 是 STLink 下载。
那我们先看一下 FLY MCU 程序烧录软件啊,打开软件,这个软件是绿色软件,直接打开就能运行,不需要安装啊。这个软件的作用呢,如果你玩过 STC 的 51 单片机的话,应该知道 STC 单片机也有个程序烧录软件哈,叫 STC ISP, 可以通过串口给 51 单片机下载程序。这个 Fly MCU 就跟那个 STC ISP 的用途是一样的,都是串口下载。
那接下来我就演示一下串口下载的流程哈。首先硬件这里我们需要连接一个串口的电路,这个电路要能保证 USART1 和电脑进串口通信哈。这里必须要是 USART1,

因为我们这个芯片的串口下载只适配了 USART1 哈,接在其他 USART 上是不行的。那这里我的线已经接好了哈,接法和前几小节是一样的。
然后在软件上,我们随便打开一个示例代码,比如我这里拖出来了一个 LED 闪烁的代码作为演示啊。打开工程。为了实现串口下载,我们需要配置工程,生成一个 HEX 文件。点击工程选项,在 Output 选项卡里,把这个创建 HEX 文件的勾勾上啊。 OK,

这时再编译一下。下面信息多了一条创建 HEX 文件的信息啊,编译没问题,

我们就可以打开工程目录,在这个 objects 文件夹下找到我们刚才生成的 HEX 文件,这就是我们串口下载所需要的程序文件啊,

这部分流程和 51 单片机那里是一样的。接下来我们就可以用 FLASH MCU 下载程序了,首先上面先点搜索串口,然后波特这里选择我们串口通信的 com 号啊, BPS 波特率可以保持默认的 115200,这一部分和串口助手是一样的啊。接着选择程序文件,点击这里三个点的按钮,找到我们刚才生成的 hex 文件,在这个工程目录 objects 文件夹里,选中,打开。之后下面这些其他的配置哈,我们暂时先保持默认,目前对下载程序影响不大,等会再细说哈。

然后在开始编程之前,我们还需要配置 boot 引脚,让 STM32 执行 bootloader 程序,否则的话,点击开始编程。它会一直卡在这个位置哈。

如何进入 Bootloader 呢?我先演示流程哈,等会再解释。看下板子,第一步,找到这里的跳线帽,这两个跳线帽是用来配置 Boot 引脚的哈,把这里上面一个跳线帽,也就是配置 Boot0 引脚的跳线帽拔下来,

然后插在它右边两个针脚配置 Boot0 为一。

第二步,按下复位键,让程序重新开始运行。这里切换 Boot 引脚之后,一定要再按下复位键哈,因为 STM32 只有在刚复位时才会读取 Boot 引脚。程序运行之后切换看不太表示无效。那这样芯片就进入 Bootloader 程序了。

进入 Bootloader 程序之后, STM32 执行的程序就是不断接收 USART1 的数据刷新到主闪存。然后再回到 FLASH MCU 软件,点击开始编程,这时就可以看到下载过程成功运行哈,最后显示下载成功。这样我们这个 LED 闪烁的程序就通过 Bootloader 成功刷新到主闪存里了。

回到 STM32,目前 LED 还没有亮起来哈,这是因为目前 STM32 还在执行 Bootloader 的刷机程序,我们还需要把 Boot 引脚换回来,拔掉 Boot0 的跳线帽啊,换到左边两个引脚。

然后按一下复位,可以看到 LED 闪烁,程序运行正常啊。

那接下来我们来研究两个问题:
那接下来我们来研究两个问题,第一个问题,boot 引脚是干啥的?为啥这样配置?boot0 引脚又是干啥的?串口下载的原理是什么?
第二个问题,每次下载程序都要拔插两遍跳线帽,太麻烦了哈,有没有什么解决方法?
先看下第一个问题,串口下载的原理,我们看下 PPT 哈,之前这里我们讲过了,

STM32 的存储器映像在 ROM 区的 0x8000 位置,存储的就是编译后的程序代码,你把什么程序写到这个位置,STM32 就执行什么样的程序,如果想使用串口下载程序的话,我们只需要把程序数据通过串口发给 STM32,STM32 接收数据,然后刷新到 0800 这一块位置就行了,
但是接收并转存数据这个过程本身也是程序啊,如何利用程序实现自我更新,这是一个问题,就像是一个机器人给自己换电池一样,换电池需要先拆掉旧电池,再装上新电池,但是一旦把旧电池拆掉,机器人本身就无法工作了,这样之后装上新电池的工作就没法完成了,所以为了能让机器人自己换电池,我们还需要再额外做一个小机器人,需要换电池的时候就启动这个小机器人,小机器人完成整个换电池工作之后再返回大机器人运行,
那同理,STM32 通过串口进行程序的自我更新,就需要这样一个小机器人,这个小机器人就是 Bootloader ,Bootloader 是 ST 公司写好的一段程序代码哈,这段程序的存储位置就是 ROM 区的最后幺 f f f 零零零,这段区域叫做系统存储器哈 ,存储的是 Bootloader 程序,或者叫自举程序,用途是程序自我更新,串口下载哈,在更新过程中,Bootloader 接收 USART1 数据,刷新到程序存储器,这时主程序就处于瘫痪状态,更新好之后再启动主程序执行新程序,这就是串口下载的流程。如果你给手机或电脑重装过系统的话,就可以类比一下哈,这个 Bootloader 就相当于是手机的刷机模式或者电脑的 PE 系统啊,是辅助主程序进行自我更新的。
然后再往前翻一下,这里有一个启动配置,如何启动大机器人,如何启动小机器人,就由 Boot 引脚来决定,当 Boot0 为 0 时,就是主闪存,也就是 0x8000 的位置开始运行,启动大机器人,
当 Boot0 为 1,Boot1 为 0 时,就是从系统存储器,也就是 0x1FFFF000 开始运行,启动小机器人哈。最后还有一个 Boot0 和 Boot1 都为一,从 SRAM,也就是 2000 开始运行,这个比较高级哈,我们暂时不用,

然后下面这里写了,在系统复位后,System Clock 的第四个上升沿 Boot 引脚的值将被锁定,所以说每次切换 Boot 引脚之后都要按一下复位,好,到这里串口下载的原理就讲完了哈,
接下来我们来研究一下第二个问题,每次下载都要切换跳线帽,太麻烦了,怎么解决呢,刚才我们说了,想要程序自我更新,就必须有一个切换小机器人的过程,BOOT0引脚和 rst 复位引脚必须得有高低电平变化,那能不能我接两根线,当电脑点击下载时自动帮我设置一下BOOT0和 rst 的电平呢?答案是可行的哈,我们可以看一下这个串口模块的电路,
这里除了 txd 和 rxd 用于通信的引脚,还有 rts、cts、dtr 和 dsr,这些引脚都是流控的引脚哈,我们不使用流控,可以把它们当做普通的 gpio 来控制,其中 rts 和 dtr 是输出引脚,我们可以用这两个引脚来控制boot0和 rst 哈,当然在外围还需要设计一个控制电路,一般可以用两个三极管开关来进行控制哈,有关电路部分,大家可以网上搜一下 STM32 一键下载电路,里面都有设计方案和解释哈,当我们这个串口具备一键下载电路之后,就不需要再频繁切换跳线帽和按复位键了,非常方便。

回到 flag MCU,这下面有个下拉框,就是用来配置 DTR 和 RTS 的,

是高电平复位呀还是低电平复位呀等等配置,这些配置需要根据一键下载电路来算哈,一般最常用的配置是 DTR 的低电平复位,RTS 高电平进 bootloader,我们这个硬件哈目前没有一键下载电路,所以还是得手动切换跳线帽,那这里的下拉框选择哪个就无所谓了哈,
选好之后这里的信息可以看到哈,下载之前会给 DTR 和 RTS 置高低电平,以此切换大机器人和小机器人工作哈,

那没有一键下载电路,我们还有个缓招可以使用哈,就是勾上这里的编程后执行,这样试下看看,先切换跳线帽哈,复位进入 Bootloader,LED 就没有闪烁了,

回到这里,如果选择了编程后执行,需要去掉选项字节的这个勾,要不然下载之后会提示执行失败啊,

我们去掉一下开始编程,下载完成,然后看一下,这时程序直接就运行了,

即使现在跳线帽仍然处于 Bootloader 的状态,为啥呢?我们看一下这里,这里多了一条成功从 0800 开始运行,这,这是在软件上人工加入了一条跳转指令哈,这样就能执行主程序了,但是这样只是一次性的哈,我们复位一下看看,LD 不亮,程序仍然是 Bootloader,


不过这样也可以省很多步骤啊,我们可以切换到 Bootloader,不断的进行下载调试,然后调试完成之后再切换回主程序,这样就只只需要最开始和最后切换一下跳线帽就行了,比较省事哈,好,这个问题我也就讲这么多,
接下来我们继续来探索一下这个软件,这里面还有很多有意思的东西,首先是这个读 flash,我们点一下,然后放到桌面吧,起个名字 LED 保存,

这样就可以把芯片里的程序读出来哈,现在提示读取完成,


桌面上就出现了程序文件,这就有意思了是吧,比如你看到别人用 STM32 做了一个产品,你觉得不错就可以抄一下他的 PCB 板,然后程序文件呢,又可以通过这个软件读出来,这样就可以大批量山寨别人的产品了是吧,不过 STM32 也可以配置读保护哈,这个等会再说,但是反过来,如果你开发产品不注意这个问题的话,是不是一不小心程序就泄露了是吧,那我们看一下读出来的这个文件,这个文件是点 bin 格式?是的,里面记录的就是 STM32 从 0800 开始存储的程序数据哈,bin 格式是是没有地址信息的原始数据文件,我们之前生成的 hex 文件是有地址信息的啊,不过作为记录程序代码的文件,这两种格式的作用其实都是一样的。
这里还有个问题啊,就是这个 FLASH MCU 下载的时候只能选择 hex 文件,如果选择 bin 文件的话,下载就会报一个这样的错误啊,但是它读出来只能选 bin 文件,读出来的 bin 文件不能再下载回去了,有点折磨人哈,可能是软件设计的时候没考虑到这个功能,不过等会我们介绍 STlink Utility 的时候,这两个文件就都可以选择的哈,



那我们继续来看,点击这个清除芯片按钮试一下,这可以把主程序区域全部擦除哈,擦除之后所有的数据都是 FF 啊,之后读器件信息试一下,这时会把芯片的序列号什么的信息读出来哈,

然后这里显示我这个芯片的 Flash 容量是 256K,这个有点夸张哈,我们这个 C8T6 芯片的标称 Flash 容量是 64K,属于中容量产品啊,这里读出来却是 256K,直接成大容量产品了哈,我试过很多芯片,有的芯片是 64K,有的是 128K,还有的像我这样是 256K,这个我百度了一下,说是生产的时候为了省工序,很多型号是一个模子做出来的,但是 C8T6 只能保证前 64K 没问题。当然也还其他的说法啊,大家可以自行了解一下,这个问题并不是很大。

然后这个 RAM SP 和连续烧录模式目前用的不多啊,大家可以自行研究。最后我们再来研究一下这个选项字节,看一下 PPT 啊,之前我们也提到过选项字节。
看下 PPT 啊。之前我们也提到过选项字节,在这里,选项字节也是入目区最后的一小串存储单元,用途是存储一些独立于程序代码的配置参数。

那究竟是哪些参数呢?有什么作用呢?在这里就可以看到了。点击设置选项字节的按钮,选择 STM32F1 的这一项啊。

这个界面展示的就是选项字节里面的参数了啊。第一块就是读保护,刚才我们说了,如果你做产品不开启读保护,别人很容易就把你的程序偷走了。所以为了保护程序的安全,选项字节里就有一个参数可以配置读保护,这里可以看到,设成 A5 允许读出,设成 FF 阻止读出。注意一下哈,如果你阻止读出了,再回到 Keil 下载程序时就会失败。如果因为读保护导致下载失败,那需要再到这个地方来取消读保护哈,取消一下就正常了。另外在取消读保护时会同时清空芯片的程序啊,这样程序就不会被偷走了,这就是读保护功能。

接着下面还有一些硬件选项字节哈,其中包括看门狗啊,停机和待机模式不产生复位,还有几位,用户应该大概也许可以使用哈,这些了解一下就行,如果有需求的话可以用一下。然后是用户数据字节,这些东西如果你有需求的话可以自己使用哈。那选项字节里面的参数有什么好处呢?第一就是选项字节的数据相当于是世外桃源了哈,无论程序怎么更新,选项字节的数据都可以可以不变。你可以用这些字节来存储不随程序变化而变化的参数啊。另外选项字节还有一个好处就是可以用上位机很方便的修改。比如我们这个 FLASH MCU 或者 STLink Utility, 在上位机里可以直接修改选项字节的内容啊,是不是可以用作一些产品中可供用户配置的参数啊?
然后继续看最后一项就是写保护了。这里可以对 FLASH 的每几个页单独进行写保护啊。比如你在主程序的最后几页写了一些制定的数据,不想在下载的时候被它除了,就可以把最后几页设置写保护锁起来。设置写保护之后就无法再写了哈。如果想再次写入的话,解除写保护就行了。另外注意一下,设置写保护之后再下载,如果需要写入保护区的话就会出错啊。比如你把最前面几页写保护了,下载一次之后再下载肯定就会出错。而它这个软件设计哈,不能单独写入选项字节,只能下载 Flash 顺便写入选项字节,但写保护了下载不了,下载不了就不能解除写保护,形成死循环了哈,这个注意一下。不过我们等会讲另一个软件的时候就可以单独配置选项字节哈。就可以解决这个问题了。好,这就是选项字节的所有内容,总共就是四大块,读保护、写保护、硬件参数和用户参数。配置好之后,可以点击采用这个设置哈。

然后把编程到 Flash 时写选项字节的勾勾上,再执行正常的下载流程

,就能更新选项字节的配置了。大家可以自己玩一玩试试。好,有关这个 FLASH MCU 我就讲这么多,基本上各个功能也都讲完了哈。下载程序的流程和原理,如何解决频繁切换串行帽的问题,读取程序、擦除芯片以及选项字节的内容就这么多
看一下下一个软件, STLink Utility 这个软件是需要安装的哈,这是一个安装包,

直接双击安装。这里面直接下一步, Yes, 这里安装路径大家可以指定一下啊,或者直接默认路径也没问题,下一步。

最后这里提示安装 STLink 的驱动哈,直接点是就行了。完成, Finish。

这样就安装好了。安装之后桌面就会出现这样一个软件图标,我们双击打开,这就是软件的主界面。首先演示一下用这个软件下载程序的流程啊,硬件这部分只需要把 STLink 连接好就行了,串口可以不解,然后跳键号恢复成两个都在最左边。


复位之后点击这个按钮进行连接,连接好之后这里就会出现一些器件信息了哈。

然后下面这个大框框展示的就是 STM32 里面 0800 开始的程序数据哈。目前我这个芯片刚被擦除过,所以数据全是 FF。
如果你点击这个保存,就可以把这个程序给存起来了。这里可以选择保存为 hex 或者 bin 文件。


之后点击这个按钮就是断开连接,点击这个橡皮擦就是擦除芯片了。

如果要下载程序的话,先点第一个按钮打开文件,这里文件类型支持 hex 和 bin,我们可以打开刚才读出来的 bin 文件哈,

然后点击这个编程按钮,这一栏显示的就是程序文件的路径,当然也可以在这里直接打开要下载的程序文件哈,之后点击 start 开始下载。

下载完成之后我们看到 LED 闪烁,没问题啊。这就是 STLink Utility 下载程序的流程,和 Keil 内置的下载基本是一样的啊,非常简单。

然后再讲一下这个软件选项字节的配置啊,可以点击 Target, Options Byte, 这就可以打开选项字节的配置页面了。

选项字节的内容和刚才讲的一样啊,第一块就是读保护,可以使能或失能,

第二块也是硬件参数啊,这些灰色的选项我们这个型号的芯片没有啊,之后就是第三块用户第四块是写保护内容都一样,这里配置好之后直接点击 apply 就能直接单独更改选项字节的参数了,
不像 FlyMcu 必须要下载程序顺便更新选项字节。所以如果你有芯片被读保护或者写保护锁住了,就可以到这个地方来解除保护。这就是这个软件的选项字节配置。
最后再给大家介绍一个 STLink 固件更新的功能哈,我们可以点击 STLink FromWare Update 然后

打开这个 STLink Upgrade 这个界面就是给 STLink 更新固件的哈,然后点击这里的 connect 连接,这里提示重启一下哈。那我们拔掉,重新插,连接。可以看到目前这个 STLink 的固件是 Z29 S7,最新的固件是 G37 S7。如果要升级的话,点 Yes 就能给 STLink 升级固件了哈。需要升级的话可以到这里来看看。

不过如果你使用没问题的话,也不需要经常更新哈,能用就行了。好,那有关这两个软件的介绍, STM32 Bootloader 选项字节等等,这些内容到这里就结束了,希望能给大家之后的学习和应用带来帮助哈,那我们下节再见。