《串口看门狗编程实验详解.doc》由会员分享,可在线阅读,更多相关《串口看门狗编程实验详解.doc(3页珍藏版)》请在三一文库上搜索。
1、串口看门狗编程实验详解/ 独立看门狗没有中断,WWDG有/ IWDG有时钟(LSI),wwdg需要挂载(PCK1:APB1)/ IWDG是12位递减的。WWDG是7位递减的/ IWDG只有下限,WWDG有下限和上限/ IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 WWDG最适合那些要求看门狗在精确计时窗口起作用的应用程序#include “stm32f4xx.h”void delay(void);void led_init(void);void wwdg_init(u8 tr,u8 wval,u32 pre);void WWDG_IR
2、QHandler(void);u8 WWDG_CNT=0X7F;int main()NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);led_init();GPIO_ResetBits(GPIOF,GPIO_Pin_10);delay();delay();GPIO_SetBits(GPIOF,GPIO_Pin_10);wwdg_init(0x7f,0x5f,WWDG_Prescaler_8);while(1)GPIO_ResetBits(GPIOF,GPIO_Pin_10);void delay(void)int i,j;for(i=0;i10000
3、0;i+)for(j=0;j1000;j+)void led_init(void) / 保持DS1灯常亮,当熄灭时,表示MCU复位,说明没有喂狗。 DS0当喂狗时闪烁GPIO_InitTypeDef GPIO_InitStruct;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;GPI
4、O_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;GPIO_InitStruct.GPIO_Speed=GPIO_Fast_Speed;GPIO_Init( GPIOF, GPIO_SetBits(GPIOF,GPIO_Pin_10|GPIO_Pin_9);void wwdg_init(u8 tr,u8 wval,u32 pre) / 分别为计算计数器初值、看门狗窗口值(上限:自己设定,下限0x40)、分频数NVIC_InitTypeDef NVIC_InitStruct;WWDG_CNT=trRCC_APB1PeriphClockCmd(RCC_APB1Periph_W
5、WDG,ENABLE); / wwdg挂载的时钟,iwdg有自己的时钟,不需要挂载WWDG_SetWindowValue(wval);WWDG_SetPrescaler(pre);WWDG_Enable(WWDG_CNT);/ 开启看门狗:设置了计数器初值,并且使能了看门狗NVIC_InitStruct.NVIC_IRQChannel=WWDG_IRQn;NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x02;NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x02;NVIC_Init(WWDG_ClearFlag();WWDG_EnableIT();/ 开启提前唤醒中断void WWDG_IRQHandler(void)WWDG_SetCounter(WWDG_CNT);WWDG_ClearFlag();GPIO_ResetBits(GPIOF,GPIO_Pin_9); /中断处理函数,中间出现喂狗,DS0就会闪一下delay();delay();delay();GPIO_SetBits(GPIOF,GPIO_Pin_9);