江协科技STM32学习- P30 FlyMCU串口下载&STLink Utility

🚀write in front🚀

🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

💬本系列哔哩哔哩江科大STM32的视频为主以及自己的总结梳理📚

🚀Projeet source code🚀

💾工程代码放在了本人的Gitee仓库:iPickCan (iPickCan) - Gitee.com

引用:

STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili

Keil5 MDK版 下载与安装教程(STM32单片机编程软件)_mdk528-CSDN博客

STM32之Keil5 MDK的安装与下载_keil5下载程序到单片机stm32-CSDN博客

0. 江协科技/江科大-STM32入门教程-各章节详细笔记-查阅传送门-STM32标准库开发_江协科技stm32笔记-CSDN博客

【STM32】江科大STM32学习笔记汇总(已完结)_stm32江科大笔记-CSDN博客

江科大STM32学习笔记(上)_stm32博客-CSDN博客

STM32学习笔记一(基于标准库学习)_电平输出推免-CSDN博客

STM32 MCU学习资源-CSDN博客

stm32学习笔记-作者: Vera工程师养成记

stem32江科大自学笔记-CSDN博客

术语:

|--------------------------------------|---------------------------------------------|
| 英文缩写 | 描述 |
| GPIO:General Purpose Input Onuput | 通用输入输出 |
| AFIO:Alternate Function Input Output | 复用输入输出 |
| AO:Analog Output | 模拟输出 |
| DO:Digital Output | 数字输出 |
| 内部时钟源 CK_INT:Clock Internal | 内部时钟源 |
| 外部时钟源 ETR:External Trigger | 时钟源 External 触发 |
| 外部时钟源 ETR:External Trigger mode 1 | 外部时钟源 External 触发 时钟模式1 |
| 外部时钟源 ETR:External Trigger mode 2 | 外部时钟源 External 触发 时钟模式2 |
| 外部时钟源 ITRx:Internal Trigger inputs | 外部时钟源,ITRx (Internal trigger inputs)内部触发输入 |
| 外部时钟源 TIx:exTernal Input pin | 外部时钟源 TIx (external input pin)外部输入引脚 |
| CCR:Capture/Comapre Register | 捕获/比较寄存器 |
| OC:Output Compare | 输出比较 |
| IC:Input Capture | 输入捕获 |
| TI1FP1:TI1 Filter Polarity 1 | Extern Input 1 Filter Polarity 1,外部输入1滤波极性1 |
| TI1FP2:TI1 Filter Polarity 2 | Extern Input 1 Filter Polarity 2,外部输入1滤波极性2 |
| DMA:Direct Memory Access | 直接存储器存取 |

正文:

0. 概述

从 2024/06/12 定下计划开始学习下江协科技STM32课程,接下来将会按照哔站上江协科技STM32的教学视频来学习入门STM32 开发,本文是视频教程 P2 STM32简介一讲的笔记。

本节我们来写一下串口收发数据包的代码

1.🚚FlyMcu串口软件

💎💎本节主要是教大家使用两个小软件,这两个软件也是比较常用的,里面有很多有意思的功能。

这两个软件的领取链接:

链接:https://pan.baidu.com/s/10woYnveR7g_5_mv0hSQ7Zw

提取码:hgiy

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

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

总的来说,这两个软件的功能差不多都可以下载程序。FlyMcu是串口下载,STLINK utility是STLINK下载

我们先看一下FlyMcu程序烧录软件,打开软件,这个软件是绿色软件,直接打开就能运行,不需要安装。

这个FlyMcu就跟个51单片机的STC-ISP的用途是一样的,都是串口下载。

串口下载的流程

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

首先硬件这里我们需要连接一个串口的电路,接法和前几小节是一样的

这个电路要能保证USART1和电脑进行串口通信

💎💎这里必须要是USART1,因为我们这个芯片的串口下载只适配了USART1,接在其他USART上是不行的。

然后在软件上,随便打开一个示例代码,比如这里拖出来了一个LED闪烁的代码作为演示。

为了实现串口下载,我们需要配置工程生成一个hex文件。

把这个创建hex文件的勾勾上,点击OK

点击编译一下,下方一定要有这句话

看到这句话则表示编译没问题。

我们就可以打开工程目录,在这个objects文件夹下,找到我们刚才生成的hex文件,这就是我们串口下载所需要的程序文件,这部分流程和51单片机里是一样的。

接下来我们就可以用FlyMcu下载程序了。

首先上面先点搜索串口,

然后port这里选择我们串口通信的com号

dps波特率可以保持默认的115200,这一部分和串口助手是一样的,

接着选择程序文件,点击这里三个点的按钮。

找到我们刚才生成的hex文件,在这个工程目录objects文件夹里选中。

打开之后,下面这些其他的配置,我们暂时先保持默认,目前对下载程序影响不大,等会儿再细说。

然后在开始编程之前,我们还需要配置boot引脚,让STM32执行BootLoader程序,

否则的话点击开始编程,它会一直卡在这个位置,

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

第一步找到这里的跳线帽,这两个跳线帽是用来配置Boot引脚的,把这里上面一个跳线帽,也就是配置Boot0引脚的跳线帽拔下来,然后插在右边两个针脚配置boot0为1。

第二步,按一下复位键,让程序重新开始运行。

这里切换boot引脚之后,一定要再按下复位键。因为STM32只有在刚复位时才会读取boot引脚,程序运行之后切换boot引脚是无效的。

这样芯片就进入BootLoader的程序了。

进入BootLoader的程序之后,STM32执行的程序就是不断接收USART1的数据,刷新到主闪存。

然后再回到FlyMcu软件,点击开始编程,这时就可以看到下载过程成功运行。

最后显示下载成功,

这样我们这个led闪烁的程序就通过BootLoader成功刷新到主闪存里了。

回到STM32,目前led还没有亮起来。

这是因为目前STM32还在执行BootLoader的的刷机程序,我们还需要把boot引脚换回来,

然后按一下复位,

研究两个问题

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

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

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

第一个问题,串口下载的原理

先看一下第一个问题,串口下载的原理。之前这里我们讲过了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开始运行,这个比较高级,我们暂时不用。

然后下面写了在系统复位后SYCLK的第四个上升沿Boot引脚的值将被锁定。所以说每次切换boot引脚之后,都要按一下复位。

到这里串口下载的原理就讲完了。

第二个问题,有没有办法不用每次下载都要切换跳线帽

接下来我们来研究一下第二个问题,每次下载都要切换跳线帽,太麻烦了,怎么解决?

刚才我们说了,想要程序自我更新,就必须有一个切换小机器人的过程,boot0引脚和RST复位引脚必须得有高低电平变化,

能不能接两根线,当电脑点击下载时,自动设置一下boot0引脚和RST的电平?答案是可行的,我们可以看一下这个串口模块的电路。

🌿🌿这里除了TXD和RXD用于通信的引脚。还有RTS、CTS和DTR和DSR这些引脚都是流控的引脚,我们不使用流控,可以把它们当做普通的GPIO来控制

其中RTS和DTR是输出引脚,我们可以用这两个引脚来控制Boot0和RST。当然在外围还需要设计一个控制电路,一般可以用两个三极管开关来进行控制。有关电路部分,大家可以网上搜一下STM32一键下载电路,里面都有设计方案和解释。

当我们这个串口具备一键下载电路之后,就不需要再频繁切换跳线帽和按复位键了,非常方便。

回到FlyMcu,这下面有个下拉框,就是用来配置DTR和RTS的,是高电平复位,还是低电平复位等等配置。

🌿🌿这些配置需要根据一键下载电路来选,一般最常用的配置是DTR的低电平复位,RTS高电平进BootLoader。

我们这个硬件目前没有一键下载电路,所以还是得手动切换跳线帽。这里的下拉框选择哪个就无所谓了。

这里的信息可以看到,选好之后,下载之前会给DTR和RTS置高低电平,以此切换大机器人和小机器人工作。

🌿🌿没有一键下载电路,我们还有一个缓招可以使用,就是勾上这里的编程后执行,

这样试一下,先切换跳线帽,复位,进入BootLoader,led就没有闪烁了。

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

我们去掉一下,点击开始编程,下载完成,不需要我们换回跳线帽,这时程序直接就运行了,LED就闪烁了。

为什么?

我们看一下这里这里多了一条:成功从0800开始运行。

这就是在软件上人工加入了一条跳转指令,这样就能执行主程序了,但是这样只是一次性的。

此时我们按一下复位键,LED不亮,程序仍然是BootLoader,不过这样也可以省很多步骤。我们可以切换到BootLoader,不断的进行下载调试,然后调试完成之后再切换回主程序,这样就只需要最开始和最后切换一下跳线帽就行了。

接下来我们继续来探索一下这个软件,这里面还有很多有意思的东西。

2.🚚软件功能介绍

读flash

首先是这个读flash

我们点一下,然后放到桌面,起个名字led,保存,

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

此时你的桌面上就出现了程序文件,

这个功能能帮助我们干什么呢?

🌿🌿比如你看到别人用STM32做了一个产品,你觉得不错,就可以抄一下它的PCB板,然后程序文件又可以通过这个软件读出来,这样就可以大批量山寨别人的产品了。

不过STM32也可以配置读保护,这个等会儿再说。

但是反过来,如果你开发产品不注意这个问题的话,是不是一不小心程序就泄露了!

我们看一下读出来的这个文件,这个文件是.bin格式的 ,里面记录的就是STM32从0800开始存储的程序数据,bin格式是没有地址信息的原始数据文件我们之前生成的hex文件是有地址信息的。不过,作为记录程序代码的文件,这两种格式的作用其实都是一样的。

这里还有一个问题,就是这个FlyMcu下载的时候只能选择hex文件。如果选择bin文件的话。下载就会报一个这样的错误。

但是它读出来只能选 bin 文件读出来的,bin文件不能再下载回去了。可能是软件设计的时候,没考虑到这个功能。

不过等会儿我们介绍STLINK utility的时候,这两个文件就都可以选择了。

清除芯片

接下来看下这个清除芯片的功能

点击这个清除芯片按钮,这可以把主程序区域全部擦除,擦除之后所有的数据都是FF。

读器件信息

之后点击读器件信息,

这时会把芯片的序列号等信息读出来。

然后这里显示这个芯片的flash容量是256K,但其实我们这个C8T6芯片的标称flash容量是64K,属于中容量产品。这里读出来却是256K,直接成大容量产品了。具体原因大家可以去了解一下,但是这个问题并不是很大。

选项字节

最后我们再来研究一下这个选项字节,

选项字节也是ROM区最后的一小块存储单元,用途是存储一些独立于程序代码的配置参数。

究竟是哪些参数?有什么作用?

在这里就可以看到了,点击设置选项字节的按钮,选择STM32F1的这一项。

这个界面展示的就是选项字节里面的参数了,

第一块就是读保护。刚才我们说了,如果你做产品不开启读保护别人,很容易就把你的程序偷走了。所以为了保护程序的安全,选项字节里就有一个参数,可以配置读保护。这里可以看到设成A5允许读出,设成FF阻止读出。

⚠️⚠️⚠️⚠️⚠️注意,如果阻止读出,再回到 keil 下载程序时就会失败。如果因为读保护导致下载失败 需要再到这个地方来取消读保护 取消一下就正常了。
⚠️⚠️⚠️⚠️⚠️另外在取消读保护时, 会同时清空芯片的程序 这样程序就不会被偷走了 这就是读保护功能。

接着下面还有一些硬件选项字节,其中包括看门狗,停机和待机模式不产生复位,还有几位用户应该大概也许可以使用。然后是用户数据字节,这些东西如果你有需求的话可以自己使用。

选项字节里面的参数有什么好处?

  • 🌿选项字节的数据相当于是世外桃源,无论程序怎么更新,选项字节的数据都可以不变,你可以用这些字节来存储不随程序变化而变化的参数。
  • 🌿另外选项字节还有一个好处,就是可以用上位机很方便的修改。比如我们这个FlyMcu或者STLINK utility,在上位机里可以直接修改选项字节的内容,可以用作一些产品中可供用户配置的参数。

然后继续看最后一项,就是写保护

🌿🌿这里可以对flash的每几个页单独进行写保护。比如在主程序的最后几页写了一些自定的数据,不想在下载的时候被擦除了,就可以把最后几页设置写保护锁起来,设置写保护之后就无法再写了。如果想再次写入的话,解除写保护就行了。

另外注意一下设置写保护之后再下载,如果需要写入保护区的话就会出错

比如把最前面几页写保护了,下载一次之后再下载,肯定就会出错。

😅😅😅这个软件设计不能单独写入选项字节,只能下载flash,顺便写入选项字节。但写保护了,下载不了。下载不了就不能解除写保护,形成死循环。

过我们等会儿讲另一个软件的时候,就可以单独配置选项字节,就可以解决这个问题了。

以上就是选项字节的所有内容,总共就是四大块,

  • 🌿读保护、
  • 🌿写保护、
  • 🌿硬件参数
  • 🌿和用户参数。

配置好之后可以点击采用这个设置。

然后把编程到flash时,写选项字节勾上
在执行正常的下载流程就能更新选项字节的配置了。

然后,我们就来看下一个软件。

软件安装步骤

STLINK utility这个软件是需要安装的,这是一个安装包,直接双击安装。

里面直接下一步----yes----安装路径可以指定一下或者直接默认路径也没问题----下一步----最后提示安装STLINK的驱动,直接点是就行了----完成----finish

安装之后,桌面就会出现一个软件图标,双击打开这就是软件的主界面。

首先演示一下,用这个软件下载程序的流程。

下载程序的流程

🎄🎄首先硬件这部分只需要把STLINK连接好就行了,串口可以不接

然后跳线帽恢复成两个,都在最左边。

按下复位,之后点击这个按钮进行连接。

连接好之后,这里就会出现一些器件信息了。

🌿🌿下面这个大框框展示的就是STM32里面0800开始的程序数据。

目前这个芯片刚被查除过,所以数据全是FF。

如果点击这个保存,就可以把这个程序给存起来,可以选择保存为hex或者bin文件。

点击这个按钮,就是断开链接,

点击这个橡皮擦就是擦除芯片

如果要下载程序的话,先点第一个按钮打开文件,这里文件类型支持hex和bin。

我们可以打开刚才读出来的bin文件,然后点击这个编程按钮,这一栏显示的就是程序文件的路径。

也可以在这里直接打开要下载的程序文件,之后点击start开始下载。

下载完成之后,我们看到led闪烁

这就是STLINK utility下载程序的流程,和keil内置的下载基本是一样的,非常简单。

选项字节

然后再讲一下这个软件选项字节的配置,

可以点击target

这就可以打开选项字节的配置页面了,选项字节的内容和刚才讲的一样。

  • 第一块就是读保护,可以使能或失能。
  • 第二块也是硬件参数,这些灰色的选项,我们这个型号的芯片没有。
  • 之后就是第三块用户参数
  • 四块是写保护,内容都一样。

这里配置好之后,直接点击下方的apply,就能直接单独更改选项字节的参数了,不像FlyMcu,必须要下载程序,顺便更新选项字节。

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

这就是这个软件的选项指节配置。

STLINK固件更新

最后再给大家介绍一个STLINK固件更新的功能。

我们可以点击STLINK ,然后选择第一个

然后打开这个界面,就是给STLINK更新固件的

然后点击这里的connect连接,

这里提示重启一下

点击确定后,拔掉板子的STLINK重新插,插好之后点击连接。

可以看到目前这个STLINK的固件是J29.S7。

最新的固件是J37.S7,如果要升级的话,点yes就能给STLINK升级固件了,

需要升级的话,可以到这里来看看。

不过如果你使用没问题的话,也不需要经常更新,能用就行。

内容到这里就结束了,希望能给大家之后的学习和应用带来帮助,下节继续。

相关推荐
Red Red1 小时前
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网络·笔记·学习·安全·web安全
Natural_yz2 小时前
大数据学习17之Spark-Core
大数据·学习·spark
qq_172805593 小时前
RUST学习教程-安装教程
开发语言·学习·rust·安装
一只小小汤圆3 小时前
opencascade源码学习之BRepOffsetAPI包 -BRepOffsetAPI_DraftAngle
c++·学习·opencascade
虾球xz3 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
LateBloomer7773 小时前
FreeRTOS——信号量
笔记·stm32·学习·freertos
legend_jz3 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
鼹鼠SDN3 小时前
僵尸毁灭工程 服务搭建 联机教程 无需公网IP、服务器
科技·电脑·数码·联机·僵尸毁灭工程·游戏联机·开服
Komorebi.py3 小时前
【Linux】-学习笔记04
linux·笔记·学习
wenchm4 小时前
细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的另一种方法
stm32·单片机·嵌入式硬件