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

你可能感兴趣的:(stm32)