电子产业一站式赋能平台

PCB联盟网

搜索
查看: 118|回复: 0
收起左侧

单片机如何选择合适的系统复位方案?

[复制链接]

1001

主题

1001

帖子

8807

积分

高级会员

Rank: 5Rank: 5

积分
8807
发表于 2025-3-18 08:03:00 | 显示全部楼层 |阅读模式

30m432iej3r640467531.gif

30m432iej3r640467531.gif

7 o! c% q/ @% S7 c) g8 F点击上方蓝色字体,关注我们
4 O( U; L+ a/ A3 V
( q% O* p8 {( j$ ~# n! G6 Q
0 |% b4 N+ c* A  t  Y  E$ P/ {看门狗的基本原理是通过一个定时器来监测系统运行状态。正常情况下,应用程序需要定期向看门狗发送信号(喂狗),以防止定时器溢出。
8 x2 b* |/ E: [- f4 E( R- v. i4 B
一旦程序发生异常,导致看门狗未能在规定时间内收到喂狗信号,定时器将会触发系统复位。$ Y3 u6 e+ V4 S7 L. Z$ D
* q6 T% I% b$ V" k0 ?
根据实现方式的不同,看门狗可以分为硬件看门狗软件看门狗
  }2 p2 C. z" v$ Y& ?+ n9 n( S! d
8 u: `* K3 l5 }2 @# T  E) s

4gkt5o5bsb3640467631.png

4gkt5o5bsb3640467631.png
. x: E9 ?0 Q9 w9 D' I, [* k
1$ N. c, j2 Y8 j" P
硬件看门狗0 G+ L$ Y6 O# Y8 m* e1 o
1.1、外部独立硬件看门狗
3 w% W/ n- @. ?

ajrddgejbsb640467731.png

ajrddgejbsb640467731.png
7 f5 j6 T1 }; y9 m) O
* n$ Q7 B/ `0 p! D0 L6 G( S
特点:
6 i, b1 I9 O& Z4 e* [
  • 作为独立于MCU/MPU的外部芯片运行
  • 不受主处理器影响,即使处理器死机仍可触发复位
  • 可靠性最高,适用于工业、汽车、航天等对可靠性要求极高的应用场景7 }. V" g0 e% [& X

    2 l0 a$ A, \. F9 R0 S
    * v: c; K8 x3 ]" g7 A! V
    工作方式:5 \- n* x' l0 A+ t( [
  • MCU 通过 GPIO 向看门狗芯片发送喂狗信号(例如周期性地翻转一个引脚)
  • 若 MCU 失去响应,外部看门狗检测到超时,则输出复位信号
  • 由于其独立性,该类看门狗的喂狗时间通常不可调或调整较受限
    " x8 Y8 x: y: h
    - m) S) b' r- w& O7 @. i5 E8 c
    1.2、内置硬件看门狗1 {- k9 u- [. ]! ?3 J2 a( {
    特点:, Q$ E: B" S: u7 z! r  A% C
  • 由处理器内部的定时器实现,通常由 MCU 内部的 WDT 外设负责管理
  • 需要软件驱动程序支持,可编程设置超时时间
  • 复位逻辑依赖于 MCU 自身,一旦 MCU 时钟或电源管理单元故障,可能导致看门狗失效
    ' b. W7 |5 S0 H: j, G9 }' j
    ' U1 D; a9 y+ o, v3 _
    9 q8 V! o" E5 l" v9 Q( `% N+ a
    工作方式:$ Y3 R, \; P0 V5 \2 g- L! w
  • 在应用程序中启用 WDT 并设置适当的超时时间
  • 定期调用 API 进行喂狗(如 STM32 的 HAL_IWDG_Refresh())
  • 若 MCU 进入死循环或阻塞,看门狗超时触发系统复位6 P  e9 f0 d2 C5 n6 K5 K% b0 y
    : X. M: U- f7 r! g; V9 I( W1 [6 O3 a
    2$ s7 E/ ]# M/ J! ]8 Q7 X$ {
    软件看门狗% v8 H  M5 C, {& Y# S- V4 j8 S/ O, K
    特点:6 ^6 G8 v# q7 p7 U+ G  @' u
  • 通过软件定时器模拟看门狗功能
  • 依赖系统的定时器中断,若中断系统异常,可能会失效
  • 适用于轻量级应用,但可靠性远低于硬件看门狗" |$ I, I" {5 m* `* t

    2 |. R) Y. I6 W% b* C; w

    0 l- K, u0 E; v# U4 o% X& i工作方式:" i& ~# d; Z- l5 r+ T2 d0 ~
  • 在任务调度器(如 FreeRTOS)中实现定时检查
  • 任务正常运行时定期重置软件定时器
  • 若某任务超时未喂狗,则触发复位逻辑
    . a: |' @: f' H8 t/ S+ M; g

    : _" m3 U, k3 K9 F. t在调试过程中发现的故障,应该通过代码优化、异常处理、错误恢复机制等手段加以解决,而不是依赖看门狗。
    / `6 X' t! p5 L) G' u
    - y$ {9 H$ p2 L) i! G看门狗的作用是在非人为可控情况下自动恢复系统,它不能取代良好的软件工程实践。6 X$ s# K+ p1 d3 h* g* l! x

    ) G1 Z3 P" i! w8 S6 }在某些应用场景(如数据采集系统),系统崩溃时可能需要保护关键数据,以便在重启后进行恢复。" i2 O" Y, B' o$ a/ d' n2 ^3 d
    / M4 Z8 D* j7 @
    这可能需要:
    8 G$ t0 _  M- Y8 m- e- i) B8 L) G
  • 采用EEPROMFlash电池备份 RAM 存储关键变量
  • 结合上电自检(POST)机制,分析重启原因,决定是否进入故障恢复流程) {) ~/ h# E, U; B1 K: @

    & `3 a5 m. C/ C7 }4 R3
    5 Q* C4 r9 J( E4 B5 k; E看门狗喂狗策略
    ; }$ ^, s0 C% {' p, x7 O
  • 避免在主循环或高频中断中盲目喂狗:这样可能会掩盖实际的问题,导致系统在异常情况下仍然喂狗,无法及时复位。解决方案:在关键任务执行完毕后喂狗,而不是简单地在循环内喂狗。
  • 结合任务超时检测(对于 RTOS):可以使用任务看门狗(Task Watchdog),在任务级别进行超时监测,而非仅靠系统级 WDT 进行复位。
  • 多级看门狗策略:采用软件看门狗监测任务,硬件看门狗监测整个系统,以构建更健壮的故障恢复机制。+ V' F* b% z8 |. n3 \
    看门狗是一种保障系统稳定性的关键机制,但它并不能取代软件优化和异常处理。
    " y- J8 y4 _. a& |6 E2 n# L7 q; }0 c9 z$ ~1 A9 ]$ V
    在高可靠性应用中,外部硬件看门狗是最佳选择,而在一般嵌入式应用中,内置硬件看门狗已经足够。* q0 p# Q1 ~" d. a/ l

    5 a9 g* f. A: H4 u- t0 T& \软件看门狗可以作为任务级监测的补充手段。
    - j; |& Q9 z7 ]# V2 t; t
    9 X/ h9 b. `" \3 f# V% W2 I3 P% h合理利用不同类型的看门狗,结合健壮的软件架构,才能真正提升系统的稳定性和可靠性。
    ' h3 e! z2 L8 q2 |9 ^% c7 U

    neiqvdt43bo640467832.jpg

    neiqvdt43bo640467832.jpg
    0 _" j; X, Y( v& s

    4hoxr3bhvct640467932.gif

    4hoxr3bhvct640467932.gif

    0 R8 p2 G5 ^; z5 Q" y1 q- Y点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表