当前位置:首页 > 单片机 > 单片机
[导读]STM8和STM32都配备了独立看门狗,其作用之大不言而喻。以下为STM8及STM32的独立看门狗使用例:对于STM32单片机:#define SYS_IWDG_OPEN IWDG->KR=0xCCCC;#define SYS_IWDG_FEED IWDG->KR=0xAAAA;void SystemIW

STM8和STM32都配备了独立看门狗,其作用之大不言而喻。以下为STM8及STM32的独立看门狗使用例:

对于STM32单片机:

#define SYS_IWDG_OPEN IWDG->KR=0xCCCC;

#define SYS_IWDG_FEED IWDG->KR=0xAAAA;


void SystemIWDG_Config(uint32 OverTime)

{

RCC->CSR|=RCC_CSR_LSION;

while((RCC->CSR&RCC_CSR_LSIRDY)==0);

IWDG->KR=0x5555; //使能模块访问

while(IWDG->SR&IWDG_SR_PVU);

IWDG->PR=0x0006; //256分频 40000/256=156HZ T=6.4ms

while(IWDG->SR&IWDG_SR_RVU);

IWDG->RLR=(OverTime*10)>>6; //溢出时间

IWDG->KR=0xAAAA; //装载IWDG->RLR

}



对于STM8单片机:


#define SYS_IWDG_OPEN IWDG_KR=0xCC;

#define SYS_IWDG_FEED IWDG_KR=0xAA;


void SystemIWDG_Config(void) 

{

CLK_ICKCR|=S3;

while((CLK_ICKCR&S4)==0);

//STM8单片机需先执行0xCC指令,即先打开IWDG模块,否则IWDG工作不正常

IWDG_KR=0xCC; //启动看门狗

IWDG_KR=0x55; //使能模块访问

IWDG_RLR=0xFF; //溢出时间

IWDG_PR=0x06; //256分频 38000/256=148HZ T=6.7ms

IWDG_KR=0xAA; //装载IWDG->RLR

}



使用:先在主程序中打开看门狗,在主循环或任务中喂狗,但千万别在中断中喂狗。


void main()

{

......

SYS_IWDG_OPEN

......

while(1){

......

SYS_IWDG_FEED

------

}

}



操作系统OS中喂狗一般安排在最高优先级任务中,并且保证此线程不断循环。


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