📄 iwdg.c
字号:
/**************************************************************
** 精英STM32开发板
** 版本:V1.0
** 功能: 1.该例子必须下载到FLASH中运行才能看到效果
2.运行程序时拔掉JTAG调试接口
3.main函数执行到while (1)这里,不喂狗,那么系统复位,如果系统不复位,LED不再变化。
可以看到LED停止闪烁一段时间又开始闪烁说明看门狗复位**************************************************************/
#include <stm32f10x_lib.h> // STM32F10x Library Definitions
#include "STM32_Init.h" // STM32 Initialization
unsigned int ledPosIwdg = 0; // led position for IWDG reset
unsigned int ledPosEnd = 3; // led position loop end
#define LED_OFF GPIOC->ODR|=0x00000007
#define LED_ON GPIOC->ODR&=(~0x00000007)
/*----------------------------------------------------------------------------
delay
insert a delay time.
软件延时,非精确延时
*----------------------------------------------------------------------------*/
void delay(unsigned int nCount)
{
for (; nCount != 0; nCount--)
;
}
/*----------------------------------------------------------------------------
MAIN function
*----------------------------------------------------------------------------*/
int main(void)
{
int i;
// STM32 setup
//STM32初始化
stm32_Init();
// IWDG Reset Flag set 检查看门狗复位标志
if (RCC->CSR & (1 << 29))
{
// Clear Reset Flags 清除看门狗复位标志
RCC->CSR |= (1 << 24);
//LED on LED点亮
// GPIOC->BRR = 1 << (ledPosIwdg + 8);
LED_ON;
}
else
{
//LED off LED熄灭
// GPIOC->BSRR = 1 << (ledPosIwdg + 8);
LED_OFF;
}
//循环10次重复喂狗
//10次之后不喂狗,看门狗将复位
for (i = 0; i < 10; i++)
{
delay(1000000); // 短延时
IWDG->KR = 0xAAAA; // reload the watchdog 重装载看门狗定时器
// GPIOC->BRR = 1 << (1 + 8);
LED_ON;
delay(1000000); //短延时
IWDG->KR = 0xAAAA; // reload the watchdog 重装载看门狗定时器
//LED off LED熄灭
// GPIOC->BSRR = 1 << (1 + 8);
LED_OFF;
}
//LED on LED点亮
// GPIOC->BRR = 1 << (ledPosEnd + 1 + 8);
LED_ON;
//不喂狗,等待看门狗复位
//执行到这里,不喂狗,那么系统复位,如果系统不复位,LED不再变化,
//可以看到LED停止闪烁一段时间又开始闪烁说明看门狗复位了
while (1)
{
// Loop forever
} // end while
} // end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -