STM32F103ZET6の独立したウォッチドッグ実験
記事のディレクトリ
序文
STM32の学習は3つのバージョンに分けることができます。
1.登録バージョン
2.ライブラリ関数バージョン
3.HALライブラリバージョン
個人的な理由により、STM32を学習するためにライブラリ関数バージョンを選択します。
ヒント:ソフトウェアのインストールなどの問題は説明されません!!!
1つは、ウォッチドッグ関連の概要です
1.コンセプト
2.原則
2.関連レジスタ
1.キー値レジスタ(IWDG_KR)
2.プリスケーラレジスタ(IWDG_PR)
3.レジスタをリロードします(IWDG_RLR)
4.ステータスレジスタ(IWDG_SR)
3つの操作手順
1.独立したウォッチドッグタイムアウトの計算
2.操作手順
第四に、プログラムのソースコード
1.iwdg.h
コードは次のように表示されます。
#ifndef __IWDG_H
#define __IWDG_H
#include "sys.h"
void IWDG_Init(u8 prer,u16 rlr);
#endif
2.iwdg.c
コードは次のように表示されます。
#include "iwdg.h"
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//取消寄存器写保护
IWDG_SetPrescaler(prer);//设置独立看门狗的预分频系数
IWDG_SetReload(rlr);//设置看门狗重装载值
IWDG_Enable();//使能看门狗
}
3.main.c
コードは次のように表示されます。
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "beep.h"
#include "key.h"
#include "usart.h"
#include "exti.h"
#include "iwdg.h"
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init();
LED_Init();
Beep_Init();
KEY_Init();
uart_init(115200);
EXTIX_Init();
IWDG_Init(4,625);//1s 1000ms=4*2^4/40*rlr
delay_ms(200);
LED1=0;
while(1)
{
if(KEY_SCAN(1)==KEY0_PRES)
{
IWDG_ReloadCounter();
}
}
}
5.実験結果
操作がない場合は200msごとにLED0が点灯し、常にリセット操作が行われます
。KEY0ボタンを1回押すと「犬に餌をやる」の1回に相当し、この時点ではリセット操作は行われません。
KEY0ボタンを押し続けるとLED0が点灯せず、「犬に餌をやる」状態でリセット操作ができませんでした。
総括する
1秒以内に0XAAAAをIWDG_KRに1回書き込む限り、ウォッチドッグはリセットされません(もちろん、複数の書き込みも可能です)。