武汉网站推广/搜索引擎优化seo什么意思
-
首先准备一个工程并加入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