窗口看门狗在配置过程中感觉会覆盖一些bit位

2019-07-21 03:24发布

//保存WWDG计数器的设置值,默认为最大. 
u8 WWDG_CNT=0x7f; 
//初始化窗口看门狗
//tr   :T[6:0],计数器值 
//wr   :W[6:0],窗口值 
//fprer:分频系数(WDGTB),仅最低2位有效 
//Fwwdg=PCLK1/(4096*2^fprer). 一般PCLK1=42Mhz
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计数器的值 
void WWDG_Set_Counter(u8 cnt) 

    WWDG->CR =(cnt&0x7F);//重设置7位计数器 


对于初始化函数WWDG_Init(),WWDG->CR复位值为0x0000007f,执行该语句WWDG->CR|=WWDG_CNT;无论WWDG_CNT为多少,寄存器WWDG->CR是不变的。我的理解对吗?
对于函数WWDG_Set_Counter(),执行语句WWDG->CR =(cnt&0x7F);后会不会清除bit7,关闭看门狗呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。