STM32F030R8Tx HAL庫實現IWDG獨立看門狗

  • 首先準備一個工程並加入RTT打印,RTT打印請參考以下鏈接

https://blog.csdn.net/mygod2008ok/article/details/106746633

  • 在工程中加入stm32f0xx_hal_iwdg.c文件

  • 在stm32f0xx_hal_conf.h頭文件打開HAL_IWDG_MODULE_ENABLED宏

  • 繼續接着加入APP_ERROR_CHECK宏,並在此文件的頭文件加入sdk_config.h頭文件

  • 在main.c中實現IWDG初時化函數

static IWDG_HandleTypeDef IwdgHandle;

/**
*  @brief watch dog initialization
*/
void BSP_wdt_init(uint16_t ms)//輸入多少ms喂一次狗
{
  IwdgHandle.Instance = IWDG;
  IwdgHandle.Init.Prescaler = IWDG_PRESCALER_256;//256分頻的餵狗時間在6.4-26214.4ms之間
  IwdgHandle.Init.Reload = (5 * ms) / (32); /* 40/256*ms */
  IwdgHandle.Init.Window = IWDG_WINDOW_DISABLE; 
  HAL_StatusTypeDef err_code = HAL_IWDG_Init(&IwdgHandle);
  APP_ERROR_CHECK(err_code);

}

獨立看門狗時鐘源是40KHz,如果採用256分頻,那麼1個計數的時間約爲6.4毫秒,計算公式如下:

    1個計數看門狗溢出時間(單位毫秒) = 1000/(40000Hz/256分頻係數)

則: 

  1個計數 看門狗溢出時間(單位毫秒) = 1000*256/40000

化簡爲:

     1個計數看門狗溢出時間(單位毫秒) = 32/5

那麼5000毫秒的裝載值約爲781,計算公式如下:

   裝載值 = 5000毫秒 / ( 32/5)

則:

裝載值 = 5*5000  /  32 

 

 

  • 在main中加入stm_log.h頭文件,初時化打印及獨立看門狗

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
  RTT_INIT();
  HAL_Init();
  SystemClock_Config();
  NRF_LOG_INFO("program is reset!"); 
  BSP_wdt_init(5000);
   
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
		
    HAL_Delay(1000);
    NRF_LOG_INFO("main loop");
	
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
  • 由於沒有餵狗,每5000毫秒會產生看門狗復位,運行結果如下

  • 在main中實現餵狗函數,並在主循環中調用

/**
*  @brief watch dog feed
*/
void BSP_wdt_feed(void)
{
    /* Refresh IWDG: reload counter */
	  HAL_StatusTypeDef err_code = HAL_IWDG_Refresh(&IwdgHandle);
    APP_ERROR_CHECK(err_code);
}

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
	RTT_INIT();
  HAL_Init();
  SystemClock_Config();
  NRF_LOG_INFO("program is reset!"); 
  BSP_wdt_init(5000);
   
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    BSP_wdt_feed();
    HAL_Delay(1000);
    NRF_LOG_INFO("main loop");
	
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

由於每秒進行餵狗,則不會產生看門狗復位,運行結果如下:

  • 例程下載鏈接如下

https://download.csdn.net/download/mygod2008ok/12522406

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章