你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32l053 WDT 驱动及使用

[复制链接]
stary666 发布时间:2015-4-8 13:47
void
HAL_IWDG_Init(IWDG_HandleTypeDef * pst_Iwdg)
{
    /* Change IWDG peripheral state */
    pst_Iwdg->State = HAL_IWDG_STATE_BUSY;

    /* Enable write access to IWDG_PR, IWDG_RLR and IWDG_WINR registers */
    /* by writing 0x5555 in KR */
    IWDG->KR |= KR_KEY_EWA;

    /* Write to IWDG registers the IWDG_Prescaler & IWDG_Reload values to work with */
    MODIFY_REG(IWDG->PR, (uint32_t)IWDG_PR_PR, pst_Iwdg->Init.Prescaler);
    MODIFY_REG(IWDG->RLR, (uint32_t)IWDG_RLR_RL, pst_Iwdg->Init.Reload);

    /* check if window option is enabled */
    if (((pst_Iwdg->Init.Window) != IWDG_WINDOW_DISABLE) || ((IWDG->WINR) != IWDG_WINDOW_DISABLE))
    {
        /* Wait for register to be updated */
        while ((IWDG->SR & (IWDG_FLAG_PVU | IWDG_FLAG_RVU | IWDG_FLAG_WVU)) != 0)
        {
        }

        /* Write to IWDG WINR the IWDG_Window value to compare with */
        MODIFY_REG(IWDG->WINR, (uint32_t)IWDG_WINR_WIN, pst_Iwdg->Init.Window);
    }

    /* Change IWDG peripheral state */
    pst_Iwdg->State = HAL_IWDG_STATE_READY;
}

void
HAL_IWDG_Start(IWDG_HandleTypeDef * pst_Iwdg)
{
    /* Change IWDG peripheral state */
    pst_Iwdg->State = HAL_IWDG_STATE_BUSY;

    /* Reload IWDG counter with value defined in the RLR register */
    if ((pst_Iwdg->Init.Window) == IWDG_WINDOW_DISABLE)
    {
        IWDG->KR |= KR_KEY_RELOAD;
    }

    /* Enable the IWDG peripheral */
    IWDG->KR |= KR_KEY_ENABLE;

    /* Wait until PVU, RVU, WVU flag are RESET */
    while (0 != ((uint32_t)(IWDG->SR & (IWDG_FLAG_PVU | IWDG_FLAG_RVU | IWDG_FLAG_WVU))))
    {
    }

    /* Change IWDG peripheral state */
    pst_Iwdg->State = HAL_IWDG_STATE_READY;
}

void
HAL_IWDG_Refresh(IWDG_HandleTypeDef * pst_Iwdg)
{
    /* Change IWDG peripheral state */
    pst_Iwdg->State = HAL_IWDG_STATE_BUSY;

    /* Wait until RVU flag is RESET */
    while ((IWDG->SR & (IWDG_FLAG_RVU)) == IWDG_FLAG_RVU)
    {
    }

    /* Reload IWDG counter with value defined in the reload register */
    IWDG->KR       |= KR_KEY_RELOAD;

    /* Change IWDG peripheral state */
    pst_Iwdg->State = HAL_IWDG_STATE_READY;
}

HAL_IWDG_StateTypeDef
HAL_IWDG_GetState(const IWDG_HandleTypeDef * pst_Iwdg)
{
    return pst_Iwdg->State;
}

void
IWDG_Delay(void)
{
    uint32_t u32_stic;

    u32_stic = GET_SYSTEM_TICK_VALUE();

    /*@ignore@*/
    do
    {
    } while (GET_SYSTEM_TICK_ECLIPSE(u32_stic) < (uint32_t)(IWDG_SYSTICK));

    /*@end@*/
}

void
Iwdg_Refresh(void)
{
    HAL_IWDG_Refresh(&IwdgHandle);
}

void
Iwdg_main(void)
{
    /*##-1- Check if the system has resumed from IWDG reset ####################*/
    if ((uint32_t)__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != 0)
    {
        /* Clear reset flags */
        RCC->CSR |= RCC_CSR_RMVF;
    }

    /*##-2- Configure & Initialize the IWDG peripheral ######################################*/
    /* Set counter reload value to obtain 762ms IWDG TimeOut.
     Counter Reload Value = LsiFreq*Timeout(s)/prescaler
                          = 40000*700ms/(16*1000)
                          = 1750 (approx)
    */
    IwdgHandle.Init.Prescaler = IWDG_PRESCALER_32;
    IwdgHandle.Init.Reload    = (uint32_t)IWDG_RELOAD_NUMBER(IWDG_RELOAD, IWDG_PRESCALER_32); /* IWDG_RELOAD,16prescaler(40khz) */
    IwdgHandle.Init.Window    = 0xfff;                                                        /* Window =  0xfff*/

    /* when window option is enabled, we enable the IWDG immediately */
    /* by writing 0xCCCC to the KEY register */

    /*##-3- Start the IWDG #####################################################*/
    HAL_IWDG_Start(&IwdgHandle);
    HAL_IWDG_Init(&IwdgHandle);
}
收藏 评论1 发布时间:2015-4-8 13:47

举报

1个回答
肖久 回答时间:2015-4-8 20:42:30
帮顶一下 让更多的人 过来帮你

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版