STM32F407ZGT6看门狗学习笔记

/**********************独立看门狗***************************/

1、独立看门狗相当于12位计数器,它的计数值减至0就会产生复位。

2、特殊值作用:

1)0x5555:取消写保护,使用户可以操作PR、RLR寄存器;

2)0xaaaa:使重载寄存器RLR的值能传送至12位计数器中;

3)0xcccc:软件开启独立看门狗;

3、独立看门狗一旦开启会一直存在,必须在其复位的时候进行关闭。

4、独立看门狗使用LSI,也就是说没有了外部时钟它也不会受到影响。

5、LSI不是直接就供给12位递减计数器的,而是需要经过一个8位的预分频器PR之后。

6、因为独立看门狗有自己专门的时钟LSI(40KHz),所以编程时不需要配置使能时钟这一步。

7、因为计数器是12位的,所以装载初值时不能超过0xfff。

8、为什么分频系数范围是0~6?在IWDG_SetPrescaler()函数右键go to definition,然后在assert_param(IS_IWDG_PRESCALER(IWDG_Prescaler))的IS_IWDG_PRESCALER上继续右键go to definition,就到了下图一所示内容,从图中可以看到分频系数参数右边括号的立即数,范围就是从0x00~0x06,查过计算公式的都知道:Tout=([4*(2^prescaler)]/40)*reload,其中40代表40KHz,reload代表需要装载的初值,那前面[4*(2^prescaler)]这堆是什么鬼?为什么要这么写?既然分频器是8位的,那我们写成2^0、2^1、2^3...2^8不好吗?非得搞得这么麻烦?实际上,它的这种做法纯属为了计算方便,本质含义就是为了最终构成4的倍数方便40进行整除而得来的,其实公式也不需要死记,找到STM32F4xx中文参考手册关于独立看门狗这章的框图,如下图二,LSI的40KHz进来除以总的分频系数4*(2^prescaler)得到一个单位时钟(单位仍为频率),然后取倒数得到单位时间,再乘以装载的初值(也就是次数),于是就得到了整个的溢出周期。

9、编程步骤:

1)开启寄存器访问:IWDG_WriteAccessCmd();

2)设置分频系数和装载值:IWDG_SetPrescaler();  IWDG_SetReload();

3)重载计数器:IWDG_ReloadCounter();

4)启动独立看门狗:IWDG_Enable();

/**********************窗口看门狗***************************/

1、窗口看门狗是7位的递减计数器,最大值为0x7f。

2、递减下限值为0x40,也就是窗口下限值,是固定值不能被改变。

3、窗口上限值为用户自定义,比0x40大,和独立看门狗不一样的是,必须在窗口的两个限定值之间(0x40<x<user)进行喂狗才不会导致复位。

猜你喜欢

转载自www.cnblogs.com/weizhunie/p/12359822.html