STM8S awu及看门狗IWDG WWDG应用(转)

源:STM8S awu及看门狗IWDG WWDG应用

 

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
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值