STM32自动下载电路分享及注意事项

文章目录

  • 简介
  • ISP下载
    • 启动配置
  • USB转串口芯片CH340C
  • 手动isp下载
  • 自动isp下载
  • RTS、DTR电平变化分析
  • 注意事项

简介

在嵌入式开发中,使用STM32下载程序,可以通过仿真器下载,也可以通过串口下载。在stm32串口下载时,我们需要手动配置启动模式,为了方便进行程序的更新和下载,于是有了自动ISP下载电路。本文将分享关于STM32自动下载电路的实现过程和原理。

ISP下载

ISP,即In-System Programming,在线编程。具有ISP功能的单片机芯片,可以通过简单的下载线直接在电路板上给芯片写入或者擦除程序,并且支持在线调试。 一般而言,ISP都需要一些上位机来配合操作,比如stm32常用的软件是FlyMCU,mcu isp软件。对于stm32,ISP下载,又分为手动ISP下载和自动ISP下载。

启动配置

对于stm32,有几种启动模式需要配置。系统存储器启动就是通过ISP下载。我们可以查看stm32参考手册,里面有关于启动模式的配置。
在这里插入图片描述

这里的启动模式怎么理解呢?简单来说,STM32的启动模式决定了芯片上电或复位后执行的操作,启动模式前两种我们用的比较多,这里主要讲解这两种启动模式,我们可以简单理解为有两种模式。第一种模式BOOT1=X, BOOT0 = 0,(这里BOOT1=X, 意思就是:是 0是1都可以),主闪存存储器被选为启动区域,即程序运行模式; 第二种模式, BOOT1=0,BOOT0=1,系统存储器被选为启动区域,即系统引导模式。

  1. 程序运行模式:启动用户程序,执行从闪存中加载的应用。 大白话:运行程序

  2. 系统引导模式:允许从特定接口(如UART、USB等)加载新固件,用于程序下载和更新。 大白话:下载程序

这里我们可以看到对于前两种模式,BOOT1的状态只要保持为0即可,所以一般我们都是通过配置BOOT0引脚状态来控制单片机是下载还是运行。STM32在启动时会检查BOOT引脚的状态,以决定从哪个存储位置加载程序。

可以把STM32的启动模式比作一栋大楼的入口。

  • 正常入口:当你从主入口(程序运行模式)进入时,你直接进入大楼,开始进行你原本的活动(运行用户程序)。

  • 特别通道:如果你选择了侧门(系统引导模式),就好比你在大楼外进行一些特殊操作,比如接收新的指令或进行维修(程序下载)。

通过选择不同的入口,用户可以灵活地进入大楼并执行不同的操作,就像通过设置BOOT引脚状态来控制STM32的启动模式。本质上,是单片机可以选择从不同的位置运行程序,我们可以看下下面这张表。

在这里插入图片描述

系统引导模式有一段程序专门用来下载代码,这段程序叫bootlaoder,也叫自举程序,存储在stm32的内部系统存储器中,它的作用是接收串口外设发送的程序数据并放置到flash中,运行的起始地址是0x1FFF F000。在ROM区的0x0800 0000位置,存储的就是编译后的程序代码。

自举程序在手册上是这样描述的。

在这里插入图片描述

对于stm32f103c8t6,属于中容量产品,这也是为什么我们通常通过串口1的PA9、PA10这两个串口引脚下载程序。现在我们对启动模式有了一定了解了,我们再回过头看手册。

在这里插入图片描述

我们注意手册里的这句话:在系统复位后, SYSCLK的第4个上升沿, BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。
也就是说BOOT引脚的状态在复位后第4个上升沿,就固定下来,不再变化。对BOOT0和BOOT1的配置决定了系统将进入的启动模式。所以我们可以说,stm32 isp下载的过程, 一是需要对BOOT进行配置,二是需要进行RESET复位,确保它从设定的启动模式重新开始。

USB转串口芯片CH340C

STM32通常使用串口进行通信,而大多数计算机只有USB接口。USB转串口芯片能够将计算机的USB信号转换为STM32可识别的串口信号。此外,USB和串口之间的电平标准也不同,因此isp下载需要USB转串口芯片来进行通信下载,这里我们使用usb转ttl芯片ch340c来进行下载电路的设计,我们先了解一下ch340c。
在这里插入图片描述

这里只对我们用到的几个引脚进行介绍,VCC,V3,GND接电源正极和地,根据实际情况外接0.1uf的退耦电容,RTS#,DTR#,DCD#, RI# ,DSR#,CTS# 这几个引脚为modem联络信号,由计算机软件程序控制,可以理解为通过上位机软件,来完成联络信号的控制,目的是控制单片机自动下载程序时所需满足的电压条件。在STM32自动下载电路中,我们只用到RTS#(Request To Send,请求发送), DTR#(Data Terminal Ready,数据终端就绪)两个引脚。TXD、RXD是串行数据的输出(发送)、输入端(接收), 需要连接通信MCU的输入(接收)、输出(发送)端口;UD+、UD-连接typeC接口中对应的D+,D-。

手动isp下载

普通isp下载,不具有自动下载功能,需要手动进行启动模式的配置,因此也叫手动isp下载。手动isp下载,不需要用到CH340C的联络信号RTS#, DTR#, 所以在下载电路中,我们只需给CH340C供电,连接typec对应的D+, D-, 在将串口芯片的TX, RX连接到MCU的串口通信引脚就行了,对于stm32f103c8t6,前面我们讲过可以通过USART1接口启用自举程序,所以这里串口芯片的TX, 就连接到c8t6的pa10(RX), 串口芯片的RX, 连接到c8t6的pa9(TX)。

在这里插入图片描述

手动isp下载程序并运行的过程如下:

  1. 配置启动模式:BOOT0 = 1, BOOT1= 0
  2. 进入bootloader:按下复位按钮,准备接收数据
  3. 存储到Flash:上位机开始发送程序,单片机通过串口接收代码数据
  4. 重新配置启动模式:下载完成后,BOOT0 = 0, BOOT1 = 0
  5. 运行Flash中的代码:按下复位按钮,运行下载的程序代码。

可以看到,每次下载程序,然后运行程序的时候,我们都需要手动配置BOOT启动模式,对应在硬件上, 就是每次都要切换跳线帽,而且每次都要按复位,这样子多少有点麻烦,于是就有了自动isp下载电路。

自动isp下载

自动isp下载电路,可以实现自动下载,就不需要去手动配置BOOT启动模式和每次都要按复位了,那肯定是有其它电路控制实现这个功能了,这个自动下载电路,肯定要能在下载程序的时候,自动配置启动模式和自动复位,这就是我们说的实现自动下载电路需要满足的电压条件,所以简单来说,STM32自动下载电路的原理是基于单片机的启动模式和外部电路控制。具体来说:

  1. 启动模式选择:STM32具有多种启动模式,其中通过BOOT0引脚的高低电平控制单片机进入内置引导程序,从而实现固件下载。如果BOOT0为高电平,单片机会进入下载模式,允许通过串口接收新程序。

  2. 复位控制:在下载过程中,通过NRST引脚将单片机复位,确保其处于可编程状态。通常使用NPN晶体管控制NRST引脚的高低电平,以实现自动复位。

  3. 通信接口:USB转串口模块连接至STM32的TX和RX引脚,负责与PC端进行数据传输。通过串口发送的下载命令和数据,将新的固件烧录到单片机中。

和手动下载电路不同的是, 自动下载电路使用ch340c串口芯片时,使用到了RTS#和DTR#两个联络信号引脚。

在这里插入图片描述

自动isp下载程序并运行的过程如下:

  1. 配置启动模式: BOOT1固定为0(BOOT1=0),CH340_RTS输出低电平,Q2导通,BOOT0被拉高,BOOT0 = 1
  2. 进入bootloader:CH340_DTR=1,Q1导通,NRST被拉低,延时100ms;延时后CH340_DTR拉低,CH340_RTS维持拉低,完成一次复位,准备接收数据。
  3. 存储到Flash:上位机开始发送程序,单片机通过串口接收代码数据
  4. 重新配置启动模式:接收完成后,CH340_RTS为高电平,Q2截止,BOOT0 = 0
  5. 运行Flash中的代码:接收完成后此时CH340_DTR为高电平,Q1截止,NRST恢复为高电平,因此无法实现自动运行程序,需手动按下复位按钮运行代码。但实际上我们可以让它自动运行,在软件上,可配置“编程后运行”,从主闪存0x800 0000位置运行,实现自动运行下载的程序代码。

因此这个电路搭配软件进行使用, 基本上就可以实现一键自动下载代码并运行代码的效果了!对比一下手动isp下载,可以发现,自动isp下载的过程,实际上就是上位机软件通过控制DTR和RTS来实现对BOOT0和NRST(复位引脚)的控制。

值得注意的是,FlyMcu软件底部有关于RTS和DTR高低电平的选择,用的是RS232电平,使用的是负逻辑,和我们常见的ttl电平正好相反,即0是高电平,1是低电平,所以在实际电路中是DTR#的高电平复位,RTS#低电平进Bootloader,在软件上应设置成“DTR的低电平复位,RTS高电平进Bootloader”。

RTS、DTR电平变化分析

一开始采样的时候,遇到一个奇怪的现象,RTS#在下载过程中会有几微妙不稳定的抖动,在产生抖动的同时DTR#也由原来的拉低变成拉高了,根据我们前面的分析,这个是有点问题的,会多产生了一次复位,这个复位好像是没有必要的。后面分析既然是RTS#、DTR#的变化,那就分析一下它为什么会变化,而RTS#、DTR#是由上位机软件控制的,所以猜想可能跟软件有关。

在这里插入图片描述

在这里插入图片描述

于是把FlyMcu软件换成了mcuisp 软件。

在这里插入图片描述

NICE! 这个波形就很完美,和我们前面分析的波形一致。我们再来分析一下这个时序图。

在这里插入图片描述

STM32自动下载电路过程可以分为3个阶段,下载前,下载中,下载后。

下载前,RTS#, DTR#都为高电平, 此时BOOT0为0V,NRST为3.3V

下载中,上位机软件控制DTR为低电平,RTS输出高电平,此时DTR#输出高电平(3.3V),RTS#输出低电平(0V),NRST变为0V(复位),BOOT0为3.3V。之后需要延时 100ms 等待芯片复位完成。

延时 100ms后,上位机软件控制DTR为高电平,此时DTR#输出低电平(0V),RTS#维持输出低电平(0V),NRST信号被拉高变为3.3V,BOOT0为3.3V,表示复位结束,从系统存储器中运行。

下载后,上位机软件控制RTS#、DTR#输出都为高电平,恢复到刚开始的电平状态,此时BOOT0=0V, NRST维持为高电平3.3V,单片机进入Flash,等待复位启动程序。如若在软件勾选“编程后运行”,单片机将跳到主闪存存储器的地址(0x0800 0000)处开始自动执行代码,此时的RTS,DTR等各电平变化和不勾选其实是一致的。

在这里插入图片描述

在FlyMcu软件下载过程中, 右侧会显示RTS和DTR电平状态变化, 配合上面的波形图就很清晰了。RTS#, DTR#这里的“#”实际上就是取反的意思,因为采用的是负逻辑,所以实际上右侧的信息应为:

开始全片擦除(全片擦除时间会比较长,请耐心等候!)
全片擦除成功
DTR#电平置高(+3-+12V),复位
RTS#置低(-3 - -12V),选择进入BootLoader
…延时100毫秒
DTR#电平变低(-3 - -12V)释放复位
RTS#维持低 开始连接…4, 接收到:79 1F
在串口COM7连接成功@115200bps,耗时734毫秒

注意事项

  1. 下载程序时确保BOOT引脚配置正确。如果下载后可以运行,复位或重新上电后就不能运行,可能和BOOT0的设置有关。此外,原理图中的BOOT0需要通过100K的电阻接到地。
  2. 使用usb转串口芯片时,应采用适当的退耦电容(如0.1μF),以滤除电源噪声,确保稳定工作。
  3. 软件配置RTS和DTR电平时,使用的是负逻辑 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/438394.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【IPv6】IPv6地址格式及地址分类(组播、单播、任播)整理

IPv6地址格式 IPv6 地址从 IPv4 地址的 32 bits 扩展到 128 bits,IPv6 地址的表示、书写方式也从 IPv4 的点分十进制,修改16进制的冒号分割 IPv4 点分格式(.) 192.168.11.11 IPv6 冒号分割(:) 2408:8459:3032:0000:0000:0000:0001:a9fd IPv6 的规范…

Axure大屏可视化模板在不同领域中的实际应用案例

一、农业领域 案例背景: 智慧农业是当前农业发展的重要趋势,通过物联网、大数据等技术手段,实现农业生产的智能化管理。Axure大屏可视化模板在智慧农业平台的建设中发挥了重要作用。 实际应用: 农田环境监控:通过Axu…

828华为云征文 | 华为云Flexus云服务器X实例搭建企业内部VPN私有隧道,以实现安全远程办公

VPN虚拟专用网络适用于企业内部人员流动频繁和远程办公的情况,出差员工或在家办公的员工利用当地ISP就可以和企业的VPN网关建立私有的隧道连接。 通过拨入当地的ISP进入Internet再连接企业的VPN网关,在用户和VPN网关之间建立一个安全的“隧道”&#xff…

智慧环保大数据平台建设方案

1. 智慧环保现状与挑战 随着环境问题日益严重,环境事件频发,如贵州都匀矿渣污染、云南南盘江水污染等,以及癌症高发率的出现,智慧环保建设显得尤为重要。智慧环保旨在通过技术手段提升环境管理和决策的智能化水平。 2. 宏观环境…

OpenCV Canny()函数

OpenCV Canny()函数被用来检测图像物体的边缘。其算法原理如下: 高斯滤波:使用高斯滤波器平滑图像以减少噪声。高斯滤波器是一种线性滤波器,可以消除图像中的高频噪声,同时保留边缘信息。计算梯度强度和方向:使用Sobe…

MySQL高阶2010-职员招聘人数2

目录 题目 准备数据 分析数据 总结 题目 一家公司想雇佣新员工。公司的工资预算是 $70000 。公司的招聘标准是: 继续雇佣薪水最低的高级职员,直到你不能再雇佣更多的高级职员。用剩下的预算雇佣薪水最低的初级职员。继续以最低的工资雇佣初级职员&…

【华为HCIP实战课程三】动态路由OSPF的NBMA环境建立邻居及排错,网络工程师

一、NBMA环境下的OSPF邻居建立问题 上节我们介绍了NBMA环境下OSPF邻居建立需要手动指定邻居,因为NBMA环境是不支持广播/组播的 上一节AR1的配置: ospf 1 peer 10.1.1.4 //手动指定邻居的接口地址,而不是RID peer 10.1.1.5 area 0.0.0.0 手动指定OSPF邻居后抓包查看OSP…

自动驾驶-轨迹拼接

在进行自动驾驶的规划之前,要确定当前帧轨迹规划的起点,这个起点常被误认为是当前车辆的位置,即每次以车辆的当前位置进行轨迹规划;其实不是这样的,直观上,这会导致本次次规划的轨迹同上次规划的轨迹之间是…

IDEA 使用技巧与插件推荐

目录 前言1. IDEA 使用技巧1.1 快捷键优化与应用1.2 高效调试与日志分析1.3 代码模板与片段的自定义 2. 插件推荐2.1 MyBatisX2.2 Lombok2.3 CheckStyle-IDEA2.4 Key Promoter X2.5 GitToolBox2.6 Rainbow Brackets 3. IDEA 性能优化3.1 内存与堆栈设置3.2 禁用不必要的插件3.3…

设计模式——责任链模式

哈喽,各位盆友们!我是你们亲爱的学徒小z,今天给大家分享的文章是设计模式的——责任链模式。 文章目录 定义通用类图1.具体代码2.责任链模式的组成:3.责任链模式的优点:4.责任链模式的缺点: 实际应用&#…

向日葵软件安装失败

一开始点击普通下载,下载完毕后,安装了好几次也没安装成功。 查找解决方法后 在控制面板-程序和功能,寻找已安装 的向日葵 手动卸载已安装但是又没成功的向日葵 重新点击普通下载,下载完安装还是失败。 于是改为安全下载&…

夜间道路目标检测数据集 5000张 夜间道路 带标voc yolo

夜间道路目标检测数据集 5000张 夜间道路 带标voc yolo 夜间道路目标检测数据集 5000张 夜间道路 带标voc yolo label | pic_ num | box_ num car: (4907, 43417) pedestrian: (1039, 3520) traffic light: (3276, 15271) traffic sign: (4072, 15821) bicycle: (155, 233) bus…

开发人员智能助手

据说AI可以代替开发人员,目前看暂时不用担心,不仅不担心,还要主动使用它。 过去有了问题需要自己各网站搜索,真真假假的东西太多,很难找到正确答案,现在可以问智能体了: 1、JAVA开发大师 htt…

ElasticSearch备考 -- 多字段查询

一、题目 索引task有3个字段a、b、c,写一个查询去匹配这三个字段为mom,其中b的字段评分比a、c字段大一倍,将他们的分数相加作为最后的总分数 二、思考 通过题目要求对多个字段进行匹配查询,可以考虑multi match、bool query操作。…

【C++】——list的介绍和模拟实现

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:Yan. yan.                        …

1.9 物理层设备

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 前言1 中继器1.1 基本定义1. 2 工作原理 2 集线器2.1 基本定义2.2 工作原理2.3 冲突域 3 中继器与集线器的比较 前言 计算机网络的物理层是OSI模型中的第一层,主要…

【机器学习】任务六:分类算法(支持向量机(SVM)在线性可分与不可分数据中的应用与可视化分析)

目录 1.知识简介 2.SVM 支持向量机模型训练与可视化报告 2.1 导入本项目所需的模块和包 (1)目的 (2)代码实现 (3)代码解释 2.2 随机生成线性可分的数据并可视化 (1)目的 &a…

Label-Studio ML利用yolov8模型实现自动标注

引言 Label Studio ML 后端是一个 SDK,用于包装您的机器学习代码并将其转换为 Web 服务器。Web 服务器可以连接到正在运行的 Label Studio 实例,以自动执行标记任务。我们提供了一个示例模型库,您可以在自己的工作流程中使用这些模型&#x…

YOLOv11改进 | Conv篇 | YOLOv11引入SAConv模块

1. SAConv介绍 1.1 摘要: 许多现代物体检测器通过使用三思而后行的机制表现出出色的性能。 在本文中,我们在目标检测的主干设计中探索了这种机制。 在宏观层面,我们提出了递归特征金字塔,它将特征金字塔网络的额外反馈连接合并到自下而上的骨干层中。 在微观层面,我们提出…

Blazor流程编排的艺术:深入Z.Blazor.Diagrams库的使用与实践

为现代网页应用开发提供动力的其中一个重要方面就是前端框架的强大功能与灵活性。而在.NET生态中,Blazor以其独特的工作方式和优势逐渐获得了开发者们的青睐。今天,在这篇文章中,我将带你深入探索一个基于Blazor的优秀库——Z.Blazor.Diagram…