• stm32f4xx 的IWDG使用的一般步骤



    需要注意的是:

      STM32系列的MCU内部的RC频率会在30kHz到60kHz之间变化。此外,即使RC振荡器的频率是精确的,确切的时序仍然依赖于APB接口时钟与RC振荡器时钟之间的相位差,因此总会有一个完整的RC周期是不确定的。stm32f10x,通过对LSI进行校准可获得相对精确的看门狗超时时间。但是在stm32f4 中并没有对它校准的说明。

    通常我们在估算的时候,以 40Khz 的频率来计算      

    1)取消寄存器写保护(向 IWDG_KR 写入 0X5555)
      通过这步,我们取消 IWDG_PR 和 IWDG_RLR 的写保护,使后面可以操作这两个寄存器,设置 IWDG_PR 和 IWDG_RLR 的值。这在库函数中的实现函数是:

    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

    这个函数非常简单,顾名思义就是开启/取消写保护,也就是使能/失能写权限。

    2)设置独立看门狗的预分频系数和重装载值

    设置看门狗的分频系数的函数是:

    1 void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置 IWDG 预分频值

    设置看门狗的重装载值的函数是:

    1 void IWDG_SetReload(uint16_t Reload); //设置 IWDG 重装载值

    设置好看门狗的分频系数 prer 和重装载值就可以知道看门狗的喂狗时间 (也就是看门狗溢出时间) ,该时间的计算方式为:

          Tout=((4×2^prer) ×rlr) /40
       

       其中 Tout 为看门狗溢出时间(单位为 ms) ;prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7;rlr 为看门狗的重装载值(IWDG_RLR 的值) ;比如我们设定 prer 值为 4, rlr 值为 625,那么就可以得到 Tout=64×625/40=1000ms,这样,看门狗的溢出时间就是 1s,只要你在一秒钟之内,有一次写入 0XAAAA 到 IWDG_KR,就不会导致看门狗复位(当然写入多次也是可以的)。这里需要提醒大家的是,看门狗的时钟不是准确的 40Khz,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。     

    3)重载计数值喂狗(向 IWDG_KR 写入 0XAAAA)
    库函数里面重载计数值的函数是:

    1 IWDG_ReloadCounter(); //按照 IWDG 重装载寄存器的值重装载 IWDG 计数器

    通过这句,将使 STM32 重新加载 IWDG_RLR 的值到看门狗计数器里面。 即实现独立看门狗的喂狗操作。

    4) 启动看门狗(向 IWDG_KR 写入 0XCCCC)
    库函数里面启动独立看门狗的函数是:

    1 IWDG_Enable(); //使能 IWDG

    通过这句,来启动 STM32 的看门狗。注意 IWDG 在一旦启用,就不能再被关闭!想要关闭,只能重启,并且重启之后不能打开 IWDG,否则问题依旧,所以在这里提醒大家,如果不用 IWDG 的话,就不要去打开它,免得麻烦。

  • 相关阅读:
    CodeForces 219D Choosing Capital for Treeland (树形DP)
    POJ 3162 Walking Race (树的直径,单调队列)
    POJ 2152 Fire (树形DP,经典)
    POJ 1741 Tree (树的分治,树的重心)
    POJ 1655 Balancing Act (树的重心,常规)
    HDU 2196 Computer (树形DP)
    HDU 1520 Anniversary party (树形DP,入门)
    寒门子弟
    JQuery选择器(转)
    (四)Web应用开发---系统架构图
  • 原文地址:https://www.cnblogs.com/kalo1111/p/3337207.html
Copyright © 2020-2023  润新知