🚀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时,写选项字节勾上
在执行正常的下载流程就能更新选项字节的配置了。
然后,我们就来看下一个软件。
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升级固件了,
需要升级的话,可以到这里来看看。
不过如果你使用没问题的话,也不需要经常更新,能用就行。
内容到这里就结束了,希望能给大家之后的学习和应用带来帮助,下节继续。