软件使用-stm32入门

本文详细介绍了使用FlyMcu和STLINKUtility两个软件对STM32进行程序烧录的过程,包括串口下载原理、BootLoader功能、选项字节配置和固件更新等内容,展示了如何通过这些工具进行设备编程和管理。
摘要由CSDN通过智能技术生成

这节主要是介绍大家使用两个软件。这两个软件也是比较常用的,里面也有很多有意思的功能,可以给大家介绍一下。

1. FlyMcu 软件

这个软件可以通过串口给 STM32 下载程序,如果你没有 STLINK,就可以用这个软件通过串口下载程序。

那我们先看一下 FlyMcu 程序烧录软件,打开软件,这个软件是绿色软件,直接打开就能运行,不需要安装。这个软件的作用呢,如果你玩过 STC 的 51 单片机的话应该知道,STC 单片机也有个程序烧录软件,叫 STC-ISP,可以通过串口给 51 单片机下载程序。这个 FlyMcu 就跟 STC-ISP 的用途是一样的,都是串口下载。

那接下来我就演示一下串口下载的流程。

  1. 首先,硬件这里,我们需要连接一个串口的电路。这个电路要能保证 USART1 和电脑进行串口通信。这里必须要是 USART1,因为我们这个芯片的串口下载只适配了 USART1,接在其他 USART 上是不行的。线接法和前几小节是一样的,那这里我的线已经接好了。
  2. 然后在软件上,我们随便打开一个示例代码。比如我这里拖出来了一个 LED 闪烁的代码作为演示,打开工程。为了实现串口下载,我们需要配置工程,生成一个 HEX 文件,点击工程选项,在 OutPut 选项卡里把 Create HEX File 选项勾上,这时再编译一下。在输出窗口中多了一条创建 HEX 文件的信息。编译没问题,我们就可以打开工程目录,在 Objects 文件夹下找到我们刚才生成的 HEX 文件(Project.hex),这就是我们串口下载所需要的程序文件。
  3. 接下来我们就可以用 FlyMcu 下载程序了。首先菜单栏先点搜索串口,然后 Port 这里选择我们串口通信的 COM 号,bps 波特率可以保持默认的 115200,这一部分和串口助手是一样的。接着选择程序文件,选择我们刚才生成的 HEX 文件,在工程目录,Objects 文件夹里,选中,打开,之后下面这些其他的配置,我们暂时先保持默认。目前对下载程序影响不大,等会儿再细说。
  4. 然后在开始编程之前,我们还需要配置 BOOT 引脚,让 STM32 引脚执行 BootLoader 程序,否则的话,点击开始编程,它会一直卡在一个位置。

如何进入 BootLoader 呢?我先演示流程,等会儿再解释。

  1. 看一下板子,第一步,找到跳线帽,这两个跳线帽是用来配置 BOOT 引脚的,把这里上面一个跳线帽,也就是配置 BOOT0 引脚的跳线帽,拔下来,然后插在右边两个针脚,配置 BOOT0 为 1。
  2. 第二步,按一下复位键,让程序重新开始运行,这里切换 BOOT 引脚之后,一定要再按一下复位键。因为 STM32 只有在刚复位的的时候才会读取 BOOT 引脚,程序运行之后,切换 BOOT 引脚是无效的,那这样,芯片就进入 BootLoader 程序了,进入 BootLoader 程序之后,STM32 执行的程序就是不断接收 USART1 的数据,刷新到主闪存。
  1. 然后再回到 FlyMcu 软件,点击开始编程,这时就可以看到,下载过程成功运行,最后显示下载成功。
  2. 这样,我们这个 LED 闪烁的程序,就通过 BootLoader 成功刷新到主闪存里了,回到 STM32,目前 LED 还没有亮起来,这是因为目前 STM32 还在执行 BootLoader 的刷机程序,我们还需要把 BOOT 引脚换回来,拔掉 BOOT0 的跳线帽,换到左边两个引脚,然后按一下复位。可以看到 LED 闪烁,程序运行正常。

那接下来我们来研究两个问题。

  • 第一个问题,BOOT 引脚是干啥的,为啥这样配置?BootLoader 又是干啥的,串口下载的原理是什么?

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

  • 第二个问题,每次下载程序,都要拔插两遍跳线帽,太麻烦了,有没有什么解决方法?

刚才我们说了,想要程序自我更新,就必须有一个切换小机器人的过程,BOOT0 引脚和 RST 复位引脚必须得有高低电平变化,那能不能我接两根线,当电脑点击下载时,自动帮我设置一下 BOOT0 和 RST 的电平呢?答案是可行的,我们可以看一下串口模块的电路,CH340G 模块除了TXD 和 RXD 用于通信的引脚,还有 RTS、CTS、DTR 和 DSR,这些引脚都是流控的引脚,我们不使用流控,可以把它们当作普通的 GPIO 来控制。其中 RTS 和 DTR 是输出引脚,我们可以用这两个引脚来控制 BOOT0 和 RST,当然在外围还需要设计一个控制电路,一般可以用两个三极管开关来进行控制,有关电路部分大家可以网上搜一下,STM32 一键下载电路,里面都有设计方案和解释,当我们这个串口具备一键下载电路之后,就不需要再频繁切换跳线帽和按复位键了,非常方便。

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

那没有一键下载电路,我们还有个缓招可以使用,就是勾上开始编程后面的编程后执行,这样试一下看看。先切换跳线帽,复位,进入 BootLoader,LED 就没有闪烁了,回到 FlyMcu 软件,如果选择了编程后执行,需要去掉选项字节的编程到 FLASH 时写选项字节勾,要不然下载之后会提示执行失败,我们去掉后开始编程,下载完成,然后看一下,这时程序直接就运行了,即使现在跳线帽仍然处于 BootLoader 的状态,为啥呢?我们看一下输出窗口多了一条,成功从 0800 开始运行,这就是在软件上,人工加入了一条跳转指令,这样就能执行主程序了。但是这样只是一次性的,我们复位一下看看,LED 不亮,程序仍然是 BootLoader,不过这样也可以省很多步骤,我们可以切换到 BootLoader 不断地进行下载调试,然后调试完成之后,再切换回主程序,这样就只需要最开始和最后切换一下跳线帽就行了,比较省事。这个问题我也就介绍这么多。

接下来我们继续来探索一下这个软件,这里面还有很多有意思的东西,首先是这个读 Flash,我们点一下,然后放到桌面,起个名字 led,保存。这样就可以把芯片里的程序读出来,输出窗口提示读取完成,桌面上就出现了程序文件,这就有意思了是吧。比如你看到别人用 STM32 做了一个产品,你觉得不错,就可以抄一下它的 PCB 板,然后程序文件呢,又可以通过这个软件读出来,这样就可以大批量山寨别人的产品了是吧,不过 STM32 也可以配置读保护,这个等会儿再说。但是反过来,如果你开发产品,不注意这个问题的话,是不是一不小心程序就泄露了,是吧。那我们看一下读出来的这个文件,这个文件是 .bin 格式的,里面记录的就是 STM32 从 0800 开始存储的程序数据,.bin 格式是没有地址信息的原始数据文件,我们之前生成的 .hex 文件,是有地址信息的,不过作为记录程序代码的文件,这两种格式的作用其实都是一样的。这里还有一个问题,就是 FlyMcu 下载的时候只能选择 .hex 文件,如果选择 .bin 文件,下载就会报错。但是它读出来只能选 .bin 文件,读出来的 .bin 文件不能再下载回去了,有点折磨人,可能是软件设计的时候没考虑到这个功能。不过等会我们介绍 STLINK Utility 的时候,这两个文件就都可以选择了。

那我们继续来看,点击清除芯片按钮可以把主程序区域全部擦除,擦除之后,所有的数据都是 FF;之后读器件信息会把芯片的序列号什么的信息读出来,然后这里显示我的芯片的 Flash 容量是 256K,这个有点夸张,我们这个 C8T6 芯片的标称 Flash 容量是 64K,属于中容量产品,这里读出来却是 256K,直接成大容量产品了。我试过很多芯片,有的芯片是 64K,有的是 128K,还有的像这样是 256K,这个百度了一下,说是生产的时候为了省工序,很多型号是一个模子做出来的,但是 C8T6 只能保证前 64K 没问题,当然也还有其他的说法,大家可以自行了解一下,这个问题并不是很大。

然后 Ramlsp 和连续烧录模式,目前用的不多,大家可以自行研究。最后,我们再来研究一下这个选项字节,我们之前在 DMA 中介绍的 STM32 的存储器映像中也提到过选项字节,选项字节也是 ROM 区最后的一小块存储单元。用途是存储一些独立于程序代码的配置参数,那究竟是哪些参数呢,有什么作用呢?在这里就可以看到了,点击设置选项字节的按钮,选择 STM32F1 这一项,这个界面展示的就是选项字节里面的参数了。
第一块,就是读保护,刚才我们说了,如果你做产品,不开启读保护,别人很容易就把你的程序偷走了,所以为了保护程序的安全,选项字节里就有一个参数可以配置读保护。这里可以看到,设成 A5 允许读出,设成 FF 阻止读出。注意一下,如果你阻止读出了,再回到 Keil 下载程序就会失败,如果因为读保护导致下载失败,那需要再到这个地方来,取消读保护,取消一下就正常了。另外,在取消读保护时,会同时清空芯片的程序,这样程序就不会被偷走了,这就是读保护功能。
接着下面还有一些硬件选项字节,其中包括看门狗,停机和待机模式不产生复位,还有几位,用户应该大概也许可以使用,这些了解一下就行,如果有需求的话可以用一下,然后是用户数据字节,这些东西如果有需求的话可以自己使用。
那选项字节里面的参数有什么好处呢,第一,就是选项字节的数据相当于是世外桃源了,无论程序怎么更新,选项字节的数据都可以不变。你可以用这些字节来存储不随程序变化而变化的参数,另外选项字节还有一个好处,就是可以用上位机很方便的修改,比如我们这个 FlyMcu 或者 STLINK Utility,在上位机里,可以直接修改选项字节的内容,是不是可以用作一些产品中,可供用户配置的参数啊。
然后继续看,最后一项,就是写保护了,这里可以对 Flash 的每几个页单独进行写保护,比如你在主程序的最后几页写了一些自定的数据,不想在下载的时候被擦除了,就可以把最后几页设置写保护锁起来,设置写保护之后,就无法再写了,如果想再次写入的话,解除写保护就行了。另外注意一下,设置写保护之后,再下载,如果需要写入保护区的话,就会出错,比如你把最前面几页写保护了,下载一次之后再下载肯定就会出错,而它这个软件设计,不能单独写入选项字节,只能下载 Flash,顺便写入选项字节。但写保护了,下载不了,下载不了就不能解除写保护,形成死循环了,这个注意一下。不过我们等会儿介绍另一个软件的时候,就可以单独配置选项字节,就可以解决这个问题了。

这就是选项字节的所有内容。总共就是 4 大块,读保护、写保护、硬件参数和用户参数。配置好之后,可以点击采用这个设置,然后把编程到 Flash 时写选项字节的勾勾上,再执行正常的下载流程,就能更新选项字节的配置了。大家可以自己玩一玩试试。

有关 FlyMcu,就介绍这么多。基本上各个功能也都介绍完了,下载程序的流程和原理,如果解决频繁切换跳线帽的问题,读取程序、擦除芯片以及选项字节的内容,就这么多。

2. STLINK Utility

这个软件是配合 STLINK 使用的一个工具,可以通过 STLINK 给 STM32 下载程序,也可以进行一些其他的操作。

这个软件是需要安装的,直接双击安装包安装,安装路径大家可以指定一下,或者直接默认路径,也没问题。最后提示安装 STLINK 的驱动,直接点是就行了,这样就安装好了。按照之后,桌面上会出现软件图标,我们双击打开,就是软件的主界面了。

首先演示一下,用这个软件下载程序的流程,硬件部分,只需要把 STLINK 连接好就行了,串口可以不接,然后跳线帽恢复成两个都在最左边,复位,之后,点击 🔌 按钮进行连接,连接好之后,上面就会出现一些器件信息了,然后下面主界面展示的就是 STM32 里面 0800 开始的程序数据,目前这个芯片刚被擦除过,所以数据全是 FF。如果你点击保存,就可以把这个程序给存起来了,这里可以选择保存为 .hex 或者 .bin 文件。之后点击 🔌 后的按钮,就是断开连接,点击橡皮擦,就是擦除芯片。如果要下载程序的话,先点第一个按钮,打开文件,这里文件类型支持 .hex 和 .bin,我们可以打开刚才读出来的 .bin 文件,然后点击橡皮擦后面的编程按钮,对话框中显示程序文件的路径,你也可以在这里直接打开要下载的的程序文件,之后点击 Start,开始下载,下载完成之后,我们看到,LED 闪烁,没问题,这就是 STLINK Utility 下载程序的流程。和 Keil 内置的下载基本是一样的,非常简单。

然后再介绍一下这个软件选项字节的配置,可以点击 Target,Option Bytes,这就可以打开选项字节的配置页面了,选项字节的内容,和刚才介绍的一样。第一块就是读保护,可以使能或失能;第二块也是硬件参数,这些灰色的选项我们这个型号的芯片没有;之后就是第三块,用户参数;第四块是写保护,内容都一样,这些配置好之后,直接点击 Apply,就能直接单独更改选项字节的参数了,不像 FlyMcu,必须要下载程序顺便更新选项字节。这就是这个软件的选项字节配置。

所以如果你有芯片被读保护或者写保护锁住了,就可以到这个地方来,解除保护。

最后再给大家介绍一个 STLINK 固件更新的功能。我们可以点击 ST-LINK,Firmware update,然后打开这个 ST-Link Upgrade,这个界面就是用于给 STLINK 更新固件的,然后点击 Device Connect 连接,这里提示重启一下。那我们拔掉 STLINK,重新插,再次点击 Device Connect 连接,可以看到我们目前这个 STLINK 固件是 J29.S7,最新的固件是 J37.S7,如果要升级的话,点 Yes,就能给 STLINK 升级固件了。需要升级的话,可以到这里来看看,不过如果你使用没问题的话,也不需要经常更新,能用就行了。

有关这两个软件的介绍,STM32 BootLoader、选项字节等等,这些内容到这里就结束了。总的来说,这两个软件的功能差不多,都可以下载程序。FlyMcu 是串口下载,STLINK Utility 是 STLINK 下载。希望能给大家之后的学习和应用带来帮助。

STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区 域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 3)SRAM = 芯片内置的RAM区,就是内存啦。            在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表: BOOT1=x   BOOT0=0   从用户闪存启动,这是正常的工作模式。 BOOT1=0   BOOT0=1   从系统存储器启动,这种模式启动的程序功能由厂家设置。 BOOT1=1   BOOT0=1   从内置SRAM启动,这种模式可以用于调试。         在系统复位后, SYSCLK的第4个上升沿, BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。         在从待机模式退出时, BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后, CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004指示的地址开始执行代码。        因为固定的存储器映像,代码区始终从地址0x0000 0000开始(通过ICode和DCode总线访问),而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。 Cortex-M3的CPU始终从ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。 STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM启动。         根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问: ● 从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问, 0x0000 0000 或 0x0800 0000。 ● 从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。(可用于串口下载) ● 从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。 注意: 当从内置SRAM启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,从新映射向量表之SRAM中。 ————————————————
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值