OpenEdv-开源电子网

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

WWDG中断的问题

[复制链接]

11

主题

23

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2011-4-19
在线时间
10 小时
发表于 2011-5-31 21:54:19 | 显示全部楼层 |阅读模式
 


进入中断后WWDG_CR的值是0x40 不都应该比WWDG_CFR小吗  为什么还要判断??(WWWDG_CFR设置为0X5F)
但是去掉后程序就执行不正确了????
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-5-31 22:05:22 | 显示全部楼层
回复【楼主位】quhuanyu181:
---------------------------------
是的,这个地方我也很奇怪.
必须判断0X40,否则会不行,你可以去掉试试.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

23

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2011-4-19
在线时间
10 小时
 楼主| 发表于 2011-5-31 23:00:48 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
可是为什么其他人的程序都没有判断的呀  ,,,,可能程序的设计者知道。。。能帮忙问问嘛???
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-5-31 23:21:44 | 显示全部楼层
谁的?
你发上来看看.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

23

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2011-4-19
在线时间
10 小时
 楼主| 发表于 2011-6-1 08:30:32 | 显示全部楼层
/**
  * @brief  This function handles WWDG interrupt request.
  * @param  None
  * @retval None
  */
void WWDG_IRQHandler(void)
{
  /* Update WWDG counter */
  WWDG_SetCounter(0x7F);

  /* Clear EWI flag */
  WWDG_ClearFlag();

  /* Toggle LED2 */
  STM_EVAL_LEDToggle(LED2);
}
安富莱STM32基础例程上来的
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-6-1 11:09:45 | 显示全部楼层
哈哈,问题找到.
V1.1版本的WWDG代码如下:
#include "wdg.h"
#include "led.h"
//////////////////////////////////////////////////////////////////////////////////  
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板
//看门狗 驱动代码    
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2011/6/1
//版本:V1.1
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////    
     

//初始化独立看门狗
//prer:分频数:0~7(只有低3位有效!)
//分频因子=4*2^prer.但最大值只能是256!
//rlr:重装载寄存器值:低11位有效.
//时间计算(大概):Tout=((4*2^prer)*rlr)/40 (ms).
void IWDG_Init(u8 prer,u16 rlr) 
{
IWDG->KR=0X5555;//使能对IWDG->R和IWDG->RLR的写     
   IWDG->R=prer;  //设置分频系数   
   IWDG->RLR=rlr;  //从加载寄存器 IWDG->RLR  
IWDG->KR=0XAAAA;//reload    
   IWDG->KR=0XCCCC;//使能看门狗
}
//喂独立看门狗
void IWDG_Feed(void)
{
IWDG->KR=0XAAAA;//reload    
}
//保存WWDG计数器的设置值,默认为最大.
u8 WWDG_CNT=0x7f;
//初始化窗口看门狗
//tr:T[6:0],用于存储计数器的值
//wr:W[6:0],用于存储窗口值
//fprer:窗口看门狗的实际设置
//低2位有效.Fwwdg=PCLK1/4096/2^fprer.
void WWDG_Init(u8 tr,u8 wr,u8 fprer)
{   
RCC->APB1ENR|=1<<11; //使能wwdg时钟
WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.    
WWDG->CFR|=fprer<<7;    //PCLK1/4096再除2^fprer
WWDG->CFR&=0XFF80;     
WWDG->CFR|=wr;     //设定窗口值     
WWDG->CR|=WWDG_CNT; //设定计数器值
WWDG->CR|=1<<7;  //开启看门狗     
MY_NVIC_Init(2,3,WWDG_IRQChannel,2);//抢占2,子优先级3,组2    
WWDG->SR=0X00; //清除提前唤醒中断标志位
WWDG->CFR|=1<<9;        //使能提前唤醒中断
}
//重设置WWDG计数器的值
void WWDG_Set_Counter(u8 cnt)
{
WWDG->CR =(cnt&0x7F);//重设置7位计数器
}
//窗口看门狗中断服务程序
void WWDG_IRQHandler(void)
{     
WWDG_Set_Counter(WWDG_CNT);//只有当计数器的值,小于窗口寄存器的值才能写CR!!        
WWDG->SR=0X00;//清除提前唤醒中断标志位
LED1=!LED1;
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

23

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2011-4-19
在线时间
10 小时
 楼主| 发表于 2011-6-1 20:28:25 | 显示全部楼层
进入中断后WWDG_CR的值是0x40 不都应该比WWDG_CFR小吗  为什么还要判断??(WWWDG_CFR设置为0X5F)
但是去掉后程序就执行不正确了???? 

还是没看明白!!!!!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-6-1 21:15:40 | 显示全部楼层
现在没判断了啊.哪里不明白?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

23

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2011-4-19
在线时间
10 小时
 楼主| 发表于 2011-6-2 15:22:10 | 显示全部楼层
懂了一些,但是又遇到奇怪的问题 我移动 WWDG->SR=0x00;到稍上点的位置 

 WWDG->CR|=0x58|(1<<7); //开启看门狗,设置7位计数器 
WWDG->SR=0x00;   能正常运行 
但是这2句改为以下3句就不正确了
WWDG->CR|=(1<<7);  //开启看门狗  
WWDG->CR|=0x58; 
WWDG->SR=0x00; 
有什么区别呀 ,为什么上面那个能够消除复位,下面这个不能、、、、、???   
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-6-2 15:27:18 | 显示全部楼层
WWDG->CR|=(1<<7);  //开启看门狗   
WWDG->CR|=0x58;  
WWDG->SR=0x00;  
改为:
WWDG->CR|=0x58;  
WWDG->CR|=(1<<7);  //开启看门狗   
WWDG->SR=0x00;  
试试.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

11

主题

23

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2011-4-19
在线时间
10 小时
 楼主| 发表于 2011-6-2 15:34:26 | 显示全部楼层
哦  原来如此  谢谢你的耐心教导哦~~~~~~~
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 16:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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