xtomfuk 发表于 2017-2-6 14:59:20

STM8|STM32 看门狗使用

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中喂狗一般安排在最高优先级任务中,并且保证此线程不断循环。

cmyldd 发表于 2017-2-6 22:14:50

试过未?

zhaoxiyao5210 发表于 2017-2-7 07:16:38

试过某?

rush 发表于 2017-2-7 09:01:09

谢谢分享!!!

ruili 发表于 2017-2-8 10:43:35

门门是技术

wpc 发表于 2017-10-29 14:37:50

ycmk2000 发表于 2017-10-30 08:53:28

天涯哥 发表于 2020-10-27 13:34:36

aygc 发表于 2020-11-15 15:49:27

逆天pads 发表于 2020-11-15 20:24:47

页: [1] 2
查看完整版本: STM8|STM32 看门狗使用