一、复位电路
首先明白复位是什么意思,在stm32中,复位就是将stm32的硬件和软件恢复到最初的原始状态。
复位的目的是清除当前的程序运行状态,包括寄存器的值、内存的内容以及外设的配置,从而使控制器能够重新开始执行程序。举个例子来说,你做一个实验,验证GPIO的输出,你点了一个灯,控制着亮3秒就灭,然后启动程序,但是程序启动后你手机电话响了,你去接电话,从而导致你没有看到实验现象,你就可以按一下复位电路从而使程序重新执行一次。
好的弄清楚了复位是个什么东西了,那么我们如何做到复位呢?stm32的复位方式有很多种,包括:
外部复位、窗口看门狗计数终止、独立看门狗计数终止、软件复位、低功耗复位。
这么多种复位是不是很恶心,别怕,对于硬件电路的设计,我们只需要外部复位就OK。
什么是外部复位?
通过翻阅手册我们可以知道,外部复位就是NRST引脚上的低电平,因此我们只需要给NRST引脚置一个低电平,也就是接地被呗。 对于这个低电平,其实还有特殊的要求,就是:要最小20us,这个是手册上说明的。
二、电路设计
了解了这么多,如何设计一个复位电路呢?不妨这样设计,NRST正常情况下引脚接一个高电平,就是3.3V,同时通过一个按动开关接地,当我们不需要复位时候,引脚始终是高电平,当我们需要复位时候,按动开关,就复位了。这个设计很棒。我们将其画出来:
但是对于这个电路来说,存在一定的漏洞,NRST直接接3.3V,相当于与3.3短路,此时按下按键,可能会造成电源短路的现象。因此我们需要改进。
我们的改进方法是:NRST引脚通过一个10K的上拉电阻接到3.3V,同样按键和一个10uf的电容并联接地,如图:
这么做的好处是:
【1】通过10k的上拉电阻,避免了NRST引脚悬空的时候电平不稳定的状态,同时配合stm32内部的上拉电阻,使得复位更精确。
【2】这里的C1电容很巧妙,首先能够消除按键按下的按键抖动现象,其次可以平滑电源电压,使得NRST引脚电平更稳定。
【3】这个电路可以做到上电自动复位,就是通电瞬间可以自己复位。电容和上拉电阻共同作用,一起构成一个简单的RC延时电路。当电源上电时,电容需要一定的时间来充电,从而使得NRST引脚在上电瞬间被拉低,完成复位操作。或者可以理解为电容充电的时候相当于短路,充满电才短路,刚上电的时候电容短路,引脚被拉低,就复位了。
由此,我们得到了stm32最小系统的一个复位电路,从而实现按键复位和上电复位的功能。