zoukankan      html  css  js  c++  java
  • 分频计数器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缝;三星说:你们聊,我先走了!
    将来王建宙写回忆录的时候,一定要有一句“常小兵为中国移动的发展做出了不可磨灭的贡献”。

  • 相关阅读:
    django页面分类和继承
    django前端从数据库获取请求参数
    pycharm配置django工程
    django 应用各个py文件代码
    CF. 1428G2. Lucky Numbers(背包DP 二进制优化 贪心)
    HDU. 6566. The Hanged Man(树形背包DP DFS序 重链剖分)
    小米邀请赛 决赛. B. Rikka with Maximum Segment Sum(分治 决策单调性)
    区间树 学习笔记
    CF GYM. 102861M. Machine Gun(主席树)
    2016-2017 ACM-ICPC East Central North America Regional Contest (ECNA 2016) (B, D, G, H)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3061696.html
Copyright © 2011-2022 走看看