zoukankan      html  css  js  c++  java
  • STM8|STM32 看门狗使用

    源: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;
    
    <pre class="cpp" name="code">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中喂狗一般安排在最高优先级任务中,并且保证此线程不断循环。

  • 相关阅读:
    hdu 2176 取(m)石子游戏
    hdu 3549 Flow problem
    hdu 3665 Seaside floyd+超级汇点
    hdu 六度分离 floyd
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1963 Investment 多重背包
    初探数据结构
    Java IO 类一览表
    Java 代码重用:功能与上下文重用
    Java Try-with-resources
  • 原文地址:https://www.cnblogs.com/LittleTiger/p/5795872.html
Copyright © 2011-2022 走看看