当前位置:   article > 正文

单片机复位详解_nrst

nrst

复位(stm32f407ZGT6)-属于中断操作

共有三种类型的复位,分别为系统复位、电源复位和备份域复位。

系统复位

除了时钟控制寄存器 CSR 中的复位标志和备份域中的寄存器外,系统复位会将其它全部寄

存器都复位为复位值。

只要发生以下事件之一,就会产生系统复位:

1. NRST 引脚低电平(外部复位)

2. 窗口看门狗计数结束(WWDG 复位)

3. 独立看门狗计数结束(IWDG 复位)

4. 软件复位(SW 复位)(请参见软件复位

5. 低功耗管理复位(请参见低功耗管理复位

NRST 引脚低电平(外部复位-不可屏蔽的硬件中断)

这两个RESET的信号都会连接到NRST,简单理解就是说当RESET输出低电平小于0.8V并且持续100ns,stm32就会复位,先说上图,这个算是一个手动复位RC充电电路,上电的瞬间,电容C12两端电压可以认为是0,RESET会输出低电平,stm32处于复位状态,VCC3.3通过电阻R3给电容充电,当电容C12的电压升高到0.8V以上,stm32退出复位状态进入运行状态。当我们需要手动复位的时候只需要按下按钮,让电容放电,松手后就会重复上述流程,stm32会进行一次复位。

复位电路不止这一个

ISP下载复位

还记得一键下载也需要复位吗,如下图(具体原理参考文章链接

JTAG下载复位

我在使用ST-LINK进行下载时,就因为这个RESET,让我草了个草

stm32中“拔掉jlink”程序无法正确运行,原因是只拔了仿真器与电脑连接的那端,然后把另外端依然接在板子上

当JLINK在板子上连接的时候,断电情况下,会一直把RESET拉低,导致芯片一直处在复位状态,所以不能正常工作。

把jlink或stlink和stm32板的的连接排线(jtag 接口)也拔掉,这个时候主板就可以工作了。

由于JLINK内部也有电路,调试时会自动产生一个复位信号,让系统恢复默认状态,然后程序开始运行,因此调试下程序应该都能正常启动。

补充:

nTRST(上图的JTRST) 测试系统复位信号

nRESET(RESET、nrst) 目标系统复位信号\

关于目标系统复位信号和测试系统复位信号

测试系统其实指的是目标板上JTAG扫描链中各个芯片中TAP测试访问端口和边界扫描单元等,nTRST也就是指复位TAP测试访问端口,不复位芯片逻辑。而目标系统就是目标板上除了测试功能以外的正常逻辑了。nRESET连接FPGA的PROG_B(复位配置逻辑电路,但是这时的复位是由上位PC机使用控制软件通过JTAG电缆或控制器来控制的,条件缺一不可。源自文章

看门狗复位(WDT)

(此部分参考CMS80F231系列)

看门狗复位是系统的一种保护设置。在正常状态下,由程序将看门狗定时器清零。若出错,系统处于未知

状态,看门狗定时器溢出,此时系统复位。看门狗复位后,系统重启进入正常状态。

WDT 的计数器不可被寻址,在上电复位结束后程序运行时就开始计数,设置 WDT 寄存器时建议将 WDT

计数器清除,以便准确控制 WDT 的溢出时间。

看门狗复位的时序如下:

- 看门狗定时器状态:系统检测看门狗定时器是否溢出,若溢出,则系统复位;

- 初始化:所有的系统寄存器被置为默认状态;

- 程序:复位完成,程序开始从 0000H 运行。

WDT 溢出后复位 CPU 与所有的寄存器,1 个 Tsys 后程序立即从 0000H 开始执行。WDT 复位不会重新

进行上电复位配置。

WDT 的时钟源由系统时钟(SystemClock)提供,WDT 计数器的计时基本周期为 Tsys。

看门狗的溢出时间可由程序设置,在 CKCON 寄存器 WDS2-WTS0 两位可选择溢出时间。

(stm32f407ZGT6)

此部分原文链接:STM32的复位方式:硬件复位、软件复位(看门狗复位和系统复位)-CSDN博客

看门狗复位:独立看门狗和窗口看门狗。

独立看门狗

STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即主时钟发生故障,它也仍然有效,这里我们需要注意独立看门狗的时钟不是准确的40Khz,而是在30~60Khz之间变化的一个时钟,只是我们估算以40Khz来计算,看门狗对时间要求不是很精确,时钟有点偏差还是可以接受的。

工作原理:

在**键值寄存器(IWDG_KR)**中写入0XCCCC,开始启用独立看门狗,此时计数器开始从其复位值OXFFF递减计数,当计数器计数到末尾0X000的时候,会产生一个复位信号(IWDG_RESET),无论何时,只要寄存器IWDG_KR中被写入0XAAAA,IWDG_RLR中的值就会被重新加载到计数器中从而避免产生看门狗复位。

还有两个寄存器,一个预分频寄存器(IWDG_PR)。该寄存器是用来设置看门狗的时钟分频系数,最低为4,最高位256,虽然是32位寄存器,我们只使用了最低3位。

另一个重装载寄存器。该寄存器用来保存重装载到计数器中的值。该寄存器也是一个 32

位寄存器,但是只有低 12 位是有效的。

**预分频寄存器(IWDG_PR)和重载寄存器(IWDG_RLR)**的写保护 :IWDG_PR和IWDG_RLR寄存器具有写保护功能,要想修改这两个寄存器的值,首先要向IWDG_KR中写入0X5555。以不同的值写入这个寄存器或者重装载(写入0XAAAA)都会重新启动写保护。

独立看门狗由内部低速时钟LSI提供计数时钟,8 位分频,12位计数,需要定期喂狗(重载数值 ReloadCounter),如果计数值减为0了,还没有重载数值,则会响应复位事件。

启动过程:

向IWDG_KR中写入0X5555

通过这一步我们取消了IWDG_PR和IWDG_RLR的写保护,下一步我们设置他们初值。

设置IWDG_PR和IWDG_RLR的初值。

我们计算一下看门狗的喂狗时间(看门狗溢出时间)计算公式

*Tout=((4*2^prer)rlr)/40

其中Tout就是看门狗溢出时间(单位ms),prer是看门狗时钟预分频值(IWDG_PR值),范围为0~7,rlr位看门狗重载值(IWDG_RLR)。比如我们设置prer为4,rlr的值为625,我们就可以计算得到Tout=64*625/40=1000ms,这样,看门狗的溢出时间就是1S,只要在这一秒钟内,有一次吸入0XAAAA到IWDG_KR,就不会导致看门狗复位(写入多次也是可以的)(由于看门狗的时钟不是准确40Khz,所以喂狗不要太晚,以免发生看门狗复位)。

向IWDG_KR中写入0XAAAA

通过这句可以将重载寄存器(IWDG_RLR)中的计数初值载入到看门狗计数器中(也可以时钟该命令喂狗)。

向IWDG_KR中写入0XCCCC

通过这句我们就启动了STM32的看门狗了,使能了看门狗,在程序里面我们就必须间隔一定的时间就喂狗,否则导致程序复位,利用这一点,我们通过一个LED来指示是否复位,验证独立看门

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/954608
推荐阅读
相关标签
  

闽ICP备14008679号