打印
[STM32F4]

在STM32F407上面移植了ucos,但是发现窗口看门狗进不了中断了,是什么原因?

[复制链接]
2357|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
destiny_zzj|  楼主 | 2015-6-1 22:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zh113214| | 2015-6-1 23:05 | 只看该作者

使用特权

评论回复
板凳
destiny_zzj|  楼主 | 2015-6-2 09:23 | 只看该作者

窗口看门狗有个提前喂狗中断的,我跑裸机的时候,这个中断能进去,移植了ucos之后,这个中断就进不去了。中断函数是 WWDG_IRQHandler

使用特权

评论回复
地板
hjl2832| | 2015-6-2 09:48 | 只看该作者
你确定其它的中断都正常,只有这个不行?

使用特权

评论回复
5
destiny_zzj|  楼主 | 2015-6-2 10:05 | 只看该作者
hjl2832 发表于 2015-6-2 09:48
你确定其它的中断都正常,只有这个不行?

是的啊。别的定时器中断,ADC中断都是OK的

使用特权

评论回复
6
amanda_s| | 2015-6-2 10:27 | 只看该作者
看看移植后WWDG的中断优先级设置有没有问题。

使用特权

评论回复
7
destiny_zzj|  楼主 | 2015-6-2 11:38 | 只看该作者
在WWDG中断里面,加了窗口判断,问题解决了

使用特权

评论回复
8
destiny_zzj|  楼主 | 2015-6-2 11:39 | 只看该作者
amanda_s 发表于 2015-6-2 10:27
看看移植后WWDG的中断优先级设置有没有问题。

在WWDG中断里面,加了窗口判断,问题解决了

使用特权

评论回复
9
destiny_zzj|  楼主 | 2015-6-2 12:08 | 只看该作者
amanda_s 发表于 2015-6-2 10:27
看看移植后WWDG的中断优先级设置有没有问题。

void WWDG_IRQHandler(void)
{
     if((WWDG->CR&0x7F)<(WWDG->CFR&0x7F))
     {
          WWDG_SetCounter(WWDG_CNT);
          j++;
          if(j==20)
          {
               GPIO_SetBits(GPIOG,GPIO_Pin_13);
          }
          else if(j==40)
          {
                j=0;
                GPIO_ResetBits(GPIOG,GPIO_Pin_13);
          }
     }

     i++;
     if(i==20)
     {
           GPIO_SetBits(GPIOG,GPIO_Pin_14);
     }
     else if(i==40)
     {
            j=0;
            GPIO_ResetBits(GPIOG,GPIO_Pin_14);
      }

      WWDG->SR=0x00;
}





窗口看门狗中断函数这么写,会发现PG13输出的翻转频率是PG14的两倍,搞不懂片子里WWDG是怎么工作的。。。
为了正常用,必须得加窗口判断啊

使用特权

评论回复
10
destiny_zzj|  楼主 | 2015-6-2 12:10 | 只看该作者
写错了,应该是
else if(i==40)
     {
            i=0;
            GPIO_ResetBits(GPIOG,GPIO_Pin_14);
      }

使用特权

评论回复
11
amanda_s| | 2015-6-3 11:23 | 只看该作者
destiny_zzj 发表于 2015-6-2 12:08
void WWDG_IRQHandler(void)
{
     if((WWDG->CR&0x7F)CFR&0x7F))

很奇怪,你不是进不去中断吗?怎么在中断服务程序里加了代码就好了?
而且WWDG中断进去的条件是counter减到0x40了,这个值肯定比CFR中W[0:6]的值小,所以你加的条件判断肯定会满足。

WWDG中断一般不是用来执行喂狗的,一般进到这个中断时表示你在其它地方安排的喂狗操作不能奏效,而发生这种现象时,肯定是系统有问题了,或者是程序有Bug,或者是碰到了干扰,在这种情况下,这个中断是为了让你的程序在发生真正的看门狗复位前,有一个紧急处理的机会,如保存重要的数据,或做系统刹车等操作。

使用特权

评论回复
12
destiny_zzj|  楼主 | 2015-6-3 12:34 | 只看该作者
amanda_s 发表于 2015-6-3 11:23
很奇怪,你不是进不去中断吗?怎么在中断服务程序里加了代码就好了?
而且WWDG中断进去的条件是counter减 ...

其实是有进中断的。PG13和PG14输出的频率是两倍关系,那么是不是说明计数器在0x5F或0x40都进了中断?反正现在加了窗口判断后,就正常工作了。谢谢你的提醒,我把喂狗放在主程序里面,在中断里面进行写EEROM操作

使用特权

评论回复
13
zh113214| | 2015-6-4 22:48 | 只看该作者
这个,总不 会是优先级设置有问题吧。、。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

136

帖子

3

粉丝