OpenEdv-开源电子网

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

窗口看门狗调试时无法进入中断,LED灯始终常亮,不闪烁,调试半天不知哪里出问题,参考了精英版代码,还是不行,求助!!

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-3-9
在线时间
2 小时
发表于 2018-1-27 17:58:46 | 显示全部楼层 |阅读模式
1金钱
#include"wwdg.h"
#include"stm32f10x.h"
#include"delay.h"
#include"led.h"

u8 wwdg_cnt=0x7f;

void Wwdg_Init(u8 tr,u8 wv,u32 pre)
{
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);
       
        wwdg_cnt=tr&wwdg_cnt;
       
        WWDG_SetPrescaler(pre);
       
        WWDG_SetWindowValue(wv);
       
        WWDG_Enable(wwdg_cnt);
       
        WWDG_ClearFlag();
       
        Wwdg_NVIC_Init();
       
        WWDG_EnableIT();
}

void Wwdg_NVIC_Init(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
       
        NVIC_InitStructure.NVIC_IRQChannel=WWDG_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}

void WWDG_IRQHandler(void)
{
        WWDG_SetCounter(wwdg_cnt);
        WWDG_ClearFlag();
        LED1=!LED1;

}


#include"led.h"
#include"stm32f10x.h"

void Led_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        GPIO_SetBits(GPIOB,GPIO_Pin_5);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOE,&GPIO_InitStructure);
        GPIO_SetBits(GPIOE,GPIO_Pin_5);

}
#include "stm32f10x.h"
#include"delay.h"
#include"led.h"
#include"wwdg.h"


int main(void)
{
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        delay_init();
        Led_Init();
        LED0=0;
        delay_ms(300);
        Wwdg_Init(0x7f,0x5f,WWDG_Prescaler_8);
        while(1)
        {
                LED0=1;
        }
       
       
}


最佳答案

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

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-3-9
在线时间
2 小时
 楼主| 发表于 2018-1-27 17:58:47 | 显示全部楼层
回复

使用道具 举报

3

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-9-16
在线时间
51 小时
发表于 2018-1-27 20:01:17 | 显示全部楼层
好像是计数值没有初始化, 在初始化里加句WWDG_SetCounter(wwdg_cnt);试试
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-3-9
在线时间
2 小时
 楼主| 发表于 2018-1-27 20:15:35 | 显示全部楼层
apricity 发表于 2018-1-27 20:01
好像是计数值没有初始化, 在初始化里加句WWDG_SetCounter(wwdg_cnt);试试

WWDG_Enable(wwdg_cnt);初始化里有这个,原子的代码就是加了这句就可以了
回复

使用道具 举报

3

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-9-16
在线时间
51 小时
发表于 2018-1-27 20:22:37 | 显示全部楼层
qq531958586 发表于 2018-1-27 20:15
WWDG_Enable(wwdg_cnt);初始化里有这个,原子的代码就是加了这句就可以了

哦,你用的精英,我在看看
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-3-9
在线时间
2 小时
 楼主| 发表于 2018-1-27 20:25:06 | 显示全部楼层
apricity 发表于 2018-1-27 20:22
哦,你用的精英,我在看看

对的,在线调试时,寄存器的值正常,感觉就是没有进入中断处理函数。
回复

使用道具 举报

3

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-9-16
在线时间
51 小时
发表于 2018-1-27 20:27:59 | 显示全部楼层
qq531958586 发表于 2018-1-27 20:25
对的,在线调试时,寄存器的值正常,感觉就是没有进入中断处理函数。

在中断里设个断点,然后debug下
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-3-9
在线时间
2 小时
 楼主| 发表于 2018-1-27 20:44:34 | 显示全部楼层
apricity 发表于 2018-1-27 20:27
在中断里设个断点,然后debug下

我试试
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-3-9
在线时间
2 小时
 楼主| 发表于 2018-1-27 20:49:10 | 显示全部楼层
apricity 发表于 2018-1-27 20:27
在中断里设个断点,然后debug下

中断能进去,现在就是LED灯无变化了,真是奇了怪了
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-3-9
在线时间
2 小时
 楼主| 发表于 2018-1-27 20:49:52 | 显示全部楼层
apricity 发表于 2018-1-27 20:27
在中断里设个断点,然后debug下

我把所有的控制LED的语句注释掉后,还是没变化
回复

使用道具 举报

3

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-9-16
在线时间
51 小时
发表于 2018-1-27 21:48:07 | 显示全部楼层
qq531958586 发表于 2018-1-27 20:49
我把所有的控制LED的语句注释掉后,还是没变化

那WWDG配置应该是没错,灯的问题得自己查一查了
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-5-24
在线时间
2 小时
发表于 2019-5-24 15:47:30 | 显示全部楼层
把清除标志位WWDG_ClearFlag();这行代码,放到窗口看门狗初始化函数最后一行试一试 。我的bug和你差不多,最后这样解决了
回复

使用道具 举报

1

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2020-11-7
在线时间
44 小时
发表于 2020-12-5 00:25:43 | 显示全部楼层
你led引脚使用的是复用推挽输出,改为推挽输出。
回复

使用道具 举报

61

主题

348

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1403
金钱
1403
注册时间
2021-4-28
在线时间
525 小时
发表于 2021-5-30 21:12:56 | 显示全部楼层
#include <stm32f10x.h>
#include <led.h>
#include <sys.h>
#include <beep.h>
#include <delay.h>
#include <key.h>

void exio_Init()
{
   

        EXTI_InitTypeDef   EXTI_InitStruct;
        NVIC_InitTypeDef   NVIC_InitStruct;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   //使能复用时钟
       
         key_init();
        LED_Init();
       
        //外部中断3
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);    //设置IO口与中断线的映射关系       
        EXTI_InitStruct.EXTI_Line=EXTI_Line3;
        EXTI_InitStruct.EXTI_LineCmd=ENABLE;
        EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;
        EXTI_Init(&EXTI_InitStruct);
       
        //外部中断0
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);                    
        EXTI_InitStruct.EXTI_Line=EXTI_Line0;
        EXTI_InitStruct.EXTI_LineCmd=ENABLE;
        EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Rising;
        EXTI_Init(&EXTI_InitStruct);
        //设置外部中断0的中断优先级  为抢占优先级为2 响应优先级为2
        NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;
        NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x02;
        NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x02;
               
        NVIC_Init(&NVIC_InitStruct);
        //设置外部中断3的中断优先级  为抢占优先级为3 响应优先级为2
     NVIC_InitStruct.NVIC_IRQChannel=EXTI3_IRQn;
        NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x03;
        NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x02;
   
   NVIC_Init(&NVIC_InitStruct);
   

}


void EXTI0_IRQHandler(void)    //WK_UP外部中断0的中断优先级  为抢占优先级为2 响应优先级为2
{
        delay_ms(50);
         if(WK_UP==1)
         {
                LED0=0;
            LED1=0;
            BEEP=0;
         
         }
    EXTI_ClearITPendingBit(EXTI_Line0);
}
void EXTI3_IRQHandler(void)    // KEY1设置外部中断4的中断优先级  为抢占优先级为3 响应优先级为2
{   
        delay_ms(50);
        if(KEY1==0)
{   LED0=1;
        LED1=1;       
        while(1)
        {               
        BEEP=1;
                EXTI_ClearITPendingBit(EXTI_Line3);
        }
}
   
       
       
       
}

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-23 05:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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