你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F1_WDG看门狗(独立+窗口)

[复制链接]
STMCU小助手 发布时间:2021-11-30 21:26
前言
! h% ^, H4 H1 c; S  z- Y% t
& X: i& d* H" W8 j# B6 p今天总结“STM32F103 WDG看门狗”,STM32F1有两个看门狗,IWDG独立看门狗和WWDG窗口看门狗,今天将两个看门狗一并总结了。
3 l1 N. \# a% y! l4 \. |/ `8 x- r; l! T- ]; \' D9 V& E7 x
总结一下二者的区别:$ J0 N% H8 E7 g3 i7 V
- H  W" ?3 C7 d- |
1)、IWDG使用内部低速时钟LSI,WWDG使用系统时钟APB1ENR% n6 d4 g: K5 k
, a: M6 w# ^7 R7 o3 C
2)、IWDG没有中断,WWDG有中断
* Z$ S$ J# {( T/ D0 f; B) `! Q8 O' o. C
3)、IWDG是12位递减的。WWDG是7位递减的8 J. ^: i/ l" z+ M) F" o

# k, P4 N4 J+ ~4 P; G& D8 f4 ?3 s4)、IWDG只有下限,WWDG有下限和上限/ |0 M' {& i2 P) N3 ~
6 }* s( M% i0 N9 Q$ t- h- P
5)、IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序。' }1 x+ a5 _, G- a% d
5 K& D5 A' ?% {; M1 }  p0 Y
看门狗在长期工作的产品中用到比较多,作用很简单,防止死机。看门狗的功能也可用于定时计数等。
& w3 e. F+ j! U- J  [8 Z7 [( d' E: F/ P- J6 E* ^( f$ t& Y
本着免费分享的原则,将总结的工程源代码分享给大家,还望看到的朋友关注一下微信公众号,并将文章分享给你的朋友。
  D* t9 t5 G! s- s& L
" \: j) J1 W0 H: D4 \" |内容讲解; k9 n* N6 l% v6 P
0 n! j4 C! y" y# Z+ Y; D- F; B
工程概要说明: IWDG工程基于“EXIT中断”工程修改而来,因为使用到按键来喂狗。系统复位,快速闪烁两次LED,接下来间隔1秒串口打印一个计数值(从0 - 8),在8秒的时间内按键喂狗,计数值会归零;如果不喂狗则会复位。* B! O1 ?. z' u; I: h; o

8 T7 U2 Q- U( vWWDG工程基于“TIM定时”而来,因为使用了定时的功能。我提供的工程喂狗的时间是57ms(刚好最大值),间隔57ms喂狗一次,不会复位(LED快速变化, 快速打印WWDG...); 如果大于57ms(自己可以修改一下)未喂狗则会复位(LED慢速变化, 不断打印Reset...)。
, @) ^+ n/ _& ?( D) C0 Y0 E8 _/ i$ \# |& ^9 Z0 A
提供的工程简单明了,详细中文注释,方便自己方便大家。
2 X) E# k: W, u- q+ y
' z/ n& y: [! G! Q4 {; k! J/ J. `关于“STM32F103  WDG看门狗” 我把重要的几点在下面分别讲述:
1 u2 _: ?8 h5 {- C# A5 N& Y
/ R7 `" {8 p$ L6 f% ^0 y一、IWDG的配置" Z7 |! b! H! E( K/ w
8 Z6 F2 V1 u% O
20160517225637401.png

' q* Z/ M. A, R! m. h! }
' F4 l0 E+ j- {4 z& l; m$ A3 @
20160517225641035.png
2 D( k) \9 ?9 A: P5 Z1 y1 g) |; F
9 ~4 d) t5 Q% p) f$ M' A6 s
该函数位于IWDG工程的main.c文件下面;3 |, n9 h0 P0 o! `  a; I

, ~" ~1 n- |4 H+ E- x提供的框图为见资料。
& J. }6 H5 \  }  _" x
3 a; _! b2 x& z/ H, o7 L2 r我想大部分关心的是这个8秒的喂狗时间是怎样计算出来的,其实,看了程序的注释和框图大概就应该能明白了。40K分频256之后就只能在1秒计数156次,1 Z) \- G1 V0 ^  |; {
  D* I( @" b/ v" n) e2 G6 z3 k
而要计满1250(40000/32)就需要8秒。不明白的朋友请自己分析一下哦。8 K1 A* y& K2 u( w
( z3 w1 s1 r/ t0 B/ w/ l
二、WWDG的配置
! Z& |' ^( P5 W/ l, C
( _' B1 ^* R4 l+ r0 Q; U
20160517225657394.png
# f& T( w; p( v* b8 Q5 o
8 b$ m" M8 R2 C) I/ r
20160517225702957.png

$ G. D* u: `9 N6 Y, h6 z; S
+ o- ~: Z4 X6 ?! Y0 I

+ G* b. h) A* F; O该函数位于WWDG工程的main.c文件下面;4 z# J: ~$ |8 x% E( d

2 u: k& O; X4 T# L& z; ]' a提供的框图为见资料。
& b: B  _  Q: a: W: \
1 _9 n- C7 U0 n' d0 Y3 z' ?这里也主要讲一下最大喂狗时间57ms.分频之后只能在1秒计数1099次,要计满63个大概就需要57ms,这个值就是最大值。
# C4 v- b( V# T5 Y5 g) _9 G
' X2 ], i1 Z7 `5 M这个工程需要自己修改这个时间来测试,建议都自己亲手修改代码测试一下。
# ~) W. G0 u  f. Z+ }: y# @  \0 i, E# Z* H+ H; S
三、WWDG主函数; H3 g8 Q) i; J
  @/ q  I4 y$ e, }! B1 f* L
20160517225713301.png

/ ?, {+ O* V/ g1 g& b& x* w  s- r% h; o8 r! _
该函数位于WWDG工程的main.c文件下面;
9 w9 \+ f. J0 t& A
2 Q  P9 d) b" ^9 b$ ~3 M7 |9 o通过串口打印的信息就可以清楚的知道系统复位了没有。4 t: U+ [1 Z8 ~7 H8 _- }1 b

4 X7 l* v5 g  S6 l- G亲手修改来大于57ms的时间试试就知道。. M' G1 S3 Q1 D* w, ~2 P

% \4 R% m# K* J6 n四、今天的重点
6 I  m$ z2 b1 n; p+ S5 p( t0 m) \
A.WWDG计数器的范围为:0x40 --- 0x7F
1 U5 e+ e. p2 [# i( p1 T2 J& J7 i$ F! Z; E
B.当微控制器进入调试模式时(Cortex-M3核心停止),根据调试模块中的DBG_WWDG_STOP 配置位的状态, WWDG的计数器能够继续工作或停止。
, ]3 f8 e( _. D* r
& \& g$ z9 ?; \/ H. Z$ B' @; TC.没有两个寄存器,编程时请细看寄存器
8 L- b9 }3 y( A, Y8 G4 D) N; F
说明
, o$ y( V7 y4 T2 o; X0 \8 W
9 _$ C9 ?) `( }! g+ R今天提供的软件工程基于STM32F103大容量芯片,其实只要适当修改工程的部分配置,STM32F1的芯片都适用。+ ~& F8 S1 \/ z4 Q0 ?

6 t1 k' B+ P4 x6 U" s! z: D- M+ I+ ^& z. ~
收藏 评论0 发布时间:2021-11-30 21:26

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版