STM32F030 WWDG使用结论

发布者:SereneMeadow7最新更新时间:2018-05-14 来源: eefocus关键字:STM32F030  WWDG 手机看文章 扫描二维码
随时随地手机看文章

使用STM32F030的WWDG,发现其在STOP下面跟STM8S的休眠模式的情况一样,不会对MCU进行复位.

贴上看门狗代码:

/*************************************************************************************** 

**************************************************************************************** 

* FILE      : wdog_drv.c 

* Description   :  

*              

* Copyright (c) 2015 by LAN. All Rights Reserved. 

*  

* History: 

* Version       Name            Date            Description 

   0.1      蓝曙光 2015/01/28  Initial Version 

    

**************************************************************************************** 

****************************************************************************************/  

  

#include "wdog_drv.h"  

  

#define WWDG_Prescaler_8                    ((uint32_t)0x00000180)  

#define CFR_WDGTB_MASK                      ((uint32_t)0xFFFFFE7F)  

#define RCC_APB1ENR_WWDGEN                  ((uint32_t)0x00000800)        /*!< Window Watchdog clock enable */  

  

/*================================================================== 

* Function  : Wdog_Init 

* Description   : 看门狗初始化 

* Input Para    :  

* Output Para   :  

* Return Value:  

==================================================================*/  

void Wdog_Init(void)  

{  

    Wdog_Start();  

    WWDG->CFR |= 0x7F;   //窗口看门狗的上窗口,窗口值必须在0x3F以上,但必须小于计数值小于0x7F  

  

    WWDG->CR = 0x7F; //看门狗计数值  

  

    Wdog_Feed(0);  

}  

  

  

  

/*================================================================== 

* Function  : Wdog_Start 

* Description   : 启动开门狗 

* Input Para    :  

* Output Para   :  

* Return Value:  

==================================================================*/  

void Wdog_Start(void)  

{  

    RCC->APB1ENR |= RCC_APB1ENR_WWDGEN;  

    //设置分频时钟  

    WWDG->CFR = (WWDG->CFR & CFR_WDGTB_MASK) | WWDG_Prescaler_8;  

  

    WWDG->CR |= 0x80; //使能窗口看门狗   

}  

  

/*================================================================== 

* Function  : Wdog_SetReload 

* Description   : 重新设置频率 

* Input Para    :  

* Output Para   :  

* Return Value:  

==================================================================*/  

void Wdog_SetReload(u8 uTime)  

{  

  

}  

  

/*================================================================== 

* Function  : Wdog_Feed 

* Description   : 喂狗 

* Input Para    :  

* Output Para   :  

* Return Value:  

==================================================================*/  

void    Wdog_Feed(u8 uTime)  

{  

     if ((WWDG->CR & 0x7F) < WWDG->CFR)//小于窗口值才能喂狗    

    {  

        WWDG->CR |= 0x7F;    //重新喂狗    

     }  

}  

  

  

  

/*================================================================== 

* Function  : Wdog_ResetChip 

* Description   : 复位芯片 

* Input Para    :  

* Output Para   :  

* Return Value:  

==================================================================*/  

void Wdog_ResetChip(void)  

{  

    while ((WWDG->CR & 0x7F) >= WWDG->CFR)  

    {//等待进入到喂狗窗口  

    }  

    WWDG->CR &= 0x40;    //喂最小复位  

    while(1);  


关键字:STM32F030  WWDG 引用地址:STM32F030 WWDG使用结论

上一篇:STM32F0多路ADC采样中的BUG和解决方案
下一篇:用STM32内置的高速ADC实现简易示波器

推荐阅读最新更新时间:2024-03-16 16:03

stm32f030超时定时器+Dma的配置
经常我们会用到空闲中断IDLE,但是空闲中断默认一个BIT接收不到就是超时,而在超时中断中,超时时间是可以自己设定的, 超时时间根据波特率以及超时规定的字节个数来确定。此处的超时时间是 40 * (1/19200). #define USART_ReceiverTimeOut 40 void DMA_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; /* DMA1 Channe3 (triggered by UART1 Rx event) Config */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1
[单片机]
STM32F1笔记(七)WWDG窗口看门狗
窗口看门狗与独立看门狗最大的不同是中断,窗口看门狗拥有一个提前唤醒中断。也就是在快要产生复位的前一段时间(T =0x40)来提醒需要进行喂狗,否则将复位。因此当窗口看门狗的计数器值减到0x40的时候,产生中断,在中断里向WWDG_CR重新写入计数器的值,即喂狗。 注意进入中断后,必须在不大于1个窗口看门狗计数周期的时间内重新写WWDG_CR,否则,看门狗将产生复位! T 就是WWDG_CR的低七位,就是窗口看门狗的计数器。 W 是WWDG- CFR的低七位,是窗口看门狗的上窗口,下窗口值是固定的0x40。 低于下窗口值会产生复位。要注意当窗口看门狗的计数器在上窗口值之外被刷新也会产生复位。 最后要注意的是状态
[单片机]
STM32F1笔记(七)<font color='red'>WWDG</font>窗口看门狗
STM32F030 systick滴答定时器
void Delay_Init(void) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//systick时钟= HCLK/8 fac_us = SystemCoreClock/8000000; fac_ms = fac_us*1000; } void Delay_Us(uint32_t nus) { uint32_t temp; SysTick- LOAD = nus*fac_us; //时间加载 SysTick- VAL = 0x00; //清除计数器 S
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved