feat(vd960DBN): 硬件 IWDG 看门狗 + 平台响应超时重启

设计:
  1. 硬件 IWDG: LSI≈40kHz, Prescaler=256, Reload=625 → ~4s 超时
     主循环 iot_mqtt_poll() 每轮喂狗, 防死循环/硬故障

  2. 平台响应看门狗: 3×心跳周期(180s)内无平台回复 → NVIC_SystemReset
     _iot_last_recv_ms 刷新点:
     - iot_handle_publish() — 收到平台任意 PUBLISH 命令
     - iot_evt_handle_ack() — event_report 的 ACK
     - iot_handle_suback() — 刚连上 READY 时初始化计时

  3. 仅在 IOT_STATE_READY 时检查 (未连上不触发)
This commit is contained in:
wangfq
2026-07-23 14:49:07 +08:00
parent 199cb5d23f
commit 127fed4b07
2 changed files with 50 additions and 0 deletions
@@ -21,6 +21,7 @@
#define IOT_MQTT_RECONNECT_MIN_MS 5000 // 最小重连间隔
#define IOT_MQTT_RECONNECT_MAX_MS 60000 // 最大重连间隔 (指数退避上限)
#define IOT_MQTT_HEARTBEAT_MS 60000 // 心跳上报周期 (60s)
#define IOT_MQTT_WDT_TIMEOUT_MS 180000 // 平台响应看门狗: 3×心跳=180s 无回复→重启
#define IOT_MQTT_RECV_BUF_LEN 1024 // 接收缓冲区 (单次交互 ≤1024)
#define IOT_MQTT_SEND_BUF_LEN 1024 // 发送缓冲区 (单次交互 ≤1024)
#define IOT_MQTT_TOPIC_MAX_LEN 128 // Topic 最大长度
@@ -52,5 +53,7 @@ void iot_mqtt_poll(void); // 主循环轮询 (状态机 + 心跳 +
void iot_mqtt_handle_sock_int(uint8_t socketid, uint8_t intstat); // Socket 中断处理
void iot_mqtt_publish_sensor(void); // 推送传感器数据到 MQTT
void iot_evt_handle_ack(uint32_t msg_id, int code); // event_report 平台应答入口 (V1.04)
void iot_watchdog_kick(void); // 喂硬件 IWDG (主循环调用)
void iot_watchdog_check(void); // 平台响应超时检查 (180s无回复→重启)
#endif /* __IOT_MQTT_SRV_H__ */