STM32研究ノート(10)

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回書き込む限り、ウォッチドッグはリセットされません(もちろん、複数の書き込みも可能です)。

おすすめ

転載: blog.csdn.net/weixin_44935259/article/details/112735295