目录
独立看门狗 (IWDG) 由其专用低速时钟 (LSI) 驱动,因此即便在主时钟发生故障时仍然保持工作状态。 IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。
(1) 32位(只使用了12位)自由运行递减计数器;
(2) 时钟由独立 RC 振荡器(LSI)提供(可在待机和停止模式下运行);
(3) 当递减计数器值达到 0x000 时产生复位(如果看门狗已激活);
(1) 初始化
看门狗超时时间由递减计数器重装载值和时钟预分频器共同决定。例如,STM32F407,LSI=32K,64分频,递减计数器重装载值为500,则超时时间 = 1/32K *64 * 500 = 1s 。
(2) 喂狗
在main的while(1)处喂狗:
要在超出时间之内喂狗,否则会触发复位,一般都是在main的while(1)循环内喂狗。
(1) 某些执行时间特别长的程序,或者while(1)要多喂狗,避免超出时间导致复位;
(2) 在进入低功耗的时候,如果没有按时喂狗,一样会触发复位,所以要注意喂狗时间或者定时喂狗。
窗口看门狗 (WWDG) 时钟由 APB1 时钟经预分频后提供,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。 WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程序。通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。
(1) 当递减计数器的数值从 0x40 减到 0x3F 时(T6 位跳变到 0);
(2) 当喂狗的时候计数器的值大于 W[6:0]时,此数值在 WWDG_CFR 寄存器定义。
上述的两个条件详细解释是,当计数器的值减到 0x40 时还不喂狗的话,到下一个计数就会产生复位,这个值称为窗口的下限值,是固定的值,不能改变。这个跟独立看门狗类似,不同的是窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫窗口的上限,上限值 W[6:0]由用户设置。窗口看门狗计数器的上限值和下限值就是窗口的含义,喂狗也必须在窗口之内,否则就会复位。
A:WWDG 有一个来自 RCC 的 PCLK1 输入时钟,经过一个 4096 的分频器(4096 分频在设计时已经设定死了, 图中并没有给出来, 但我们可以通过查看寄存器 WWDG_CFR 的 WDGTB 位的描述知道);
B: 经过一个分频系数可选(1、2、4、8)的可编程预分频器提供时钟给一个 7 位递减计数器;
C:下限值:0x40 就是下限值,递减计数器达到这个值就会产生复位。T6 位就是 WWDG_CR 寄存器的位 6,即递减计数器 T[6:0]的最高位;
D:上限值:W[6:0] 是 WWDG_CFR 寄存器的低 7 位,用于与递减计数器 T[6:0]比较的窗口值,也就是我们说的上限值,由用户设置。
①当T[6:0]>W[6:0]是不允许刷新T[6:0]的值,即不允许喂狗,否则会产生复位。
②只有在 W[6:0] ③当 T[6:0]=0x3F,即 T6 位为 0 这一刻,也会产生复位。 ④计算窗口看门狗的超时公式: TWWDG: WWDG 超时时间(单位为 ms); TPCLK1: APB1 以 ms 为单位的时钟间隔(即单位为 1 /KHz); WDGTB:经过APB1 的分频系数; T[5:0]:窗口看门狗的计数器低 6 位(T6 位固定 1,范围 0x7F~0x40,对应值 0x3F~0x00); 根据以上公式,计算一下对应当重装值为 0x40 , 分频系数 WDGTB=3 时对应,假 设 TPCLK1= 42MHz , 下 一 个 计 数 将 发 生 复 位 , 到 达 下 个 复 位 的 时 间 是 :1/(42MHz)*4096*2^3*(0+1) =780.19us ;类似地,可以得到在 42MHz 时钟下不同分频值那么可以得到最小-最大超时时间表如表所示: 表格举例说明:当 WDGTB 等于0的时候,重装载值从0x40跳到0x3F,即1步,就会产生复位,这也是看门狗超时的最小时间;当0x7F跳到0x3F,即64步,就会产生复位,这也是看门狗超时的最大时间; (1) 初始化 设置计数器值为 0x7F,窗口寄存器为 0x5F,分频数为 8,然后可由前面的公式得到窗口上限时间 Twwdg=4096×8×(0x7F-0x5F)/42MHz=24.98ms,窗口下限时间 Twwdg=4096×8×(0x7F-0x3F) /42MHz=49.97ms,即喂狗的窗口区间为 24.98~49.97ms。 (2) 使用中断的方式喂狗 程序使用的是EWIF(提前唤醒中断标志)来喂狗,即当计数器值达到0x40时此位由硬件置1。它必须由软件通过写入0来清零。写入1不起作用。如果不使能中断,此位也会被置1。在窗口看门狗的中断服务函数,通过该函数来喂狗,喂狗要快,否则当窗口看门狗计数器值减到 0X3F 的时候,就会引起软复位了。在中断服务函数里面也要将状态寄存器的 EWIF 位清空。 十三、DAC 十四、IIS 十五、CAN5、编程控制