STM32,软复位,上电复位,看门狗复位对芯片IO状态的影响?

这个问题比较重要。

有网友问:

大家好,我是做工业控制的,我想问一下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引脚被拉低产生外部复位时,它将产生复位脉冲。

ESP32的看门狗定时器在超时后,会触发看门狗复位。在ESP32中,看门狗复位可以通过中断进行处理。 当看门狗复位触发时,ESP32会进入中断处理函数,可以在该函数中进行一些处理,如记录日志、恢复程序状态等。中断处理函数需要在程序中进行注册,可以使用ESP-IDF提供的API进行注册。 以下是一个简单的ESP32看门狗复位中断处理的示例代码: ```c #include "esp_system.h" #include "esp_log.h" static const char* TAG = "watchdog"; void IRAM_ATTR watchdog_isr(void *arg) { esp_logI(TAG, "watchdog reset occurred"); // 进行一些处理,如记录日志、恢复程序状态等 } void app_main() { // 注册看门狗中断处理函数 esp_err_t err = esp_register_shutdown_handler(&watchdog_isr, NULL); if (err != ESP_OK) { ESP_LOGE(TAG, "failed to register watchdog ISR"); return; } // 配置看门狗定时器 esp_err_t err = esp_wdt_init(1, true); if (err != ESP_OK) { ESP_LOGE(TAG, "failed to initialize watchdog timer"); return; } esp_wdt_enable(); // 正常的程序逻辑 while (1) { // do something } } ``` 在上面的示例代码中,我们首先注册了一个中断处理函数`watchdog_isr`,在函数中记录了看门狗复位的发生。然后配置了看门狗定时器,并启用了看门狗。在主循环中,我们可以执行一些正常的程序逻辑。 当看门狗定时器超时后,ESP32会触发看门狗复位,进入中断处理函数`watchdog_isr`。在函数中,我们可以进行一些处理,如记录日志、恢复程序状态等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值