1.硬件
- STM32单片机最小系统
2.软件
- iwdg驱动文件添加
- main.c程序
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "uart1.h"
#include "iwdg.h"
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
led_init(); /* 初始化LED灯 */
uart1_init(115200);
iwdg_init(IWDG_PRESCALER_32, 1250);
printf("hello world!\r\n");
printf("狗儿肚子饿了,再不喂它的话就咬人了!\r\n");
if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET)
{
printf("独立看门狗复位!\r\n");
__HAL_RCC_CLEAR_RESET_FLAGS();
}
else
printf("外部复位!\r\n");
while(1)
{
delay_ms(1500);
iwdg_feed();
printf("狗儿已经喂饱了,不会咬人了!\r\n");
// led1_on();
// led2_off();
// delay_ms(500);
// led1_off();
// led2_on();
// delay_ms(500);
}
}
- iwdg.c程序
#include "iwdg.h"
IWDG_HandleTypeDef iwdg_handle = {0};
void iwdg_init(uint8_t psc, uint16_t rlr)
{
iwdg_handle.Instance = IWDG;
iwdg_handle.Init.Prescaler = psc;
iwdg_handle.Init.Reload = rlr;
HAL_IWDG_Init(&iwdg_handle);
}
void iwdg_feed(void)//喂狗函数
{
HAL_IWDG_Refresh(&iwdg_handle);
}
- iwdg.h程序
#ifndef __IWDG_H__
#define __IWDG_H__
#include "sys.h"
void iwdg_init(uint8_t psc, uint16_t rlr);
void iwdg_feed(void);
#endif
3.实物效果
- 硬件模块接线
通过USB转TTL模块将STM32单片机与电脑连接,打开串口软件,打开对应串口。
ST-Link下载方式
配置 IWDG 溢出时间为 1 秒左右,并验证未及时喂狗时系统将被复位。