STM32启动模式讲解与ICP下载电路

news2024/11/17 13:51:28

一、官方提供的启动模式说明

  1. 硬件BOOT引脚接法表格

从表格可以看出有三种启动模式,然后对应这不同的存储器启动,那我们现在疑问为啥有三种不能只有一种就好,还有存储器启动区域怎么区分,有些乱,带着这些疑问,我们往下分析。

2.存储器解释

看了上面表格,可能对存储器的说明有些模糊,我们先来说说它的含义。

(1)主闪存存储器

这个大家可以理解就是我们用来存放程序的Flash;

(2)系统存储器

这个不是我们表面所看的Flash,它是厂家自己定义的一块存储区域,里面内置了一个BOOTLOADER程序程序,这个程序就存放在这个区域中。

(3)SRAM这个大家都知道,没啥特殊的

3.模式的区别

现在我们知道各个存储区域的含义,那我们就来说下为啥子会分这几个启动模式?

  1. 我们都知道程序都是保存在Flash的,那么我们写的程序要运行跑起来,是不是要从Flash区域开始运行啊,对吧,所以我们默认应当是硬件上电后,应该要以第一种模式运行,也就是将BOOT1随意接但BOOT0一定要接地,这样程序才是从Flash开始启动,运行奔跑起来啊。

  1. 既然程序都是从Flash运行,一直选这一个模式肯定没有错啊,为啥子还有其他模式啊?

首先,你程序写好是不是要烧录到硬件MCU上?那么你的烧录方法就关系到这个不同启动方式

第一种:用STLINK或者JTAG下载程序,是直接将程序写入到FLASH上面

第二种:如果你是用串口下载程序,比如STM32的串口1可以用来接收下载程序,关键点就在于你用串口下载程序,程序不是像STLINK或者JTAG直接对Flash进行写操作;而是在有一段代码功能负责将串口1接收到的程序写入FLASH中。也就是有个间接的过程。

换个意思理解,你从电脑通过USB下发程序,硬件接收是通过串口1接收,那么是不是得段代码使能串口1接收啊,然后再将串口1收到的程序写到Flash中啊。

那么这段代码就存储在 系统存储器,这段代码是ST出厂时就固化在里面了。

所以当你使用串口下载程序,你是不是要先让启动厂家固化的这段代码,所以这时候得先设置启动方式为第二种启动,这样才能让这段代码运行起来,来接收你往串口1发送的数据。当你下载完以后,启动模式是不是得切换成第一种啊,这样你写的程序才能先从Flash运行啊。没有错把。

我们常用的就是前面两种,第三种很少用基本不用,这里不做解释

4.针对第二种的控制做解释

在这里如果有做过硬件的同学,肯定知道默认画板都会搞两个10K下拉电阻接至BooT1和BooT0,既将BooT0和BooT1都接地;那么这时候就会有疑问BooT1不是随意接都可以,那我接高行不行,其实BooT1接高接地是关于你电路匹配的,如果你要通过串口下载你是不是要有个电路在下载时候先让芯片进入到第二种模式,当下载完芯片在跳转到进入到第一种模式啊,程序开始运行

那我们逻辑应该是,BOOT1始终保持位0,我们只需要控制BOOT0引脚为1或者为0就可以在两种模式下切换了,对不对啊。

上原子的电路图

我们需要注意一点:CH340G上电后DTR#和RTS#都为高电平

分析:

(1)上电是。DTR和RTS都为高,难是不是两个三极管都没动作,而BOOT1 BOOT0都为0,所以这时候是从FLASh启动正常运行。

(2)当我们下载时,控制RTS拉低(DTR还保持着原来高电平),那这时候是不是两个三极管导通,BOOT0先至高,reset在拉低(因为复位电路存在电容与1N4148二极管的存在,时间存在滞后),复位完后,这时候就进入到第二种模式啦,那么这时候我们是不是要把RESERT啦高回来,这样才可以运行可以下载程序啦,不是一直处于复位状态

(3)当你下载完程序,这时候要把DTR拉高回来,让芯片先复位,然后再把RTS也拉高回来这时BOOT0拉低,紧接着RESERT脚也跟着拉高回来了,这样就进入正常模式回来了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm install报错unable to resolve dependency tree

一、问题背景npm install安装项目依赖时报错PS D:\test> npm install npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: vue-admin-template4.2.1 npm ERR! Found: webpack5.74.0 npm ERR! node_modules/we…

【WebSocket】在SSM项目中配置websocket

在SSM项目中配置websocket 最近在ssm项目中配置了websocket,踩了很多坑,来分享一下 本文暂不提供发送消息等内容的代码逻辑(后续也许会补充),如果你直接复制这类可能会对配置造成更大的麻烦(博主就是复制…

单元测试、反射、注解、动态代理

🏡个人主页 : 守夜人st 🚀系列专栏:Java …持续更新中敬请关注… 🙉博主简介:软件工程专业,在校学生,写博客是为了总结回顾一些所学知识点 目录单元测试、反射、注解、动态代理单元测…

一篇文综合分析Fuse!

FUSE需求 究竟什么样的需求才能用到用户文件系统?来看一个小例子: 需求是这样的。在deepin的安装器中,安装器就会给多分出一个分区:数据盘。 数据盘的主要作用是让用户存放数据文件,也就是以前用Windows的时候D盘或者…

YoloV7

总体来说,YoLoV7主要可分为主干特征提取网络(backbone),加强特征提取网络以及SPPCSPC三个部分,然后再加上RepConv和YoLoHead部分。输入图片640*640*3的RGB图片,然后卷积、标准化(BN)…

QT学习笔记-QT多项目系统中如何指定各项目的编译顺序

QT学习笔记-QT多项目系统中如何指定各项目的编译顺序背景环境解决思路具体操作背景 为了更好的复用程序功能以及更优雅的管理程序,有经验的程序员通常要对程序进行分层和模块化设计。在QT/C这个工具中同样可以通过创建子项目的方式对程序进行模块化,在这…

浅谈Linux下的shell--BASH

环境:centos7.6,腾讯云服务器Linux文章都放在了专栏:【Linux】欢迎支持订阅🌹shell的概念与作用我们已经学习并知道了操作系统实际上就是一款软件,一款用来管理计算机软硬件资源,为用户提供良好的执行环境的…

擎创喜报 | 名单公布!恭喜入选!

前言:企业数字化转型作为一种经营策略,指的是利用数字技术和数字化流程来改变企业的运营、管理、销售和服务方式,以适应数字化时代的发展趋势。一般来说,企业进行数字化出于以下几点考虑。提高效率:数字化改进了业务流…

人口老龄化背景下家政服务网络平台【附源码】

1 毕业论文(设计)版权使用授权书 本毕业论文(设计)作者同意学校保留并向国家有关部门或机构送交论文(设计)的复印件和电子版,允许论文(设计)被查阅和借阅。本人授权广西…

JAVA中比较对象是否相等的方式是什么?为什么重写equals就一定要重写hashcode?百天百题(3/100)

目录 JAVA中比较对象是否相等的方式是什么? 为什么重写equals就一定要重写hashcode? JAVA中比较对象是否相等的方式是什么? 在了解这个问题之前需要先知道: 1.如果对象相同,那么hashcode是一定相同的。 2.对象不同的…

哈希表

文章目录什么是哈希问题引入哈希函数直接定址法除留余数法 (常用、重点)哈希冲突哈希冲突的解决方法闭散列开散列unordered_map && unordered_set 封装实现哈希的应用位图布隆过滤器哈希经典面试题哈希切分位图应用布隆过滤器什么是哈希 在上一…

阿里巴巴商品详情爬虫数据字段解析 源代码分享 调用示例

返回数据代码段1"item": {"num_iid": "60840463360","title": "Slip-on Daily Urban Walking Shoes","desc_short": "","price": "$47.70","nick": "cn1522808546p…

TypeScript深度剖析:TypeScript 中类的理解?应用场景?

一、是什么 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础 类是一种用户定义的引用数据类型,也称类类型 传统的面向对象语言基本都是基于类的,JavaScript …

好友管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第4章-课后作业)

实例3:好友管理系统 如今的社交软件层出不穷,虽然功能千变万化,但都具有好友管理系统的基本功能,包括添加好友、删除好友、备注好友、展示好友等。下面是一个简单的好友管理系统的功能菜单,如图1所示。 图1 好友管理系…

api接口详解大全

api接口详解大全?优秀的设计是产品变得卓越的原因设计API意味着提供有效的接口,可以帮助API使用者更好地了解、使用和集成,同时帮助人们有效地维护它每个产品都需要使用手册,API也不例外在API领域,可以将设计视为服务器和客户端之…

【SpringCloud】SpringCloud教程之Nacos实战(三集群配置)

目录前言一.Nacos集群逻辑图二.Nacos集群搭建1.搭建数据库,初始化数据库表结构2.下载Nacos3.配置Nacos3.启动Nacos4.配置启动nginx5.测试是否成功6.设置服务的nacos地址7.新增一个配置,查看数据看是否进行持久化了前言 在我前面两篇讲的都是单个nacos&a…

Activity的启动和结束

onCreate:创建活动。此时会把页面布局加载进内存,进入了初始状态。onStart:开启活动。此时会把活动页面显示在屏幕上,进入了就绪状态。onResume:恢复活动。此时活动页面进入活跃状态,能够与用户正常交互&am…

Vulnhub系列:FristLeaks

一、配置靶机环境以往的靶机,本人是在virtual box中,去配置,和vm上的kali进行联动,但是这个靶机需要DHCP,以往的方式可能不太行了,或者可以在virtual box中桥接成统一网卡。下面介绍下本人最有用的方法&…

2021牛客OI赛前集训营-提高组(第三场) T4扑克

2021牛客OI赛前集训营-提高组(第三场) 题目大意 小A和小B在玩扑克牌游戏,规则如下: 从一副52张牌(没有大小王)的扑克牌中随机发3张到每个玩家手上,每个玩家可以任意想象另外两张牌&#xff0…

Allegro如何知道单个操作命令的拼写

Allegro如何知道单个操作命令的拼写 在用Allegro做PCB设计的时候,时常需要给某些命令设置一些快捷键,但是有时候无法知道命令的拼写是什么,就无法定义到env文件里面去 如下图 如何知道上方图标的命令拼写,下面介绍两种方法 方法一 鼠标左键移动到图标的位置,就会出现命令…