打印
[STM32F1]

定时器进不了中断

[复制链接]
1840|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

使用特权

评论回复
5
wuhany|  楼主 | 2022-12-4 14:06 | 只看该作者
嗯嗯 谢谢,我的用的是STM320518—EVAL的板子,我的设置都差不多,我能把工程发给你看能进入中断么?实在是弄了很久不好意思

使用特权

评论回复
6
zhenykun| | 2022-12-4 14:08 | 只看该作者
我手上没板子,要不然可以试下。

使用特权

评论回复
7
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);
  }
}
看你程序和例程差不多,中断有不一样

使用特权

评论回复
8
wuhany|  楼主 | 2022-12-4 14:13 | 只看该作者
是的,例程用了两个灯,我先只让一个灯闪起来,就把第二个灯的 部分删了。我也试过按例程用两个灯,最终也只是点亮了两个灯。看你的程序里没有TIM_OCInitTypeDef  TIM_OCInitStructure;比较输出的相关配置,请问这个具体是什么作用呢?我删了这部分配置仿真结果也没有变化

使用特权

评论回复
9
heweibig| | 2022-12-4 14:15 | 只看该作者
串口那个是硬件问题。。

使用特权

评论回复
10
renyaq| | 2022-12-4 14:20 | 只看该作者
怎么判断的没有进入中断,中断条件没有达到

使用特权

评论回复
11
午夜粪车| | 2022-12-4 14:21 | 只看该作者
贴出的程序没有发现有什么错误呀?是这TIM_ITConfig(TIM3,TIM_IT_CC3,ENABLE);TIM_Cmd(TIM3,ENABLE);两句的顺序问题?

使用特权

评论回复
12
wuhany|  楼主 | 2022-12-4 14:24 | 只看该作者
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

使用特权

评论回复
13
MessageRing| | 2022-12-6 14:27 | 只看该作者
那是硬件问题吧

使用特权

评论回复
14
Stahan| | 2022-12-6 14:51 | 只看该作者
是不是中断条件没有达到

使用特权

评论回复
15
Henryko| | 2022-12-6 16:16 | 只看该作者
硬件问题吧

使用特权

评论回复
16
Bowclad| | 2022-12-6 16:26 | 只看该作者
中断条件没有达到

使用特权

评论回复
17
Bowclad| | 2022-12-6 18:04 | 只看该作者
定时器配置顺序的原因?

使用特权

评论回复
18
Undshing| | 2022-12-6 19:43 | 只看该作者
难道是硬件问题?

使用特权

评论回复
19
AloneKaven| | 2022-12-6 19:52 | 只看该作者
是不是配置顺序写反了?

使用特权

评论回复
20
jf101| | 2022-12-7 15:59 | 只看该作者
wuhany 发表于 2022-12-4 14:24
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

楼主,你这个到底啥低级错误,分享一下,后期让大家都避免一下

使用特权

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

本版积分规则

879

主题

10435

帖子

4

粉丝