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 1Extern Input 1 Filter Polarity 1,外部输入1滤波极性1
TI1FP2:TI1 Filter Polarity 2Extern 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时,写选项字节勾上

在执行正常的下载流程就能更新选项字节的配置了。

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

3.STLINK Utility下载

软件安装步骤

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升级固件了,

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

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

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

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部