1. 程式人生 > >stm32 看門狗(HAL庫)

stm32 看門狗(HAL庫)

(一)概述

stm32有兩個看門狗:硬體看門狗(LSI 40KHz)和視窗看門狗(APB1)。

(二)硬體看門狗實現程式碼

IWDG_HandleTypeDef hiwdg;

// 硬體看門狗初始化
static void MX_IWDG_Init(IWDG_HandleTypeDef *pHiwdg)
{
    pHiwdg->Instance = IWDG;
    pHiwdg->Init.Prescaler = IWDG_PRESCALER_4;
    pHiwdg->Init.Reload = 0xFFF; // Tout = ((4 * 2^prer) * rlr) / 40 = 409ms,看門狗溢位時間

    if (HAL_IWDG_Init(pHiwdg) != HAL_OK)
    {
        Error_Handler();
    }
}

int main(void)
{
     ........
     MX_IWDG_Init(&hiwdg);
     ........
     HAL_IWDG_Start(&hiwdg);

    while (1)
    {
        ........
        HAL_IWDG_Refresh(&hiwdg);
    }
    
}

(三)初始上電獲取硬體看門狗復位狀態

if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET)
{
    
}/* 硬體看門狗復位 */

__HAL_RCC_CLEAR_RESET_FLAGS();

(四)看門狗復位後IO狀態的保持方法

法一:硬體方式,鎖存器。

法二:軟體方式,當需要關注的IO狀態改變時,立馬存在Flash中,初始上電判斷復位型別是硬體看門狗,就進行Flash讀取和IO操作。該方式的缺點:由於stm32的Flash寫操作是頁寫,每次寫之前,都要先擦除,而且Flash的寫次數有限,故經常寫,Flash經常寫的區域有可能被寫壞。

法三:軟體方式,BKP+初始判斷處理。