参考正点原子的例程,稍作改动,实现功能为:初始点亮红灯,按下key_up之后,点亮绿灯,同时复位
实际使用的过程中key_up可以更换为特定的判断条件,也不需要实际的亮灯操作
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "iwdg.h"
int main(void)
{
Cache_Enable();
HAL_Init();
Stm32_Clock_Init(160,5,2,4);
delay_init(400);
uart_init(115200);
LED_Init();
KEY_Init();
delay_ms(2000); //延时2s,为了直观的看到复位的过程
LED0(0);
while(1)
{
if(KEY_Scan(0)==WKUP_PRES) //如果key_up按下,实际可以更换为其他条件
{
IWDG_Init(IWDG_PRESCALER_64,500); //狗咬复位
LED1(0);
}
delay_ms(10);
}
}
独立看门狗的初始化
#include "iwdg.h"
#include "sys.h"
IWDG_HandleTypeDef IWDG_Handler; //¶ÀÁ¢¿´ÃŹ·¾ä±ú
//³õʼ»¯¶ÀÁ¢¿´ÃŹ·
//prer:·ÖƵÊý:0~7(Ö»ÓеÍ3λÓÐЧ!)
//rlr:×Ô¶¯ÖØ×°ÔØÖµ,0~0XFFF.
//·ÖƵÒò×Ó=4*2^prer.µ«×î´óÖµÖ»ÄÜÊÇ256!
//rlr:ÖØ×°ÔØ¼Ä´æÆ÷Öµ:µÍ11λÓÐЧ.
//ʱ¼ä¼ÆËã(´ó¸Å):Tout=((4*2^prer)*rlr)/32 (ms).
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_Handler.Instance=IWDG1;
IWDG_Handler.Init.Prescaler=prer; //ÉèÖÃIWDG·ÖƵϵÊý
IWDG_Handler.Init.Reload=rlr; //ÖØ×°ÔØ
IWDG_Handler.Init.Window=IWDG_WINDOW_DISABLE;//¹Ø±Õ´°¿Ú¹¦ÄÜ
HAL_IWDG_Init(&IWDG_Handler);
}