打印
[STM32F0]

定时器进不了中断

[复制链接]
764|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuhany|  楼主 | 2017-9-26 22:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

按照例子程序写的定时器触发中断控制LED等亮灭的程序,编译通过,但仿真只看到灯亮,没有进入中断
沙发
heweibig| | 2017-9-26 22:51 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
wuhany|  楼主 | 2017-9-26 22:52 | 只看该作者

main.c
int main(void)
{
   TIM_NVIC_Config();
   LED_InitC();
   LED_Open3();
   TIM_Config();
  while (1)
  {
  }
}

time.c
#include "time.h"

void TIM_NVIC_Config(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);        
  NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;        
  NVIC_InitStructure.NVIC_IRQChannelPriority=0;        
  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void TIM_Config(void)
{
   __IO uint16_t CCR3_Val = 13654;
   __IO uint16_t CCR4_Val = 6826;
   uint16_t PrescalerValue = 0;
        
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;
        
  PrescalerValue = (uint16_t) (SystemCoreClock  / 6000000) - 1;

        TIM_TimeBaseStructure.TIM_Period=65535;        
                TIM_TimeBaseStructure.TIM_Prescaler=0;  
        TIM_TimeBaseStructure.TIM_ClockDivision=0;         
                TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;        
                TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);                  
                TIM_PrescalerConfig(TIM3, PrescalerValue, TIM_PSCReloadMode_Immediate);

        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Timing;        
                TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = CCR3_Val;
        TIM_OC3Init(TIM3,&TIM_OCInitStructure);
        TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Disable);
        
        TIM_ITConfig(TIM3,TIM_IT_CC3,ENABLE);
        TIM_Cmd(TIM3,ENABLE);
}
中断
void TIM3_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM3, TIM_IT_CC3) != RESET)
  {
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);
    LED3_Toggle();
    capture = TIM_GetCapture3(TIM3);
    TIM_SetCompare3(TIM3, capture + CCR3_Val);
  }        
}

使用特权

评论回复
地板
jiahy| | 2017-9-26 22:54 | 只看该作者

void
TIM1_Init(u32 TIM_Period)//TIM_PeriodΪ16λµÄÊý
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
                /* Time base configuration */
                TIM_TimeBaseStructure.TIM_Period =TIM_Period;
                TIM_TimeBaseStructure.TIM_Prescaler = 0;                //¶¨Ê±Æ÷ʱÖÓ·ÖƵ
                TIM_TimeBaseStructure.TIM_ClockDivision = 0;        //²ÉÑù·ÖƵ
                TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        //ÏòÉϼÆÊý
                TIM_TimeBaseInit(TIM11, &TIM_TimeBaseStructure);
          TIM_PrescalerConfig(TIM11, 13, TIM_PSCReloadMode_Immediate );
          TIM_ITConfig(TIM11, TIM_IT_Update, ENABLE);
          TIM_Cmd(TIM11, ENABLE);
}

          NVIC_InitTypeDef  NVIC_InitStructure;
         
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM11, ENABLE);  
          NVIC_InitStructure.NVIC_IRQChannel = TIM1_TRG_COM_TIM11_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);      

使用特权

评论回复
5
lizye| | 2017-9-26 22:56 | 只看该作者

void TIM1_TRG_COM_TIM11_IRQHandler(void)
{
        //
        // Clear the timer interrupt.
        //
  if(TIM_GetITStatus(TIM11,TIM_IT_Update)!=RESET)
        {        
}
}
参考,不过我的是M4

使用特权

评论回复
6
wuhany|  楼主 | 2017-9-26 22:57 | 只看该作者

嗯嗯 谢谢,我的用的是STM320518—EVAL的板子,我的设置都差不多,我能把工程发给你看能进入中断么?实在是弄了很久不好意思

使用特权

评论回复
7
jiahy| | 2017-9-26 22:58 | 只看该作者

我手上没板子,要不然可以试下。

使用特权

评论回复
8
lizye| | 2017-9-26 23:00 | 只看该作者

void TIM3_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM3, TIM_IT_CC3) != RESET)
  {
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);

    /* LED3 toggling with frequency = 219.7 Hz */
    STM_EVAL_LEDToggle(LED3);
    capture = TIM_GetCapture3(TIM3);
    TIM_SetCompare3(TIM3, capture + CCR3_Val);
  }
  else
  {
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC4);

    /* LED4 toggling with frequency = 439.4 Hz */
    STM_EVAL_LEDToggle(LED4);
    capture = TIM_GetCapture4(TIM3);
    TIM_SetCompare4(TIM3, capture + CCR4_Val);
  }
}
看你程序和例程差不多,中断有不一样

使用特权

评论回复
9
wuhany|  楼主 | 2017-9-26 23:02 | 只看该作者

是的,例程用了两个灯,我先只让一个灯闪起来,就把第二个灯的 部分删了。我也试过按例程用两个灯,最终也只是点亮了两个灯。看你的程序里没有TIM_OCInitTypeDef  TIM_OCInitStructure;比较输出的相关配置,请问这个具体是什么作用呢?我删了这部分配置仿真结果也没有变化

使用特权

评论回复
10
shimx| | 2017-9-26 23:05 | 只看该作者

串口那个是硬件问题。。

使用特权

评论回复
11
wuhany|  楼主 | 2017-9-26 23:06 | 只看该作者

搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

使用特权

评论回复
12
Ryze| | 2017-9-28 16:34 | 只看该作者
怎么判断的没有进入中断,中断条件没有达到

使用特权

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

本版积分规则

879

主题

10435

帖子

4

粉丝