OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3062|回复: 0

窗口看门狗实验 按照实验例程 无法正常喂狗?

[复制链接]

2

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-3-4
在线时间
21 小时
发表于 2017-3-4 20:13:01 | 显示全部楼层 |阅读模式
1金钱
代码如下,望大神帮助

main函数

#include "stm32f10x.h"
#include "delay.h"
#include "LED.h"
#include "usart.h"
#include "WWDG.h"

//独立看门狗main
/*
int main(void)
{       

        delay_init();
        LED_Init();
        KEY_Init();
        BEEP_Init();
       
        delay_ms(200);
        LED2=0;
       
        IWDG_Init(4,625);//
       
        while(1)
        {
                if(KEY_Scan(1)==KEY0_PRES)
                {
                        IWDG_ReloadCounter();
                }
        }
         
         
}
*/

//窗口看门狗main
int main(void)
{
        delay_init();
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2
        uart_init(115200);
        LED_Init();
        LED2=0;       
        delay_ms(300);
       
        WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);//计数器值为0x7f,窗口寄存器为0x5f,分频系数为8
       
        while(1)
        {
                LED2=1;
                delay_ms(300);
        }       
               
}


WWDG函数

#include "WWDG.h"
#include "LED.h"

//保存WWDG计数器的设置值,默认为最大
u8 WWDG_CNT=0x7f;

//初始化窗口看门狗
//tr        T[6:0]        计数器值(初值)
//wr        W[6:0]        窗口值
//fprer        分频系数(WDGTB)        仅最低两位有效
//Fwwdg=PCLK1/(4096*2^fprer)
void WWDG_Init(u8 tr,u8 wr,u32 fprer)
{
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//WWDG时钟使能
       
        WWDG_CNT=tr&WWDG_CNT;//初始化IWDG_CNT(低七位)
        WWDG_SetPrescaler(fprer);//设置IWDG预分频值
        WWDG_SetWindowValue(wr);//设置窗口值
        WWDG_Enable(WWDG_CNT);//(启动并设置初始值)使能看门狗, 设置counter
       
        WWDG_ClearFlag();//清除提前唤醒中断标志位
        WWDG_NVIC_Init();//初始化窗口看门狗 NVIC
        WWDG_EnableIT();//开启窗口看门狗中断(使能提前唤醒中断)
}

//重设置WWDG计数器的值
void WWDG_Set_Counter(u8 cnt)
{
        WWDG_Enable(cnt);//使能看门狗, 设置counter
}

//窗口看门狗中断服务函数
void WWDG_NVIC_Init(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;//WWDG中断
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢先优先权_抢占2,子优先级3,组2
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//响应优先级_抢占2,子优先级3,组2
        NVIC_Init(&NVIC_InitStructure);//NVIC初始化
}


void WWDG_IRHandler(void)
{
        WWDG_SetCounter(WWDG_CNT);//喂狗。当禁掉此句,窗口看门狗将产生复位
        WWDG_ClearFlag();//清除提前唤醒中断标志位
        LED3=!LED3;//LED状态反转(来指示喂狗成功)
}


实验现象:LED2不停闪烁,而LED3没有反映……

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 11:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表