10465|22

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于tim3中断的问题 [复制链接]

  程序再初始化时执行如下语句,就会进一次TIM3中断,但这是TIM3并没有开启。
    TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;  
   
    /* Time Base configuration */    
    TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
    TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);    
    //下降沿计数值加1,
    TIM_ETRClockMode2Config(TIM3, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_Inverted, 0);    
      
   TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE );    
此帖出自stm32/stm8论坛

最新回复

                                 请看另一个帖子中23、24楼的详细解释: 相关链接:https://bbs.eeworld.com.cn/club/bbs/list.asp?Page=1&boardid=49&t=3369636&p=2  详情 回复 发表于 2009-7-14 16:16
点赞 关注
 

回复
举报

84

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

re

   nvic配置如下:
     
     NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
    NVIC_Init(&NVIC_InitStructure);
  这个现象比较奇怪,不知道为什么,程序仅仅是刚进行了定时器的初始化,还没有进行任何的操作,T3也没有开启,不知道这个中断是怎么来的。不过此情况就是在初始化的时候会出现一下,等到程序执行后就没有这样的现象了。
   
此帖出自stm32/stm8论坛
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

re

还有一个现象就是若再一个外部中断里开启T3,发现只要进入了外部中断就一定会触发一次T3中断,无论是否满足给定的T3产生中断条件(T3计数器器寄存器到达某一值)

  希望知道的朋友说一下,谢
此帖出自stm32/stm8论坛
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 

估计与这个“再”有关

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 

汗一下

                                 是‘在’不是‘再’啊...
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 

你的代码初始化的顺序是怎样的?

                                 一般来说NVIC在最后初始化。
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 

初始化顺序如下

void BSP_Initial(void)
{
      RCC_Configuration();
      GPIO_Configuration();
           GPIO_SetBits(GPIOE, GPIO_Pin_3);
      NVIC_Configuration();
      SysTick_Configuration();
      ADC1_Configuration();
      T2_Configuration();
      T3_Configuration();
      T4_Configuration();
      CAN_Configuration();
          UART_onfiguration ();
}
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 

这个怎么跟初始化的顺序有关?

                                 想不明白,是不是芯片故意这么做的???
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

9
 

没有初始化,就意味着该模块的状态不定

一个数据通道上,如果先初始化输出端,后初始化输入端,开放输出端后它肯定会输出输入端的不定状态信号,这样岂能得到正确的结果?

这不是芯片故意这么做的,而是事物固有的逻辑规律。
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

10
 

那初始化的顺序到底应该是怎样的?

                                 如果要设置一个定时器为外部计数模式到底应该是什么样的顺序????
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

11
 

修改初始化顺序后发现还是不行

void BSP_Initial(void)
{
      RCC_Configuration();
      GPIO_Configuration();
      GPIO_SetBits(GPIOE, GPIO_Pin_3);
      
      SysTick_Configuration();
      ADC1_Configuration();
      T2_Configuration();
      T3_Configuration();
      T4_Configuration();
      CAN_Configuration();
      UART_onfiguration ();

      NVIC_Configuration();
}
  程序执行了NVIC_Configuration中关于TIM3中断的设置:
    NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE; 
    NVIC_Init(&NVIC_InitStructure);
 马上也会进入TIM3中断,这时候其实仅仅是初始化阶段,TIM3并没有开启。
同样的现象也发生在外部中断中,即程序执行了NVIC_Configuration中关于外部中断的设置:
    EXTI_InitStructure.EXTI_Line = EXTI_Line12;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);  
    
    /* Enable the EXTI10_5 Interrupt */
    NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure)
    也马上触发了外部中断,但是此时外部中断在硬件上并没有连接呢,所以实际并没有外部中断触发信号到来
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 

楼主位程序的最后一句话不就是开启了TIM3的Update中断吗?

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 

回香版

                                 我虽然在开了TIM3的中断 但是我并没有开启TIM3啊,这里还没有执行TIM_Cmd(TIM3, ENABLE)这样的指令。TIM3的计数器都没有开始工作呢,怎么就进入中断了,程序中我是计数到某个值才应该中断的。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 

请在初始化时先把中断挂起标志清掉

                                 同时,在进入中断后通过检查各个寄存器的内容,判断一下这个问题的原因是什么;我没有真正看到你的现象,不能明确告诉你问题的所在,只能给你指示一些调试的方向。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

15
 

能否将你的项目打包上来

                                 (最好是使用IAR)
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

16
 

问题解决

                                 初始化之前手动将tim3的udis位清一下就能避免了
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

17
 

不只是TIM3有这个问题,好多外设都有中断问题

                                 USART,RTC等好多都是开启中断就会产生中断,在开中断前一定要先设置中断向量地址,要不就会跑到他外婆家去了!我以前也在论坛上说过,可是人家说这是每个厂家的特点,汗!!好好修改一下程序,可以避免,当然不是STM32提供例程就可以搞定,那就太天真了!因为ST没有真正的技术支持,有的也是我们这样的外行的总结!
此帖出自stm32/stm8论坛
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

18
 

在开中断前一定要先设置中断向量地址,好像不是STM32独有的

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

19
 

re

开启中断后就立刻进入是因为有NVIC中该中断处于挂起状态(=1).
我遇到过这个问题.是因为我JTAG调试没有接系统的nRST.下程序进去不会复位芯片.(复位NVIC).那么上一次程序运行的挂起标志还在.所以就进中断了.

可以查下是不是这个原因
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

20
 

本来这就是LZ自己的BUG

没事白开中断。 就算入了中断能怪谁?

其他的外设都是这样的。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表