⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iwdg.c

📁 stm32初级例程
💻 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 + -