关于窗口看门狗初始化的源码,有一个问题看不懂,求教大神!!

2019-07-20 14:27发布

这是F4探索者关于窗口看门狗初始化的源码:
 void WWDG_Init(u8 tr,u8 wr,u8 fprer) 
{    
RCC->APB1ENR|=1<<11;  //使能wwdg时钟 
WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.     
WWDG->CFR|=fprer<<7;    //PCLK1/4096再除2^fprer 
WWDG->CFR&=0XFF80;      
WWDG->CFR|=wr;      //设定窗口值      
WWDG->CR|=WWDG_CNT;  //设定计数器值 
WWDG->CR|=1<<7;   //开启看门狗      
MY_NVIC_Init(2,3,WWDG_IRQn,2);//抢占2,子优先级3,组2     
WWDG->SR=0X00;  //清除提前唤醒中断标志位 
WWDG->CFR|=1<<9;        //使能提前唤醒中断 


其中这一句我觉得很有趣:

WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT. 

亲们,WWDG_CNT就是窗口看门狗的递减计数器对吧?tr是我们要装定的初值。那么我的问题来了:

如果是装定初值
,我们完全可以对WWDG_CNT直接赋值:WWDG_CNT=tr;为什么要位相与呢?意义何在?

假如是为了保险,我们可以先对WWDG_CNT清零,再赋值。而源码里的情况则是:如果WWDG_CNT初值本来就是0,那么位相与还是我们想要的装定值tr,没问题…………但这个相与好像完全没必要。


我有点好奇,这一次位与,里面有什么奥秘呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。