iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
Arm Platforms

基於ARM-M0架構MCU之落摔檢測韌體開發系列 第 25

[DAY 25] _STM32 看門狗簡介_獨立看門狗(1)

剩下這幾天我都會看一些我比較不懂的東西,把我自己吸收進來的東西整理上來,我的重點都在20天前面,有興趣的話可以看前面20天的。
STM32有兩個看門狗,IWDG(獨立看門狗)、WWDG(視窗看門狗)
這兩個看門狗的說明在Reference manual有獨立2章出來
1.IWDG(Independent watchdog)
https://ithelp.ithome.com.tw/upload/images/20211008/20141979AziQOtI0oL.png
上圖是Reference manual裡的IWDG章的截圖,IWDG的簡介主要是再說,不管是獨立或著是視窗看門狗都可檢測軟體的錯誤導致故障,當計數值達到特定值產生系統從置。獨立看門狗由低速時鐘(LSI)驅動。
再來主要的特性:

  • 遞減的計數器
  • 時鐘由獨立RC震盪提供,可在待機和停止模式下運行
  • 當技術到0x000時產生重置

IWDG功能框圖簡介

https://ithelp.ithome.com.tw/upload/images/20211008/20141979pRtjKnMZnV.png

1.獨立看門狗時鐘

獨立看門狗的時鐘由獨立的RC振盪器LSI提供,即使主時鐘發生故障它仍然有效。LSI 的頻率一般在30~60KHZ 之間,根據溫度和工作場合會有一定的漂移,我們一般取40KHZ,所以獨立看門狗的定時時間並一定非常精確,只適用於對時間精度要求比較低的場合。

2.計數器時鐘

遞減計數器的時鐘由LSI 經過一個8 位的預分頻器得到,我們可以操作預分頻器寄存器IWDG_PR 來設置分頻因數,分頻因數可以是:[4,8,16,32,64,128,256,256],計數器時鐘CK_CNT= 40/4*2^PRV,一個計數器時鐘計數器就減1。

3.12位計數器

獨立看門狗的計數器是一個12 位的遞減計數器,最大值為0XFFF,當計數器減到0時會產生一個重定信號:IWDG_RESET,讓程式重新開機運行,如果在計數器減到0 之前刷新了計數器的值的話,就不會產生重定信號,重新刷新計數器值的這個動作我們俗稱喂狗。

4.重新加載暫存器

重新加載暫存器是一個12 位的暫存器,裡面裝著要刷新到計數器的值,這個值的大小決定著獨立看門狗的溢出時間。超時時間Tout = (4*2^prv) / 40 * rlv (s) ,prv 是預分頻器寄存器的值,rlv 是重裝載寄存器的值。

5.Key register

IWDG_KR 可以說是獨立看門狗的一個控制寄存器,主要有三種控制方式,往這個寄存器寫入下面三個不同的值有不同的效果。
0xAAAA:把RLR 的值重新加載到CNT
0x5555:PR和RLR這兩個暫存器可寫
0xCCCC:啟動獨立看門狗
通過寫往Key 暫存器寫0XCCC 來啟動看門狗是屬於軟體啟動的方式,一旦獨立看門狗啟動,它就關不掉,只有復位才能關掉。

6.狀態暫存器

狀態寄存器SR 只有位元0:PVU 和位1:RVU 有效,這兩位元只能由硬體操作,軟體操作不了。RVU:看門狗計數器重裝載值更新,硬體置1 表示重裝載值的更新正在進行中,更新完畢之後由硬體清0。PVU:看門狗預分頻值更新,硬體置‘1‘指示預分頻值的更新正在進行中,當更新完成後,由硬體清0。所以只有當RVU/PVU等於0的時候才可以重新加載暫存器/預分頻暫存器。

今天先介紹到這邊,明天來看看如何使用這獨立看門狗。


上一篇
[DAY 24] _DMA簡介
下一篇
[DAY 26] _STM32 看門狗簡介_獨立看門狗(2)
系列文
基於ARM-M0架構MCU之落摔檢測韌體開發32

尚未有邦友留言

立即登入留言