• 分频计数器STM32F10x 学习笔记7(独立看门狗IWDG 模块)


    最近研究分频计数器,稍微总结一下,以后继续补充:

        按照STM32参考手册的说法:“独立看门狗(IWDG)由专用的低速时钟(LSI)动驱,即使主时钟生发故障它也仍然效有。IWDG最适合应用于那些须要看门狗作为一个在主程序以外,够能全完独立作工,并且对间时精度要求较低的场所。WWDG最适合那些要求看门狗在准确计时口窗起作用的应用程序。”

        简略的说,STM32 中的IWDG 其核心就是一个12bits的向下递加的数计器,当数计器数计到零时就会触发统系复位。因此,要在每次数计到零之前将其复位到一个初始值。这个初始值就在重装载寄存器(IWDG_RLR)中寄存,其默认值为0xFFF,我们也可以将其为改其他值。

        数计器的时钟由LSI时钟经过分频后供给,预分频因子由预分频寄存器(IWDG_PR)的值来定确。详细的说IWDG_PR 寄存器只有最低的3位是效有的,其他高位远永都为0,这最低的3位就决议了预分频因子,这3位的值与预分频因子的系关如下。

        

    000: 预分频因子=4 
    100: 预分频因子=64 
    001: 预分频因子=8 
    101: 预分频因子=128
    010: 预分频因子=16 
    110: 预分频因子=256 
    011: 预分频因子=32 
    111: 预分频因子=256

        除了下面分析的两个寄存器,IWDG还有另外两个寄存器,合起来共四个寄存器,分别是:

        键寄存器(IWDG_KR)

        预分频寄存器(IWDG_PR)

        重装载寄存器(IWDG_RLR)

        状态寄存器(IWDG_SR)

        所谓键寄存器(IWDG_KR),可以以为就是个控制寄存器,开启看门狗,喂狗须要作操键寄存器,修改其他寄存器值也须要先作操键寄存器(IWDG_KR)

        

    开启看门狗

        向键寄存器(IWDG_KR)写入0xCCCC,启动看门狗作工。IWDG一旦启动了就不会止停,除非掐断单片机的供电。也就是说看门狗不受休眠或RESET的影响。

    IWDG->KR = 0xCCCC;

        STM32F10x_StdPeriph_Driver 供给了如下数函。

        每日一道理
    风,那么轻柔,带动着小树、小草一起翩翩起舞,当一阵清风飘来,如同母亲的手轻轻抚摸自己的脸庞,我喜欢那种感觉,带有丝丝凉意,让人心旷神怡。享受生活,不一定要有山珍海味、菱罗绸缎为伴,大自然便是上帝所赐予人类最为珍贵的。
    void IWDG_Enable(void);

        

    喂狗

        向键寄存器(IWDG_KR)写入0xAAAA,这时数计器的值会复位为重装载寄存器(IWDG_RLR)的值。

        否则,当数计器为0时,看门狗会生产复位。

    IWDG->KR = 0xAAAA;

        STM32F10x_StdPeriph_Driver 供给了如下数函。

    void IWDG_ReloadCounter(void);

        

    修改预分频因子

        向键寄存器(IWDG_KR)写入0x5555,向预分频寄存器(IWDG_PR)写入新值。

        注意这两步之间不能有其他的对IWDG的作操。

    IWDG->KR = 0x5555;
    IWDG->PR = value;

        利用STM32F10x_StdPeriph_Driver 则须要如下调用两个数函。

    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    IWDG_SetPrescaler(value);

        

    修改重装载寄存器的值

        向键寄存器(IWDG_KR)写入0x5555,向重装载寄存器(IWDG_RLR)写入新值。

        注意这两步之间不能有其他的对IWDG的作操。

    IWDG->KR = 0x5555;
    IWDG->RLR = value;

        利用STM32F10x_StdPeriph_Driver 则须要如下调用两个数函。

    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
    IWDG_SetReload(value);

        预分频寄存器、重装载寄存器与看门狗超时间时的系关如下表所示。

        分频和计数器

        下面的分析都没有涉及到状态寄存器(IWDG_SR)。这个寄存器不太用常,须要解了的可以参阅STM32参考手册。

        另外,当用调试器调试码代时,我们望希在生产断点时,数计器够能止停数计。这可以通过设置DBGMCU_CR的第8位(DBG_IWDG_STOP位)来现实。

        0:看门狗数计器仍然畸形作工;

        1:看门狗数计器止停作工。

        作操码代如下:

    DBGMCU->CR |= 0x100;

        STM32F10x_StdPeriph_Driver 中也供给了应相的作操数函:

    DBGMCU_Config(DBGMCU_IWDG_STOP, ENABLE);

    文章结束给大家分享下程序员的一些笑话语录: Bphone之你们聊,我先走了!移动说:我在phone前加o,我叫o缝;苹果说:我在phone前i,我是i缝;微软说:我在phone前加w,我叫w缝;三星说:你们聊,我先走了!
    将来王建宙写回忆录的时候,一定要有一句“常小兵为中国移动的发展做出了不可磨灭的贡献”。

  • 相关阅读:
    k8s中pod的定义
    k8s上pod一次pending解决过程
    docker创建一个容器
    什么是进程
    在线程中显示一个窗口(多个UI线程)
    ComboBox过滤
    TreeView虚拟化跳转
    使用MVVM的常见误区(1)在ViewModel中和用户交互
    <转载>玩转git, rebase
    MySQL8.0 connector JAR包的下载位置及JDBC配置
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3061696.html
Copyright © 2020-2023  润新知