以上是我们的STM32103C8T6最小系统板中的复位电路,以上为例,来研究下复位电路:
A.首先我们先看左边的复位电路:
把芯片的RESET复位信号通过一个按键和一个电容并联到地,上方接一个10k电阻到电源。
单片机复位电路的作用是:使单片机的状态处于初始化状态,让单片机的程序从头开始执行,
运行时钟处于稳定状态、各种寄存器、端口处于初始化状态等等。目的是让单片机能够稳定、正确的从头开始执行程序。
单片机有两种复位方式:一是高电平复位,二是低电平复位
四种常用的复位电路如下:
第一种:上电复位电路:
我们以高电平为例,这个电路是利用电容的充电来实现复位的,当电源接通的瞬间,
单片机复位端的电位与VCC相同,随着充电电流的减少,复位端的电位逐渐下降。直至电容充满电,复位端的电压变为低电平。
电路中R和C的值可以根据下面的式子计算,其中T是复位时间。
T=(1/9)*R1*C1
另一个反之。。。。。计算公式:T=9*RC
第二种:按键复位电路:
那么我们可以得出最开始的电路是低电平复位电路,那么我怎么知道芯片要低电平复位呢?
1.芯片的数据手册可以查看。
2.一个小诀窍:对于单片机是高电平还是低电平复位,我们可以通过观察单片机的引脚图进行一个直观的判断,
当单片机引脚图中复位端口的名称上面有一个“-”时,该单片机就是低电平复位,没有“-”时,该单片机就是高电平复位,
例如单片机端口名称是RST,那它是高电平复位,是/RST(/是上划线)时,它是低电平复位
第三种:加了二极管的按键复位电路:
第二个的的按键复位电路如果当电源因某种干扰瞬间断电时,由于C不能迅速将电荷放掉,待电源恢复时,
单片机不能上电自动复位,导致程序运行失控。电源瞬间断电干扰会导致程序停止正常运行,形成程序“乱飞”或进入“死循环”。
如果有了这个二极管就可以快速将电容上的电压释放,保证复位信号正确无误。也能快速为下次复位做好准备。
有个问题来了,二极管正向导向电源,这个电如何放掉?
此时对于地来讲,地成为了高处,负电压成为低处,电压会通过地与二极管,电阻与reset负电压形成回路放掉。
而对于低电平复位电路,RRESET此处的高电压通过二极管与电阻与地形成回路放掉电压。
网络上对于复位有个很搞笑的段子如下:
当电容充满电之后我们把电源开关断开了,这个电容中的电“何去何从”呢?
VCC和GND之间接了N多的器件,所有的器件都对它说:“把你那点电给我吧,我还能坚持一下。”
电容说:“给你们没问题,可是我他娘脑袋上有个电阻挡我的财路,你们先别急,我慢慢把电放给你们。”
当电容刚刚要把电通过那个上拉电阻放出来,电源开关突然又接通了。
CPU开始冲电容吼:“孙子!你Y的那个充电过程怎么没啦?我还要复位呢!”
电容不干了:“废话,我上次充的电还没放呢这他妈电源又通啦!”
CPU急了:“那我怎么办?我得复位啊!”电容眼珠一翻:“管你Y怎么办,死去吧你!”
第四种:用复位芯片复位电路:
对于一些非常复杂的电路,为了让芯片正确复位,必须用一些复位芯片,能够保证其精确的复位。
B.我们在来看下右边的电路:
对于这个电路,我们首先要了解单片机的状态,如下:
BOOT1接了一个下拉电阻,因此为低电平,为0,那么会产生第一种和第二种情况,
当K2按下,BOOT0为高电平,1,从系统存贮器启动
当不按下时,为0,从主闪存存贮器启动。
那么这三种方式又是什么呢?
1、主闪存存储器
是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,
就是下载到这个里面,重启后也直接从这启动程序。
2、系统存储器
从系统存储器启动,这种模式启动的程序功能是由厂家设置的。
一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,
STM32在出厂时,由ST在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,
这是一块ROM,出厂后无法修改。一般来说,我们选用这种启动模式时,是为了从串口下载程序,
因为在厂家提供的BootLoader中,提供了串口下载程序的固件,
可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:
Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader
Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中
Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动。
3、内置SRAM
内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。
假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,
可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,再将程序下载到Flash中。