STM32 复位电路设计
在此之前我是个只会抄写原理图的工程师,每当遇到一个问题时,确需要解决很久,最根本的原因在于不明白其中的原理,这次补充一下单片机复位电路设计
1. 为什么要设计复位电路?
在做一件事情之前需要明白为什么要这么做,我们为什么要设计复位电路呢?一下几点原因是我总结出来的。
- 当你的电脑出现卡死等问题的时候,大部分人会直接重启(攻城狮除外),目前市面上很多电子产品都会用复位按键,所以一个成熟的产品是大概率需要复位的
- 在产品调试阶段,尤其在调试软件的时候需要经常复位软件, 有些工程师也会采用软件复位, 不过软件复位没有硬件复位来的快捷。
以上两个理由足以说明为什么要复位电路了。
2. 复位时是具体做了哪些工作?
主要做的就是初始化每个寄存器,包括最重要的 PC 指针,不包括 RAM,然后单片机从复位地址开始执行程序。(欢迎补充)
3. 复位的前提需要什么?
3.1 复位信号
每种方式对应一种复位信号,比如硬件复位需要低电平,软件复位需要设置寄存器,看门狗复位需要配置寄存器,下面我们着重讲硬件复位,由STM32的数据手册可知,复位管脚低电平电压需要小于0.8V,输入脉冲时间为100ns。所以只需要在NRST管脚给小于0.8V的电压,持续时间为100ns就可以实现复位了。
3.2 CPU正常工作
为什么CPU需要正常工作?因为复位操作需要设计PC寄存器, 这涉及到软件层面, 故所以需要CPU能正常功能才能进行复位
3.3 晶振正常工作
为什么晶振需要正常工作?由3.2可知CPU需要正常功能, 那么CPU是靠什么正常工作的呢?显而易见CPU是靠晶振提供时钟频率的,所以晶振需要正常工作
3.4 电源正常工作
试想一下,如果电源不稳定,电压波动范围很大, 是不是会影响CPU的运行?的确是这样子的,电源一定要稳定。
3.5 复位信号是不是只要满足低电平时间大于100ns就可以呢?
100ns时间是很短的,很容易达到, 但是有没有试想一下如果只给100nS,那么此时是由复位信号了, 但是电源还没到VCC,晶振还没起振? 这一定存在的,因为上电时,Vcc 的上升时间约为 10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为 10MHz,起振时间为 1ms;晶振频率为 1MHz,起振时间则为 10ms。目前STM32单片机大部分采用8M高速晶振,那么主要问题出在电源的上升时间,为了保证系统的稳定性, 这里我们去2倍吧,20ms的低电平时间。
4. 怎么设计复位电路?
目前市面上的复位电路大部分采用RC复位,这种方式成本低廉,稳定性好,被用于大部分的设计中。
4.1 RC充电原理
4.1.1 什么是电容充电?
电荷在电容器极板上聚集的过程叫做充电过程,这个过程不是瞬间完成的,而是需要一段时间,时间取决于电路的组成元件。
4.1.2 基本RC充电电路
如图1所示,开关闭合的瞬间,电子在电源的作用下从位于电容顶部的极板沿电路移动并聚集到位于底部的极板上,导致在顶部极板聚集了正电荷,在底部极板聚集了负电荷。
开始时,电子的转移非常迅速,随后由于两个极板间产生的电压逐渐接近于所加的电源电压,移动速度减慢。最终,当电容两个极板间的电压达到所加的电源电压时,电子移动过程停止,这时候,极板上的净电荷是:
电荷在极板上聚集的过程叫做瞬态过程 —— 电压或者电流从一个稳态到另一个稳态的过程。电压-时间变化过程曲线如图2所示:
注意:vc 和 Vc 是有区别的。vc是变量,Vc是常量。
从图2中可以看出, t=0s时,电容器两端电压是 0V;一开始,电荷聚集的速度很快,导致电压急剧增加。随着时间的推移,电荷聚集的速度减慢,导致电压变化的速率也减缓,即电压继续增加,但速率变慢。最终,由于极板间电压接近外加电压,充电速率极低,直到极板间电压等于外加电压 —— 瞬态过程结束。
可以用数学中的指数函数来描述上述过程,图2的过程曲线可以用
式中:
- vc用小写斜体来表示,因为它是随时间变化的,不是常数;
- 指数写为时间(t)除以常数涛,涛称作时间常数,定义为:
涛=RC (S) - t=0S 时, vc=0;
- t=涛S 时, vc=0.632E;
- t=2涛S 时, vc=0.865E;
- t=3涛S 时, vc=0.993E;
可以得出:在直流电源作用的电路中,电容器两端的电压在经过5个时间常数后基本等于外部电压,即充电过程基本结束。
或者:一个电容的瞬态或充电过程在经历5个时间常数后便基本结束。
电流-时间变化过程如图3所示:
下图为涛=1,E=1 的充电(上升曲线)和放电(下降曲线)的电压时序图
4.1.3 关于时间常数涛
时间常数涛不可能为0,因为在容性电路中总会存在一定的电阻。在有些情况下,涛的值可能很小,但是无论多小,5倍涛的值一定存在,不可能为0。因此可以得出:电容两端的电压不能瞬间改变。
更进一步的说,电容的大小反映了电容电压变化的程度。电容越大,时间常数越大,电容两端的电压达到所加电压的时间就会越长。这在避雷针和浪涌抑制器的设计上非常有帮助,避雷针和浪涌抑制器是用来保护电路以免电路受到不可预知的过电压的损害。
4.2 STM32单片机复位电路设计
4.2.1 复位原理
我们可以根据上述的RC充电原理,采用一个电阻和一个电容串联,中间段连接至STM32的复位管脚。为了保证复位的时间很短,由上述曲线可知,当在一个时间常数时,电压为电源电压的0.632倍,若VCC=3.3V,那么一个时间常数时电压为:3.3-3.30.632=1.21V >0.8V 不满足我们的需求, 2个时间常数的时候电压为3.3(1-0.86)=0.462 < 0.8V. 满足需求,时间为100ms,2RC=20ms, RC=10mS, 可选择R=10K,C=10uF。
4.2.2 原理图设计
按照我们上面说的理论,其实有两种方式,如下图所示,那么哪种才是我们想要的呢?下图两者的区别在于电容的电阻的位置不同, 由于电容两端的电压不能突变,当刚上电时,A电路为低电平,此时单片机复位,直到保持到1个时间常数后,NRST为高电平,而B电路,一上电为高电平,1个时间常数后NRST管脚为低电平, 并且一直保持低电平, 这样会导致MCU一直复位,所以正确的电路应该A电路,而B电路适合用于高电平复位的MCU。
上图为上电自动复位电路, 如果需要加手动复位的话也和简单,只需要在AB电路的电容两端并联一个按键,当按键按下时,A图中的NRST为低电平,MCU复位,B电路为高电平。
参考资料
- lRC电路的瞬态响应-充电过程.
- 单片机在复位的时候,都进行了哪些操作?如何进行复位电路的设计?.
STM32 复位电路设计相关推荐
- STM32-F407入门学习专题(二) STM32复位和中断
系列文章目录 第2章 STM32复位启动和中断控制 目录 系列文章目录 前言 1 NVIC-嵌套向量中断控制器 1.1 NVIC寄存器 1.2 中断优先级分组 1.3 NVIC相关函数 2 中断配置实 ...
- STM32复位死机(无法启动)
STM32复位死机(无法启动) 嗯,不知道怎么说,stm32的看门狗死机了,下面是仿真时报错信息: The processor has escalated a configurable-priorit ...
- STM32复位源判断
在项目中有时候会遇到单片机莫名奇妙复位的情况,为了判断是那种原因引起复位,就需要对单片机的复位源进行判断.现用STM32F103C8T6单片机进行测试. 先看看单片机复位源都有哪些? 在STM32中文 ...
- stm32复位引脚NRST
https://recomm.cnblogs.com/blogpost/10481406 STM32F的NRST是异步复位脚. 当NRST输入低电平的时候,MCU处于复位状态,重设所有的内部寄存器,及 ...
- STM32复位与时钟、定时器
复位与时钟 1>复位 1,上电复位:MCU当NRST为低电平时产生复位,而C35电容在上电瞬间,快速充电,相当于短路,GND的0v提供给NRST,MCU处于复位状态,当C ...
- 复位电路设计(异步复位、同步释放)
以下内容摘自正点原子的:<逻辑设计开发指南> 复位电路是数字逻辑设计中非常常用的电路,不管是 FPGA 还是 ASIC 设计,都会涉及到复位,一般 FPGA或者 ASIC 的复位需要我们自 ...
- STM32 JTAG电路设计
学习需要刨根问底 1. 什么是JTAG? JTAG(Joint Test Action Group)是一个接口,为了这个接口成立了一个小组叫JTAG小组,它成立于1985年,比推丸菌的年龄还大. 在1 ...
- STM32网络电路设计
目录 01.MII接口方案 02.RMII接口方案 2.1.外部晶振(2个晶振) 2.2.外部晶振(1个晶振) 2.3.需要强力PHY 在之前的推文中<STM32网络之SMI接口>< ...
- stm32 复位到内部bootloader
sm32的bootloader一般是通过开机时设置boot0=1来实现的.下面是通过程序来实现: 原来的startup文件是直接把flash的数据加载到ram里面然后跑main函数循环 bootloa ...
- STM32的一键下载CH340 DTR RTS与复位电路NRST的学习笔记
这两天在学习stm32最小系统板的时候 对这一部分特别的不理解 于是就去找了很多东西去看 先说一键下载电路吧 先引用一张正点原子的原理图: 在芯片手册上查找ch340的手册,上面对于 RTS与DTR的 ...
最新文章
- 借鉴丰田方法对大型软件组织进行敏捷改造 (上)
- 沈向洋出任董事长李笛任CEO,「微软」小冰变身「中国」小冰
- 推荐一本好书《改变,从阅读开始》
- Leetcode 55.跳跃游戏 (每日一题 20210706)
- RHCE课程-RH253Linux服务器架设笔记三-Samba服务器配置(1)
- JVM内存区域划分及其管理机制
- sublime unable to save 没有那个文件或者目录
- SQL SERVER 数据库如何限制一列不能重复(已经有主键)
- 贪吃蛇python小白_面向 python 小白的贪吃蛇游戏
- 【python之旅】python简介和入门
- 江苏计算机二级c语言考试范围,江苏省计算机二级C语言考试大纲
- 小程序的框架研究报告(开发框架、UI框架)
- Enterprise Architect 类关系对应解析
- linux服务器在没有网的条件下,怎么安装使用numpy呢
- 小白也能学会的调色教程,你学会了吗?
- 像素(px)到底是个什么单位
- arduino开发板安装驱动
- Python——切片操作
- 赶紧买房还是继续观望?
- python win32 模拟按键