STM32窗口看门狗程序

发布者:声慢慢最新更新时间:2021-04-23 来源: eefocus关键字:STM32  窗口看门狗 手机看文章 扫描二维码
随时随地手机看文章

简介:窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位(WWDG->CR的第六位)变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。


在递减计数器达到窗口配置寄存器(WWDG->CFR)数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。

图 3.6.1.1中,T[6:0]就是WWDG_CR的低七位,W[6:0]即是WWDG->CFR的低七位。T[6:0]就是窗口看门狗的计数器,而W[6:0]则是窗口看门狗的上窗口,下窗口值是固定的(0X40)。当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。


上窗口值(W[6:0])是由用户自己设定的,根据实际要求来设计窗口值,但是一定要确保窗口值大于0X40,否则窗口就不存在了。


窗口看门狗的超时公式如下:


Twwdg=(4096×2^WDGTB×(T[5:0]+1)) /Fpclk1;


其中:


Twwdg:WWDG超时时间(单位为ms)


Fpclk1:APB1的时钟频率(单位为Khz)


WDGTB:WWDG的预分频系数


T[5:0]:窗口看门狗的计数器低6位


窗口看门狗寄存器介绍:





如何使用窗口看门狗:

1)使能WWDG时钟

2)设置WWDG_CFR和WWDG_CR两个寄存器

在时钟使能完后,我们设置WWDG的CFR和CR两个寄存器,对WWDG进行配置。包括使能窗口看门狗、开启中断、设置计数器的初始值、设置窗口值并设置分频数WDGTB

3)开启WWDG中断并分组

4)编写中断服务函数



软件例程:


//---------------------------wdg.c-----------------------



#include "wdg.h"


#include "led.h"





u8 wwdg_cnt=0x7f; //窗口看门狗计数器初值





void wwdg_init(u8 tr,u8 wr,u8 fprer)


{


RCC->APB1ENR|=1<<11; //使能WWDG时钟


wwdg_cnt=tr&wwdg_cnt; // 初始化计数器值


WWDG->CFR|=fprer<<7; //设置频率时基


WWDG->CFR|=1<<9; //使能串口看门狗中断


WWDG->CFR&=0xff80; //窗口值清零


WWDG->CFR|=wr; //设定窗口值


WWDG->CR|=(wwdg_cnt|1<<7); // 启动看门狗设置7位计数器初值


MY_NVIC_Init(2,3,WWDG_IRQChannel,2);





}





void wwdg_feed(u8 cnt)


{


WWDG->CR|=(cnt&0x7f);//喂狗值





}








void WWDG_IRQHandler(void)


{


u8 tr,wr;


wr=WWDG->CFR&0x7f;


tr=WWDG->CR&0x7f;


if(tr

WWDG->SR&=0x00; //清楚提前唤醒标志位


LED1=!LED1;


}



//------------------------wdg.h---------------------


#ifndef _wdg_h


#define _wdg_h





#include "sys.h"





void wwdg_init(u8 tr,u8 wr,u8 fprer);


void wwdg_feed(u8 cnt);





#endif

//------------------led.c----------------------


#include "led.h"





void led_init(void)


{


RCC->APB2ENR|=1<<2;


RCC->APB2ENR|=1<<5;


GPIOA->CRH&=0xfffffff0;


GPIOA->CRH|=0x00000003;


GPIOD->CRL&=0xfffff0ff;


GPIOD->CRL|=0x00000300;


GPIOA->ODR|=1<<8;


GPIOD->ODR|=1<<2;





}


//---------------------led.h------------------


#ifndef _led_h


#define _led_h





#include "sys.h"





#define LED0 PAout(8)


#define LED1 PDout(2)





void led_init(void);





#endif




///-----------------------主函数------------test.c---------------


#include





#include "sys.h"


#include "delay.h"


#include "usart.h"


#include "led.h"


#include "wdg.h"





int main(void)


{


Stm32_Clock_Init(9);


delay_init(72);


uart_init(72,9600);


led_init();


wwdg_init(0x7f,0x5f,3);


LED0=0;


delay_ms(1800);


while(1)


{


LED0=1;





}





}


关键字:STM32  窗口看门狗 引用地址:STM32窗口看门狗程序

上一篇:基于STM32的电容触摸按键的原理解析
下一篇:基于STM32的植物生长动态补光控制系统设计

推荐阅读最新更新时间:2024-11-10 12:23

STM32关于使用定时器触发ADC转换的解决办法和详细说明
以STM32 ADC的常规通道为例(注入通道类似): 如上图,STM32 ADC的常规通道可以由以上6个信号触发任何一个,我们以使用TIM2_CH2触发ADC1,独立模式,每次仅测一条通道,则ADC的配置如下:(以下代码使用STM32固件库V3.5) void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; //关闭通道扫描模式 ADC_InitStructur
[单片机]
<font color='red'>STM32</font>关于使用定时器触发ADC转换的解决办法和详细说明
STM32单片机开发时常见的无刷直流电机
无刷直流电机简介 无刷直流电机,英语缩写为BLDC(Brushless Direct Current Motor)。电机的定子是线圈,或者叫绕组。转子是永磁体,就是磁铁 。根据转子的位置,利用单片机来控制每个线圈的通电,使线圈产生的磁场变化,从而不断在前面勾引转子让转子转动,这就是无刷直流电机的转动原理。下面深入一下。 无刷直流电机的结构 首先先从最基本的线圈说起。如下图。可以将线圈理解成长得像弹簧一样的东西。根据初中学过的右手螺旋法则可知,当电流从该线圈的上到下流过的时候,线圈上面的极性为N,下面的极性为S。 现在再弄一根这样的线圈。然后摆弄一下位置。这样如果电流通过的话,就能像有两个电磁铁一样。 再弄一根,就可以构
[单片机]
<font color='red'>STM32</font>单片机开发时常见的无刷直流电机
基于STM32单片机的四旋翼无人机飞控设计
四轴飞行器是一种利用四个旋翼作为飞行引擎来进行空中飞行的飞行器。进入20世纪以来,电子技术飞速发展四轴飞行器开始走向小型化,并融入了人工智能,使其发展趋于无人机,智能机器人。 四轴飞行器不但实现了直升机的垂直升降的飞行性能,同时也在一定程度上降低了飞行器机械结构的设计难度。 四轴飞行器的平衡控制系统由各类惯性传感器组成。在制作过程中,对整体机身的中心、对称性以及电机性能要求较低,这也正是制作四轴飞行器的优势所在,而且相较于固定翼飞机,四轴也有着可垂直起降,机动性好,易维护等优点。 一:方案& 电路 本设计采用STM32F1作为核心处理器,该处理器内核架构 ARM Cortex-M4,具有高性能、低成本、低功耗等特点。 主控
[单片机]
基于<font color='red'>STM32</font>单片机的四旋翼无人机飞控设计
STM32片内RTC亚秒特性的应用示例(上)
绝大多数STM32系列里的RTC都具有亚秒【或称子秒】计数单元。为了了解亚秒特性及功能,不妨先看RTC的功能框图。本文中的有关截图若无特别说明均来自STM32L4系列参考手册。 RTC的时钟源【RTCCLK】可以是LSE、LSI或者HSE/32,由RTCCLK最终变成日历的秒脉冲驱动信号经过了2次分频。先经过上图中A处的异步分频单元,默认分频系数是128,形成ck_apre时钟,默认情况下该时钟频率为256Hz;然后该时钟脉冲来到图中B处的同步分频单元,默认分频系数为256,最终形成1Hz的秒脉冲【ck_spre】到日历单元。关于两分频单元分频系数的配置,通过对RTC_PRER寄存器的相关位编程实现。 其中异步分频系数配
[单片机]
<font color='red'>STM32</font>片内RTC亚秒特性的应用示例(上)
51.内部温度传感器实验
一。STM32内部温度传感器概述 学习这一节之前要对ADC有一个清楚的理解。因为STM32内部温度传感器本质上就是ADC。 (一)内部温度传感器框图 内部温度传感器连接到ADC1的通道16,在使用之前要去使能相应的控制位TSVREFE,使能了之后内部温度传感器就连接到了通道16. (二)STM32内部温度传感器概述 由于它在芯片的内部,因此一般都用了测试芯片内部的温度,不同于环境温度,要稍微偏高一些。 温度传感器模拟输入推荐采样时间是17.1us,不能太快。 (三)内部温度传感器使用注意是像。 把CR2的TSVREFE位(bit23)设置为1就启用了温度传感器。 V25是温度传感器在25度
[单片机]
51.内部温度传感器实验
初学STM32及GPIO入门之流水灯
一.准备工作---建立一个keil工程 STEP1. 打开keil,选择project-new uvision project,建立一个LED工程 STEP2. 在工程文件保存的路径下新建以下文件夹,在官网上或其他渠道下载STM32的3.5版库,将inc 和scr文件夹放入fwlib中。将startup_stm32f10x_hd.s放入asm文件夹中。将库文件放入cmsis中。 STEP3. 在keil中分别新建 【startcode】【user】【fwlib】【cmsis】四个组,再按照下图所示将C文件加入组中。这里要注意的是组里面添加的都是汇编文件和C文件,头文件不需要添加。 STEP4. 为了更好的理清各项文
[单片机]
初学<font color='red'>STM32</font>及GPIO入门之流水灯
PS2无线遥控手柄与STM32单片机通信
PS2无线遥控手柄 接下来要做一个小车玩玩,在网上淘了一个PS2无线遥控手柄,用于控制小车的前进、后退等功能。 实物图如下: 其中有两个PS2游戏摇杆,对应的驱动原理参见下文: PS2游戏摇杆原理及控制实现 接收器 与这个手柄配套的还有一个接收器,用于接收PS2无线遥控手柄发送过来的数据 该接收器一共有六个引脚,分别定义如下: 注意: 当接收器上的绿灯常亮时,证明手柄和接收器配对成功,可以正常进行数据通讯。如果手柄和接收器断开了,按手柄上的 START 键即可恢复配对; 当手柄上的MODE指示灯没有点亮的时候,游戏摇杆四个方向输出按键键码值;当点击 MODE 按键后,手柄上的MODE指示灯变亮(红色),
[单片机]
STM32简单的LED流水灯程序
//0x4002 1000 - 0x4002 13FF 复位和时钟控制(RCC) #define RCC_BASE 0x40021000 #define RCC_APB2ENR (RCC_BASE+0x18) //LED接在GPIOF上,是APB2上的外设,是RCC_APB2ENR寄存器的第7位 //APB20x4001 1c00 GPIO端口F #define GPIOF_BASE 0x40011c00 #define GPIOF_CHL (0x000+GPIOF_BASE) #define GPIOF_CHR (0x004+GPIOF_BASE) #defin
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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