单片机复位详解

复位(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来指示是否复位,验证独立看门狗

  • 22
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
STM32F407最小系统电路指的是用来搭建STM32F407微控制器最简单的工作电路,它是由几个基本元件组成的。 首先,STM32F407微控制器是中央处理器,需要提供电源给它。最小系统电路中需要一个稳定的电源电压,可以使用一个电源模块或者一个稳压芯片来实现。一般情况下,STM32F407工作电压为3.3V,因此需要提供一个3.3V的稳定电压。 其次,系统电路还需要提供连接与STM32F407微控制器的外围器件的接口。这些接口包括通用输入输出(GPIO)、通用串行总线(I2C、SPI、USART等)以及模拟接口(ADC、DAC等)。需要根据具体应用需求设计相应的接口线路,以实现与其他设备的通信或者数据采集。 另外,为了保证STM32F407微控制器的正常工作,还需要添加一些辅助元件。例如,一个复位电路用于在上电或者复位时将微控制器复位到初始状态。一个晶振用于提供系统时钟,并需要连接到微控制器的时钟输入引脚。还需要适当的电容和电阻用于滤波和保护。 最后,为了方便调试和程序下载,可以添加一个调试/下载接口。常见的接口有SWD和JTAG,可以选择其中一个接口设计连接线路,并将之连接到开发板上。 综上所述,STM32F407最小系统电路包括电源模块、外围器件接口、辅助元件和调试/下载接口等几个基本部分。设计时需要根据具体需求选择合适的元件并进行电路连接,以确保STM32F407微控制器正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不熬夜,早点睡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值