基于野火stm32开发板实现独立看门狗
摘要:本文展示了一个基于STM32F4的独立看门狗(IWDG)应用实例。工程包含main.c、bsp_iwdg.c和bsp_iwdg.h三个文件,实现了以下功能:1)通过LED指示灯区分是否为看门狗复位;2)配置64分频和256重载值,设置1秒超时溢出;3)按键检测功能,当按键按下时执行喂狗操作并点亮绿灯。完整代码展示了IWDG初始化配置、喂狗操作以及复位状态检测的实现方法,适用于需要监控系统运行
1.工程目录如下:
2.创建main.c,bsp_iwdg.c,bsp_iwdg这个三个文件
main.c代码如下:
#include "stm32f4xx.h"
#include "./led/bsp_led.h"
#include "./key/bsp_key.h"
#include "./iwdg/bsp_iwdg.h"
static void Delay(__IO uint32_t nCount);
/**
* @brief 主函数
* @param 无
* @retval 无
*/
int main(void)
{
/* LED 端口初始化 */
LED_GPIO_Config();
Delay(0X8FFFFF);
//检查是否为独立看门狗复位
if(RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)
{
//亮红灯
LED_RED;
//清楚标志位
RCC_ClearFlag();
}
else
{
LED_BLUE;
}
/*初始化按键*/
Key_GPIO_Config();
//1S超时溢出
IWDG_Config(IWDG_Prescaler_64,256);
/* 轮询按键状态,若按键按下则反转LED */
while(1)
{
//添加需要被检控的代码
if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON )
{
IWDG_Feed();
LED_GREEN;
}
}
}
static void Delay(__IO uint32_t nCount)
{
for (; nCount != 0; nCount--);
}
/*********************************************END OF FILE**********************/
bsp_iwdg.c代码如下:
#include "./iwdg/bsp_iwdg.h"
void IWDG_Config(uint8_t prv,uint16_t rlv)
{
//使能预分频寄存器和重装载寄存器
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
//设置预分频寄存器的值
IWDG_SetPrescaler(prv);
//设置重装载寄存器的值
IWDG_SetReload(rlv);
//把重装载器放到计数器中
IWDG_ReloadCounter();
//使能IWDG
IWDG_Enable();
}
void IWDG_Feed(void)
{
//把重装载寄存器放到计数器中,喂狗,防止IWDG复位
//当计数器的值减到0时会产生系统复位
IWDG_ReloadCounter();
}
bsp_iwdg.h代码如下:
#ifndef __IWDG_H
#define __IWDG_H
#include "stm32f4xx.h"
void IWDG_Config(uint8_t prv,uint16_t rlv);
void IWDG_Feed(void);
#endif /* __IWDG_H */
3.运行结果如下:
更多推荐
所有评论(0)