打印

STM32自带定时器中断例子中没有中断处理程序??

[复制链接]
7167|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
beyondeath|  楼主 | 2008-2-27 15:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟困惑了好几天了,我想用定时器周期地产生中断,就算没找到中断处理程序,倒是看到很多很多的中断申请,这些中断申请,被批准执行的话,执行什么中断呢?如果不要中断申请,应该也可以直接处理中断的啊?哪位高手能告诉我STM32里通用定时器的中断处理函数是什么啊,最好是发个类似的例子出来,谢谢!
沙发
ST_ARM| | 2008-2-27 16:38 | 只看该作者

STM32定时器周期地产生中断的例子

ST的软件库里没有这个例子, 我为一些客户写的一个例程,你看看是不是适合你。 

使用特权

评论回复
板凳
ST_ARM| | 2008-2-27 16:41 | 只看该作者

晕!不登录不允许链接文件!!!

STM32定时器周期地产生中断的例子,欢迎批评指正!
相关链接:https://bbs.21ic.com/upfiles/img/20082/2008227164033357.zip

使用特权

评论回复
地板
beyondeath|  楼主 | 2008-2-27 21:04 | 只看该作者

回复ST_ARM:你的例子怎么产生中断??

感谢ST_ARM,但是我还有些问题哈。你的例子好像也是用的IRQHandler,我把你的例子写进工程中,运行,发现
TIM2_IRQHandler函数程序没有被运行啊,工程运行没有任何反应,没有中断产生。怎么才能产生中断呢?

使用特权

评论回复
5
ST_ARM| | 2008-2-28 10:00 | 只看该作者

ST的MCU定时器的使用

关于ST的MCU定时器的使用问题,请查阅以前的帖子,里面我门做了详尽的描述,至于我的代码:
     TIM_Configuration(); // 改函数中初始化了Tim的相关寄存器,开启输出比较中断。
     NVIC_Configuration(); // 开启了Tim的中断

你的程序没有运行,是因为你的项目的设置有问题。

使用特权

评论回复
6
beyondeath|  楼主 | 2008-2-28 14:54 | 只看该作者

回复ST_ARM:你的例子怎么产生中断??

谢谢啦,我再找找了。

使用特权

评论回复
7
harlemjia| | 2008-2-28 18:49 | 只看该作者

给你贴个我的程序,定时1秒扫描AD的,希望对你有用

void SetupTIM (void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
//    NVIC_InitTypeDef NVIC_InitStructure;  


  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 720;          
  TIM_TimeBaseStructure.TIM_Prescaler = 50000;       
  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;    
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
  
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

  TIM2->CR1|=(1<<3)|(1<<2);       //单脉冲模式


  /* TIM IT enable */
  TIM_ITConfig(TIM2,  TIM_IT_Update  , ENABLE);

  
      
}
void StartTIM(void)
{
    /* TIM2 enable counter */
      TIM_Cmd(TIM2, ENABLE);    
}
void SetupNVIC(void){ 
  NVIC_InitTypeDef  NVIC_InitStructure;
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);         //中断向量表
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;          //tim2
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

void TIM2_IRQHandler(void)
{
    
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//必须加
    StartTIM();
              
}
好了,主程序中别忘了开启TIM的时钟,剩下的自己写吧。

使用特权

评论回复
8
beyondeath|  楼主 | 2008-2-29 15:33 | 只看该作者

请问harlemjia :

加中断处理程序是加在 starttim 函数里面吗?
还是加在  TIM2_IRQHandler  里面?应该是后者吧。

使用特权

评论回复
9
ST_ARM| | 2008-2-29 16:05 | 只看该作者

请问楼主读过我提供的代码吗?

如果没有去看一看。

使用特权

评论回复
10
beyondeath|  楼主 | 2008-2-29 17:04 | 只看该作者

回复ST_ARM:我看过您的代码

热心的ST_ARM,您好。您的代码我当然看过,我把他们加入工程里,运行的结果仍然是 TIM2_IRQHandler 函数没有被运行(我再里面设了断点,结果断点根本没断,一直在运行主函数里的死循环)。我也很想知道为什么?我的项目的设置用的默认的,我也不知道问题在哪?您的代码,我也感觉应该是能够产生中断的啊。请问:您用那个代码产生了中断吗?

使用特权

评论回复
11
harlemjia| | 2008-2-29 18:09 | 只看该作者

加在TIM2_IRQHander里

使用特权

评论回复
12
bulaimey| | 2008-2-29 21:10 | 只看该作者

回复主题:STM32自带定时器中断例子中没有中断处理程序??

我也遇到同样的问题,就是进不了中断,一直在死循环。
我也运行过7楼的代码,也进不了中断,我现在怀疑是不是我的IAR没配置好。
10楼的现在你解决问题了吗?
请大家帮忙指教啊,谢谢!

使用特权

评论回复
13
harlemjia| | 2008-3-1 11:47 | 只看该作者

还没好使啊 ??

使用特权

评论回复
14
beyondeath|  楼主 | 2008-3-2 09:48 | 只看该作者

回13楼:还没搞定。

都想了1周了,始终不知道为什么。我没连硬件,只用软件调试。请问阁下:你用你的代码产生了中断吗?中断时程序会跳到 TIM2_IRQHandler() 吧?

使用特权

评论回复
15
beyondeath|  楼主 | 2008-3-2 09:59 | 只看该作者

回复12楼:我还没搞定。

我们两难兄难弟,谁先解决这个问题了,交流下哈。

使用特权

评论回复
16
harlemjia| | 2008-3-2 10:49 | 只看该作者

产生了啊 ,会调过去啊 ,硬件上也试过了

  你在好好看看我和3楼给你的代码

使用特权

评论回复
17
bulaimey| | 2008-3-4 20:54 | 只看该作者

回复主题:STM32自带定时器中断例子中没有中断处理程序?

可以 进入中断,我也是今天才解决的,我以前用的是IAR4.41EK版里面cortex-m3核,但编译后不能调试stm32,换成IAR4.42的同样的程序就可以进入中断了。

使用特权

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

本版积分规则

1

主题

15

帖子

0

粉丝