这是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,没问题…………但这个相与好像完全没必要。
我有点好奇,这一次位与,里面有什么奥秘呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>