OpenEdv-开源电子网

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

帮忙分析窗口看门狗实验结果,觉得LED0常亮,LED1闪一下就灭了。可是现象是LED1常亮,不过较暗,LED0不亮。求解

[复制链接]

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
发表于 2016-11-3 22:45:40 | 显示全部楼层 |阅读模式
#include "wwdg.h"
#include "led.h"
#include "delay.h"
#include "exti.h"


   u8 temp=0X7F;

void wwdg_init(u8 tr,u8 wr,u8 wdgtb)   //tr是计数器值,wr是窗口值,wdgtb是分频数
{
  RCC->APB1ENR|=1<<11;  //使能窗口看门狗时钟
        temp&=tr;
        WWDG->CFR|=wdgtb<<7;   // 分频设置
        WWDG->CFR&=0XFF80;     // 配置上窗口
        WWDG->CFR|=(0X7F&wr);
        WWDG->CR|=temp;   //配置计数器
        WWDG->CR|=1<<7;    //使能看门狗
        MY_NVIC_Init(2,3,WWDG_IRQn,2);  //配置中断
        WWDG->SR|=0X00;   //清除提前唤醒中断标志位
  WWDG->CFR|=1<<9;    //使能中断
}


void wwdg_set_counter(u8 cnt)   //重装计数器函数
{
        WWDG->CR=(cnt&0X7F);
}


void WWDG_IRQHandler(void)
{
        wwdg_set_counter(temp);   // 喂狗
        WWDG->SR|=0X00;  //清除提前唤醒中断标志位
  PC1=1;   //LED1  灭
}



主函数:
int main()
{

        Stm32_Clock_Init(9);
        led_init();
        delay_init(72);
        PC0=1;   //LED0   灭
        PC1=0;    // LED1   亮
        wwdg_init(0X7F,0X4F,3);
       
while(1)
{

        PC0=0; //LED0 亮
}

}





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

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-11-4 09:10:24 | 显示全部楼层
本帖最后由 操作系统 于 2016-11-4 09:13 编辑

用看门狗中断来喂狗 是不是 迟了.
回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2016-6-2
在线时间
34 小时
发表于 2016-11-4 09:18:34 | 显示全部楼层
你这个就只跑了一次前面的代码,然后只跑while里面的代码,肯定LED常亮
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
 楼主| 发表于 2016-11-4 09:33:45 | 显示全部楼层
操作系统 发表于 2016-11-4 09:10
用看门狗中断来喂狗 是不是 迟了.

是迟了,然后复位了么?可是中断怎么会迟了的,不明白。谢谢
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
 楼主| 发表于 2016-11-4 09:34:56 | 显示全部楼层
dsadsa 发表于 2016-11-4 09:18
你这个就只跑了一次前面的代码,然后只跑while里面的代码,肯定LED常亮

while里面的灯不亮。谢谢
回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2016-6-2
在线时间
34 小时
发表于 2016-11-4 09:53:48 | 显示全部楼层
liuzixia123 发表于 2016-11-4 09:34
while里面的灯不亮。谢谢

LED初始化贴出来
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
 楼主| 发表于 2016-11-4 14:30:26 | 显示全部楼层
dsadsa 发表于 2016-11-4 09:53
LED初始化贴出来

#include "led.h"

//LED函数的初始化
void led_init()
{
  RCC->APB2ENR|=1<<4;    //使能PC口的时钟
        GPIOC->CRL&=0X00000000;    //清空PC0-PC7的输出配置
        GPIOC->CRL|=0X33333333;    //设置PC0-PC7为推挽输出,50MHz
        GPIOC->ODR|=0XFFFF;
       
}





#ifndef LED_H
#define LED_H
#include "sys.h"

#define PC0 PCout(0)
#define PC1 PCout(1)
#define PC2 PCout(2)
#define PC3 PCout(3)
#define PC4 PCout(4)
#define PC5 PCout(5)
#define PC6 PCout(6)
#define PC7 PCout(7)
void led_init(void);

#endif


LED文件用过的,灯能亮

回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2016-6-2
在线时间
34 小时
发表于 2016-11-4 15:33:28 | 显示全部楼层
liuzixia123 发表于 2016-11-4 14:30
#include "led.h"

//LED函数的初始化

wwdg_init(0X7F,0X4F,3);前加个延时看下
回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2016-6-2
在线时间
34 小时
发表于 2016-11-4 15:37:06 | 显示全部楼层
dsadsa 发表于 2016-11-4 15:33
wwdg_init(0X7F,0X4F,3);前加个延时看下

还有把你LED硬件那块的原理图也贴出来
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
 楼主| 发表于 2016-11-4 21:01:12 | 显示全部楼层
dsadsa 发表于 2016-11-4 15:37
还有把你LED硬件那块的原理图也贴出来

        PC0=1;   //LED0   灭
        PC1=0;    // LED1   亮
        delay_ms(200);
        wwdg_init(0X7F,0X4F,3);
       
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
 楼主| 发表于 2016-11-4 21:05:17 | 显示全部楼层
dsadsa 发表于 2016-11-4 15:37
还有把你LED硬件那块的原理图也贴出来

LED1亮度增加。还有上电后它为什么LED1闪烁几下呢?图片贴不出,为PC0-PC7,LED共阳,低电平点亮
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
 楼主| 发表于 2016-11-4 21:07:05 | 显示全部楼层
liuzixia123 发表于 2016-11-4 21:05
LED1亮度增加。还有上电后它为什么LED1闪烁几下呢?图片贴不出,为PC0-PC7,LED共阳,低电平点亮

觉得是在while死循环前一直复位,不晓得为什么这样
回复 支持 反对

使用道具 举报

4

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-10-10
在线时间
20 小时
 楼主| 发表于 2016-11-4 23:20:36 | 显示全部楼层
liuzixia123 发表于 2016-11-4 21:07
觉得是在while死循环前一直复位,不晓得为什么这样

仿真死在了
无标题.png
回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2016-6-2
在线时间
34 小时
发表于 2016-11-7 09:48:22 | 显示全部楼层

你在窗口初始化那里设个断点,看下跑到哪一步停了,好好检查下
回复 支持 反对

使用道具 举报

3

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2016-6-2
在线时间
34 小时
发表于 2016-11-7 09:53:28 | 显示全部楼层
dsadsa 发表于 2016-11-7 09:48
你在窗口初始化那里设个断点,看下跑到哪一步停了,好好检查下

你是不是没把“”sys.h“”添加进来
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 00:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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