在学习到窗口看门狗的时候,有些疑惑,但经过自己查找资料,思考,解决了自己的疑惑,分享出来,希望能够帮助大家!!!
u8 WWDG_CNT=0x7f;
WWDG_CNT=tr&WWDG_CNT;
WWDG_Enable(WWDG_CNT);
第一句话就是一个全局变量,并且赋初值为:0111 1111==0x7f
第二句话:tr是要往计数器里面写的值,但是这里是按位与0111 1111,意思是无论tr是什么值,哪怕最高位为1,经过与0x7f
按位与后WWDG_CNT的最高位为0,这是必须的,因为递减计数器的值只有后7位有效,而最高位为窗口看门狗激活位。同时
0x7f也是该递减计数器的最大值
第三句话WWDG_Enable(WWDG_CNT),不仅使能窗口看门狗,而且还给递减计数器赋初值,一举两得。但是这里WWDG_CNT
的值为0111 1111,最高位为0,怎么使能窗口看门狗呢?查看这个函数可以看到这条语句:WWDG->CR = WWDG_CR_WDGA | Counter;
WWDG_CNT即是我们传入函数的值,即Counter==WWDG_CNT,再往下查看,可以看到WWDG_CR_WDGA 的值为#define WWDG_CR_WDGA ((uint8_t)0x80)
WWDG_CR_WDGA | Counter;这句话等价于 1000 0000 |0111 1111==1111 1111,所以使能窗口看门狗。
|