这个问题比较重要。
有网友问:
大家好,我是做工业控制的,我想问一下STM32如何实现看门狗复位不初始化RAM区,因为是做控制的所以我们想实现CPU热复位后系统能接着原来的流程走,动作开出能不受看门狗复位的影响,即复位前开出的动作,看门狗复位后还是保持开出状态,网上说可以修改启动代码,请问如何实现?谢谢!
-------------------------------------------------------------------------------------------
比如在我现在做的STM32控制继电器输出,如果用了看门狗复位,若复位前继电器是接通,那么复位后继电器断开。
那么,如果用了软复位,就是说一旦发现程序跑的不正常(如在指定时间内没有进入while(1)无限大循环),那么直接启动软复位是不是个好的法子呢?
非常值得考虑。
===========================
RM0008 说:
6.1.1 系统复位
除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器(见图4)以外,系统
复位将复位所有寄存器至它们的复位状态。
当发生以下任一事件时,产生一个系统复位:
1. NRST引脚上的低电平(外部复位)
2. 窗口看门狗计数终止(WWDG复位)
3. 独立看门狗计数终止(IWDG复位)
4. 软件复位(SW复位)
5. 低功耗管理复位
可通过查看RCC_CSR控制状态寄存器中的复位状态标志位识别复位事件来源。
=================================
那么看门狗重启了,继电器不能保持之前的状态怎么办呢?
网上的办法是硬件加上锁存器。也有道理啊,不能所有的问题都由软件来处理。软件不是万能的。要同硬件协同作战。
有网友说,断电后,PLC有的是有电池的,所以可以保持(这个和看门狗重启不保持是两回事啦)。
现在感觉一个比较好的方法是,看门狗复位后,在程序的刚开始,读出上一次的状态,如果是继电器闭合,则尽快的恢复到上一次的状态。
这个可以尝试一下!!
----------------------------
RM0008:
芯片内部的复位信号会在NRST引脚上输出,脉冲发生器保证每一个(外部或内部)复位源都能有
至少20μs的脉冲延时;当NRST引脚被拉低产生外部复位时,它将产生复位脉冲。