电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

918

主题

918

帖子

7399

积分

高级会员

Rank: 5Rank: 5

积分
7399
发表于 昨天 08:03 | 显示全部楼层 |阅读模式

30m432iej3r640467531.gif

30m432iej3r640467531.gif
3 L) b" z6 U, P  T( r5 n+ K% O
点击上方蓝色字体,关注我们
, _. ?1 L( f7 T  t2 N( u9 a5 J. P0 f
/ u2 D! l! J; j. n: A6 J! x, ]5 Z
1 @! Z. i% o/ B3 C0 \) v看门狗的基本原理是通过一个定时器来监测系统运行状态。正常情况下,应用程序需要定期向看门狗发送信号(喂狗),以防止定时器溢出。
7 P" @, c% s: X7 `* @5 v) L  k4 L8 o/ A) |4 L6 I
一旦程序发生异常,导致看门狗未能在规定时间内收到喂狗信号,定时器将会触发系统复位。- B. R0 |9 D. o% S! j

$ }' R3 a$ j! T0 I! g3 q, L8 O根据实现方式的不同,看门狗可以分为硬件看门狗软件看门狗4 f3 d; O: Y' [* I* u# ]2 H

9 }+ `4 L5 ]1 O5 m4 E

4gkt5o5bsb3640467631.png

4gkt5o5bsb3640467631.png

( b" D2 q8 ~, P' x& ?- }10 S' M! q7 I, X( g
硬件看门狗" E. P( U  C# C" P- {8 i5 n+ S
1.1、外部独立硬件看门狗
7 x3 ~) W  _9 p0 t; N

ajrddgejbsb640467731.png

ajrddgejbsb640467731.png
4 G* [' |9 h5 m* A2 P

% g* o& X% x" `! V特点:
5 q, _' f/ r" [! I) Y
  • 作为独立于MCU/MPU的外部芯片运行
  • 不受主处理器影响,即使处理器死机仍可触发复位
  • 可靠性最高,适用于工业、汽车、航天等对可靠性要求极高的应用场景- V% ^9 U: y% X7 e. y- V; [2 L
    , Q5 l  W$ H( U+ h$ G1 W( ?. ^

    3 N. _4 h2 D# k; y3 ~1 ^工作方式:# {$ N9 F6 }- I$ K. S
  • MCU 通过 GPIO 向看门狗芯片发送喂狗信号(例如周期性地翻转一个引脚)
  • 若 MCU 失去响应,外部看门狗检测到超时,则输出复位信号
  • 由于其独立性,该类看门狗的喂狗时间通常不可调或调整较受限
    8 e% _" r# z, p9 H' W5 Q0 i
      \6 k. ^8 K" T& R
    1.2、内置硬件看门狗
    + Z5 c( Q' J) X0 p0 a6 q特点:! @, v' p+ r% u
  • 由处理器内部的定时器实现,通常由 MCU 内部的 WDT 外设负责管理
  • 需要软件驱动程序支持,可编程设置超时时间
  • 复位逻辑依赖于 MCU 自身,一旦 MCU 时钟或电源管理单元故障,可能导致看门狗失效
    0 l9 F4 N# L! |% k+ B6 \

    : f( ^: |" |, M" E2 P2 a% ~' i
    / ?& c1 b5 Y& |; F0 j/ Q- Q
    工作方式:! \/ P) ^  H' G* w' S* r. G
  • 在应用程序中启用 WDT 并设置适当的超时时间
  • 定期调用 API 进行喂狗(如 STM32 的 HAL_IWDG_Refresh())
  • 若 MCU 进入死循环或阻塞,看门狗超时触发系统复位
    7 N8 v0 f/ c; E% c9 A: N" ~
    1 }: V$ T  ?. E7 M
    2
    0 \$ y% O: F1 K' K* K& u软件看门狗
    , ^! B& A1 s0 d特点:
    ' U/ ~+ d, _2 j/ b' s$ `- c% Z& k. g
  • 通过软件定时器模拟看门狗功能
  • 依赖系统的定时器中断,若中断系统异常,可能会失效
  • 适用于轻量级应用,但可靠性远低于硬件看门狗
    7 k; U$ Q# y! I8 j

    ' ^# g0 w2 u& J- c
    1 }. l& M: T2 Y* ?
    工作方式:; J* K" q, B, r, U: w+ Y! V
  • 在任务调度器(如 FreeRTOS)中实现定时检查
  • 任务正常运行时定期重置软件定时器
  • 若某任务超时未喂狗,则触发复位逻辑4 Q! i' J- r8 n* D; B9 ]# e5 a
    " S3 v) l* W( o. s
    在调试过程中发现的故障,应该通过代码优化、异常处理、错误恢复机制等手段加以解决,而不是依赖看门狗。
    2 x! v0 O! o/ _+ E. e; V  Z: m* K/ A) `& H3 [8 s8 T& _
    看门狗的作用是在非人为可控情况下自动恢复系统,它不能取代良好的软件工程实践。
    ( @# q2 Q7 O& I* }8 b! x9 A
    ) R9 [9 K. l1 _/ g! w  E6 n- {. o% W在某些应用场景(如数据采集系统),系统崩溃时可能需要保护关键数据,以便在重启后进行恢复。/ w5 a, M0 \4 ~4 d# G& R3 g$ E& ?3 u5 n
    % C% W; H# i7 P) W
    这可能需要:; h. b* o8 ^1 @: w5 x3 J
  • 采用EEPROMFlash电池备份 RAM 存储关键变量
  • 结合上电自检(POST)机制,分析重启原因,决定是否进入故障恢复流程' o/ @/ A( R1 T+ \) D  U

    ' v8 f9 _: o. a( G37 I$ u- W3 }# {3 T1 O8 t
    看门狗喂狗策略
    % U  g! G/ b# x- N0 E' J1 z
  • 避免在主循环或高频中断中盲目喂狗:这样可能会掩盖实际的问题,导致系统在异常情况下仍然喂狗,无法及时复位。解决方案:在关键任务执行完毕后喂狗,而不是简单地在循环内喂狗。
  • 结合任务超时检测(对于 RTOS):可以使用任务看门狗(Task Watchdog),在任务级别进行超时监测,而非仅靠系统级 WDT 进行复位。
  • 多级看门狗策略:采用软件看门狗监测任务,硬件看门狗监测整个系统,以构建更健壮的故障恢复机制。1 Z5 P+ s) q# r1 A
    看门狗是一种保障系统稳定性的关键机制,但它并不能取代软件优化和异常处理。" m; p+ @( w8 s5 I8 t8 y

    $ X5 Z) Q1 W& i  Q1 \在高可靠性应用中,外部硬件看门狗是最佳选择,而在一般嵌入式应用中,内置硬件看门狗已经足够。
    $ x9 A# ?3 x/ p" u9 `7 F( B& C5 x. b' c, G9 N
    软件看门狗可以作为任务级监测的补充手段。
    7 U+ O8 {# M$ M3 W: m  C
    5 H2 u4 B2 l/ d# W" }+ s% `! X合理利用不同类型的看门狗,结合健壮的软件架构,才能真正提升系统的稳定性和可靠性。1 @6 b0 B, r  {

    neiqvdt43bo640467832.jpg

    neiqvdt43bo640467832.jpg
    0 ?4 ]/ h( u; F6 z

    4hoxr3bhvct640467932.gif

    4hoxr3bhvct640467932.gif

    3 E4 d: A: b8 n) x! z: \. L$ \  P点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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