当前位置:首页 > 单片机 > 单片机
[导读]AWU的应用(用库函数完成的)//切记要开启中断 且在中断函数中 AWU_GetFlagStatus(); 来清除中断void AWU_SET(void){ CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU, ENABLE); AWU_Init(AWU_TIMEBASE_12S);}#if

AWU的应用(用库函数完成的)

//切记要开启中断 且在中断函数中 AWU_GetFlagStatus(); 来清除中断


void AWU_SET(void)

{

CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU, ENABLE);

AWU_Init(AWU_TIMEBASE_12S);

}


#ifdef _COSMIC_

@far @interrupt void AWU_IRQHandler(void)

#else

void AWU_IRQHandler(void) interrupt 1

#endif

{

AWU_GetFlagStatus();

}


IWDG应用(直接操作寄存器完成的) 


在需要清狗的地方调用WDT_CLR()即可


void WDT_CLR(void )

{

IWDG->KR = IWDG_KEY_REFRESH;

}


void START_WDT(void )

{

IWDG->KR =0X55;//打开保护

IWDG->PR = IWDG_Prescaler_256;// 28Khz 256分频 

IWDG->RLR = 254;//重载寄存器设定 每当喂狗时 此值就会重载

IWDG->KR = IWDG_KEY_REFRESH;//先喂一次

IWDG->KR = IWDG_KEY_ENABLE;//启动看门狗

}



WWDG应用


WWDG-CR是向下的计数器,数到0x40就会复位,窗口的上限可以任你设,最大7F,如果设成7F,几乎就成了没有窗口的看门狗了。 


窗口的意思是假如你设是0x60,那么只有在0X60-0X40间可以喂狗,其它时间喂,狗就会复位你的单片机,所以喂狗前要先判断狗饿否。


typedef unsigned char uint8_t;


void WWDG_Init(uint8_t Counter, uint8_t WindowValue)

{

//assert_param(IS_WWDG_WINDOWLIMITVALUE_OK(WindowValue));


WWDG->WR = WWDG_WR_RESET_VALUE;


WWDG->CR = (uint8_t)((uint8_t)(WWDG_CR_WDGA | WWDG_CR_T6) | (uint8_t)Counter);


WWDG->WR = (uint8_t)((uint8_t)(~WWDG_CR_WDGA) & (uint8_t)(WWDG_CR_T6 | WindowValue));


}



#define BIT_MASK ((uint8_t)0x7F)

void WWDG_SetCounter(uint8_t Counter)

{

WWDG->CR = (uint8_t)(Counter & (uint8_t)BIT_MASK);

}



#define window_max 0x60


#define wwdg_reset 0x70


void WWDG_CLR(void)

{//狗饿否

if ((WWDG->CR)&0x7f)< window_max)WWDG_SetCounter(wwdg_reset) ;

}



main()

{

WWDG_Init(wwdg_reset,window_max );


while(1)

{

WWDG_CLR

}

}



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭