[STM32F1] 定时器进不了中断

[复制链接]
2454|37
 楼主| wuhany 发表于 2022-12-4 13:51 | 显示全部楼层 |阅读模式
定时器进不了中断
 楼主| wuhany 发表于 2022-12-4 14:00 | 显示全部楼层

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);
  }        
}
pengf 发表于 2022-12-4 14:02 | 显示全部楼层

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);     
pengf 发表于 2022-12-4 14:04 | 显示全部楼层

void TIM1_TRG_COM_TIM11_IRQHandler(void)
{
        //
        // Clear the timer interrupt.
        //
  if(TIM_GetITStatus(TIM11,TIM_IT_Update)!=RESET)
        {        
}
}
参考,不过我的是M4
 楼主| wuhany 发表于 2022-12-4 14:06 | 显示全部楼层
嗯嗯 谢谢,我的用的是STM320518—EVAL的板子,我的设置都差不多,我能把工程发给你看能进入中断么?实在是弄了很久不好意思
zhenykun 发表于 2022-12-4 14:08 | 显示全部楼层
我手上没板子,要不然可以试下。
juventus9554 发表于 2022-12-4 14:11 | 显示全部楼层

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);
  }
}
看你程序和例程差不多,中断有不一样
 楼主| wuhany 发表于 2022-12-4 14:13 | 显示全部楼层
是的,例程用了两个灯,我先只让一个灯闪起来,就把第二个灯的 部分删了。我也试过按例程用两个灯,最终也只是点亮了两个灯。看你的程序里没有TIM_OCInitTypeDef  TIM_OCInitStructure;比较输出的相关配置,请问这个具体是什么作用呢?我删了这部分配置仿真结果也没有变化
heweibig 发表于 2022-12-4 14:15 | 显示全部楼层
串口那个是硬件问题。。
renyaq 发表于 2022-12-4 14:20 | 显示全部楼层
怎么判断的没有进入中断,中断条件没有达到
午夜粪车 发表于 2022-12-4 14:21 | 显示全部楼层
贴出的程序没有发现有什么错误呀?是这TIM_ITConfig(TIM3,TIM_IT_CC3,ENABLE);TIM_Cmd(TIM3,ENABLE);两句的顺序问题?
 楼主| wuhany 发表于 2022-12-4 14:24 | 显示全部楼层
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位
MessageRing 发表于 2022-12-6 14:27 | 显示全部楼层
那是硬件问题吧
Stahan 发表于 2022-12-6 14:51 | 显示全部楼层
是不是中断条件没有达到
Henryko 发表于 2022-12-6 16:16 | 显示全部楼层
硬件问题吧
Bowclad 发表于 2022-12-6 16:26 | 显示全部楼层
中断条件没有达到
Bowclad 发表于 2022-12-6 18:04 | 显示全部楼层
定时器配置顺序的原因?
Undshing 发表于 2022-12-6 19:43 | 显示全部楼层
难道是硬件问题?
AloneKaven 发表于 2022-12-6 19:52 | 显示全部楼层
是不是配置顺序写反了?
jf101 发表于 2022-12-7 15:59 | 显示全部楼层
wuhany 发表于 2022-12-4 14:24
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

楼主,你这个到底啥低级错误,分享一下,后期让大家都避免一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

879

主题

10435

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部