STM32独立看门狗(IWDG)

独立看门狗寄存器说明:

键值寄存器(TWDG_KR)中写入0xCCCC;

计数器开始从复位值0xFFF递减计数;

计数器到0x000,产生一个复位信号(IWDG_RESET);

键值寄存器(RWDG_KR)中写入0xAAAA;

IWDG_RLR中的值会被重新加载到计数器中,避免看门狗复位;

IWDG_PR 和 IWDG_RLR 寄存器具有写保护功能,修改两个寄存器之前先向 IWDG_KR寄存器中写入0x5555。

重装操作(0xAAAA)也会开启写保护功能。

预分频寄存器(IWDG_PR),用来设置看门狗时钟的分频系数。

独立看门狗启动步骤:

  1. 取消寄存器写保护(向 IWDG_KR 写入 0X5555):

    /IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

  2. 设置独立看门狗的预分频系数:

    void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); //设置欲分频值

  3. 设置看门狗的重装载值:

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

    看门狗溢出时间计算

    T o u t = ( ( 4 × 2 p r e r ) × r l r ) / 40 Tout=((4 \times 2^{prer})\times rlr) /40 Tout=((4×2prer)×rlr)/40

  4. 重载计数值(向IWDG_KR写入0xAAAA)

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

  5. 启动看门狗(向IWDG_KR写入0xCCCC)

    IWDG_Enable(); //使能IWDG

    __注:__看门狗一旦启用,便不能关闭!!!

窗口看门狗超时公式:

T w w d g = ( 4096 × 2 W D G T B × ( T [ 5 : 0 ] + 1 ) ) / F p c l k 1 ; Twwdg=(4096\times2^{WDGTB}\times(T[5:0]+1))/Fpclk1; Twwdg=(4096×2WDGTB×(T[5:0]+1))/Fpclk1

其中:

  • T w w d g : Twwdg: TwwdgWWDG超时时间(单位为ms)
  • F p c l k 1 : Fpclk1: Fpclk1APB1的时钟频率(单位为KHz)
  • W D G T B : WDGTB: WDGTBWWDG的预分频系数
  • T [ 5 : 0 ] : T[5:0]: T[5:0]窗口看门狗的计数器低6位

最小/最大超时时间表

WDGTB 最小超时值 最大超时值
0 0 0 113 μ s 113\mu s 113μs 7.28 m s 7.28ms 7.28ms
1 1 1 227 μ s 227\mu s 227μs 14.56 m s 14.56ms 14.56ms
2 2 2 455 μ s 455\mu s 455μs 29.12 m s 29.12ms 29.12ms
3 3 3 910 μ s 910\mu s 910μs 58.25 m s 58.25ms 58.25ms

窗口看门狗控制寄存器(WWDG_CR):

  1. WWDG_CR只有低八位有效
  2. T[6:0]用来存储看门狗的计数器值;
  3. 每个计数周期 ( 4096 × 2 W D G T B ) (4096\times2^{WDGTB}) (4096×2WDGTB)减一;
  4. 计数器值从0x40 变为 0x3F 的时候,将产生看门狗复位;

窗口看门狗配置寄存器(WWDG_CFR):

  1. EWI(位9)是提前唤醒中断;
  2. 此位值1,当计数器值达到40h,即产生中断;
  3. 此中断只能由硬件在复位后清除;
  4. 进入中断后立即重新写WWDG_SR;

窗口看门狗状态寄存器(WWDG_SR)

  1. 仅位0有效;
  2. 由硬件置一,软件清零;
  3. 计数器值达到0x40后该位也会被置1;

启用窗口看门狗步骤:

  1. 使能时钟:
    ACC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
  2. 设置窗口值:
    WWDG_SetWindowValue(uint8_t WindowValue);
  3. 设置分频数:
    WWDG_SetPewscaler(uint32_t WWDG_Prescaler);
  4. 开启WWDG中断并分组:
    WWDG_EnableIT(); //开启窗口看门狗
  5. 设置计数器初始值并使能看门狗:
    WWDG_Enable(uint8_t Counter);
  6. 编写中断服务函数:

你可能感兴趣的:(STM32独立看门狗(IWDG))