5498|14

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

已解决。I2C问题用置顶程序在WWDG中断仍通不过 [复制链接]

闲话不说。
直接上程序,主要是加了WWDG看门狗并且使用它的中断。主程序里放了看门狗的初始化,中断里面放了看门狗喂狗。其它都按照你2楼的程序没改动。单独使用你的程序没问题,systick中断对它也没影响。但是WWDG通不过,因为WWDG提到它的中断只有复位才能关闭,难道是这个原因,导致你的关中断对它无效?

//【主程序部分】

int main(void)
{
#ifdef DEBUG
  debug();
#endif

  RCC_Configuration();

  NVIC_Configuration();
  

//---------------????????????????--------------------------------
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);
  WWDG_SetPrescaler(WWDG_Prescaler_8);
  WWDG_SetWindowValue(65);
  WWDG_Enable(127);
  WWDG_ClearFlag();
  WWDG_EnableIT();    
  
//-----------------?????????????------------------------------  
  
  

  
  I2C_Comm_Init(I2C1, 100000, 0xA0);

  re1=I2C_Comm_MasterWrite(I2C1, 0xa0, 0, Tx1_Buffer, 2);
  re2=I2C_Comm_MasterRead(I2C1, 0xa0, 0, Rx1_Buffer, 5);
  re2=I2C_Comm_MasterRead(I2C1, 0xa0, 0, Rx1_Buffer, 3);
  re2=I2C_Comm_MasterRead(I2C1, 0xa0, 0, Rx1_Buffer, 2);
  re2=I2C_Comm_MasterRead(I2C1, 0xa0, 0, Rx1_Buffer, 1);
  
  while(1)
  {
  re3 = I2C_Comm_MasterWrite(I2C1, 0xa0, 0, Tx1_Buffer, 8);
  if (re3!=NO_ERR)
    GPIO_SetBits(GPIOA, GPIO_Pin_0);
  re4 = I2C_Comm_MasterRead(I2C1, 0xa0, 0, Rx1_Buffer, 8);
  if (re4!=NO_ERR)
    GPIO_SetBits(GPIOA, GPIO_Pin_1);
  }

}


void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif  

//------------------??????????????-------------------------------  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQChannel; 
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_Init(&NVIC_InitStructure);  
//-----------------??????????????---------------------------------
}




//【中断WWDG部分】
void WWDG_IRQHandler(void)
{
//----------------?????????????????----------------------  
  WWDG_SetCounter(0x7F);

  WWDG_ClearFlag();  
  
  //NOP();
//----------------????????????????------------------------
}




此帖出自stm32/stm8论坛

最新回复

                                 这个问题的关键点是“Debug设置断点”!   详情 回复 发表于 2009-3-27 17:13
点赞 关注
 

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

两个问题:1、在WWDG中断仍通不过,什么现象?2、为什么用WW

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

由此看出,简单地在WWDG中断喂狗,既没有发挥WWDG相对于IWDG的优势,又因为在中断中喂狗而为以后的产品留下了隐患。


再说你的现象,请描述一下“在WWDG中断仍通不过”的具体表象,这有利于分析问题的可能原因,谢谢。
此帖出自stm32/stm8论坛
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

你在lut1lut的I2C程序里加入WWDG初始化程序,

并开启WWDG中断,你就会发现I2C程序就读写不了EEPROM。但WWDG中断能顺利进入。

WWDG是个最后喂狗机会这个不会错,但是并不能代表这个中断没有用处。

烦请有实验条件的朋友们,也试试这个问题,我这里是存在这个问题的。
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 

或者说

                                 一旦进入这个中断,我们就可以认为系统已经有问题了,所以它对I2C的影响已经可以忽略,因为接下来必需软复位来解决出问题的系统。  这样理解的话,倒也通了。  果真?
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

5
 

3楼说的正确,4楼说法不妥

                                 我在2楼前半部分只是想提醒,你这么用WWDG,没有发挥它的作用,想搞清楚你为什么要用WWDG。
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 

我试了一下

如1楼那样,添加三个地方的代码
1)main中WWDG的配置
2) NVIC中打开WWDG中断
3) it.c中在WWDG_ISR中添加处理程序

程序一直跑,示波器看I2C总线,一直正常运行,没有进入WWDG中断阿?
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 

LZ的这问题肯定没道理的。除了BUG外。

啥子中断都不会与I2C的部件发生关系。不会影响的。

在任何ARM的单片机内!ARM7一直到CORTEX-XX!

此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 

to:lut1lut

只有进入WWDG中断才会出错。我在主程序中没有喂狗的,只在WWDG中断里喂狗。 只要一直喂狗,不进WWDG中断,程序不会影响。

另:其它中断对I2C没影响,是因为lut1lut的程序中关键时序地方都加了关中断保护。 

首先这里讨论的是WWDG中断开启后是关不掉的,除非复位。 就因为关不掉,这里才讨论WWDG中断对I2C操作有没有影响。 只作讨论,实际应用中,需要WWDG中断里喂狗的情况基本不会发生,除非程序出错。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 

我没有明白LZ的意思

主程序I2C读写一直在运行;

WWDG也一直在进入,不断喂狗,刷新计数器,避免复位,从而主程序的I2C通信得以一直正常运行啊。

此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 

to alenthj

“只有进入WWDG中断才会出错。我在主程序中没有喂狗的,
只在WWDG中断里喂狗。只要一直喂狗,不进WWDG中断,程序不会影响。”

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如果你的程序没有进中断,那你怎么能喂狗?如果没有进中断,程序肯定复位,怎么会不受影响?

“实际应用中,需要WWDG中断里喂狗的情况基本不会发生,除非程序出错。”
实际情况是WWDG中断里喂狗的情况肯定会发生。我们软件库里那个WWDG例程我
                             ^^^^^^^^^^^
是run过的。

此帖出自stm32/stm8论坛
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

11
 

to:all

我在WWDG中断里喂狗的。


lut1lut,能把你的测试例程打包发给我吗?

email:alenthj@yahoo.com.cn        


我的硬件是stm32f103r8读写AT24c01,软件是IAR5.3。我回去再测试看看。
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 

to alenthj

                                 已发,请查收。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

13
 

楼主最好回答我在2楼的问题

请描述一下“在WWDG中断仍通不过”的具体表象。


8楼又说:“只有进入WWDG中断才会出错。我在主程序中没有喂狗的,只在WWDG中断里喂狗。 只要一直喂狗,不进WWDG中断,程序不会影响。”

请问出错的具体表象是什么?

还有,记得曾经看到你在搞UCOS,这个帖子讨论的背景是否与你的UCOS有关,是否有可能你根本就没有进过WWDG中断?你根据什么具体想象判断进了WWDG中断就出错?


你现在要做的是尽可能地描述操作过程和想象,不要用抽象的出错、不工作、不影响等广义词汇。
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

14
 

大概原因找到了

用IAR调试WWDG的问题,Debug设置断点要关闭看门狗计数器,否则它继续执行,直至复位。这应该就是出错的原因。

定时器、看门狗、bxCAN和I2C的调试
● 在产生断点时,计数器停止计数。这对于看门狗的计数器是必需的。

所以用wwdg断点调试时,先需要设置DBG的watchdog计数停止,以免溢出。

thanks lut1lut和版主。  



此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

15
 

恭喜楼主

                                 这个问题的关键点是“Debug设置断点”!
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表