[STM32F1] 定时器中断服务函数

[复制链接]
 楼主| 铜牌之路 发表于 2015-8-13 10:52 | 显示全部楼层 |阅读模式
定时器中断服务函数和外设使能无关?我不开启TIM_Cmd(TIM5,ENABLE),LED 灯照样发光。 当我设置为LED0=0;时,LED灯还是发光,这是怎么回事呢?还有发现定时器扫描时间不是我设置的时间,求解答一下,谢谢各位

​ // TIM_Cmd(TIM5, ENABLE);  //不使能LED照样发光

void TIM5_IRQHandler(void)   
{if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)  
        {       
                  LED0=0;
                  KEY_AnJian();
         TIM_ClearITPendingBit(TIM5, TIM_IT_Update  );
                }
}





 楼主| 铜牌之路 发表于 2015-8-13 11:30 | 显示全部楼层
不胜感激
 楼主| 铜牌之路 发表于 2015-8-13 11:51 | 显示全部楼层
坐等,为什么没人回答一下呢?
songchenping 发表于 2015-8-13 12:13 | 显示全部楼层
首先看不到你的硬件连接。还有不知道你的软件配置如何。
 楼主| 铜牌之路 发表于 2015-8-13 12:58 | 显示全部楼层
songchenping 发表于 2015-8-13 12:13
首先看不到你的硬件连接。还有不知道你的软件配置如何。

就是stm32f103ze的开发板
void TIM5_Int_Init(u16 arr,u16 psc)
{
       
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
       
        TIM_TimeBaseStructure.TIM_Period = arr;
        TIM_TimeBaseStructure.TIM_Prescaler =psc;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
        TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE );

        NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;  
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);  

  TIM_Cmd(TIM5, ENABLE);  

                                         
}


void TIM5_IRQHandler(void)   
{
       
        if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)                 
                     {
                LED0=!LED0;
                KEY_AnJian();
         TIM_ClearITPendingBit(TIM5, TIM_IT_Update);
                }
}
songchenping 发表于 2015-8-13 13:08 | 显示全部楼层
你的arr 和psc 分别等于多少。还有你运行的是官方例程还是自己写的。
songchenping 发表于 2015-8-13 13:09 | 显示全部楼层
最好运行官方的例程看看。
amanda_s 发表于 2015-8-13 13:50 | 显示全部楼层
从你的硬件设计上,是输出低电平LED灯亮,还是输出高电平LED灯亮。
当你改变设置时,实际的引脚电平是否发生了变化?
你控制的引脚和LED灯连接的引脚是否一致?
参考官方例程,检查你的初始化代码。
 楼主| 铜牌之路 发表于 2015-8-13 15:19 | 显示全部楼层
songchenping 发表于 2015-8-13 13:08
你的arr 和psc 分别等于多少。还有你运行的是官方例程还是自己写的。

自己写的,找到原因了, TIM_ClearFlag(TIM5,TIM_FLAG_Update);这句少了
 楼主| 铜牌之路 发表于 2015-8-13 15:19 | 显示全部楼层
amanda_s 发表于 2015-8-13 13:50
从你的硬件设计上,是输出低电平LED灯亮,还是输出高电平LED灯亮。
当你改变设置时,实际的引脚电平是否发 ...

找到原因了,谢谢
songchenping 发表于 2015-8-13 17:23 | 显示全部楼层
铜牌之路 发表于 2015-8-13 15:19
自己写的,找到原因了, TIM_ClearFlag(TIM5,TIM_FLAG_Update);这句少了

那就好,遗漏了最重要的一句啊。:lol
 楼主| 铜牌之路 发表于 2015-8-13 17:30 | 显示全部楼层
songchenping 发表于 2015-8-13 17:23
那就好,遗漏了最重要的一句啊。

嗯嗯,现在又有一个问题能不能帮忙看一下呢
 楼主| 铜牌之路 发表于 2015-8-13 17:31 | 显示全部楼层
mmuuss586 发表于 2015-8-13 19:15 | 显示全部楼层
LED灯还发光,跟踪下程序看看,哪里置位了;

时钟不准,看下初始化的,分频和倍频是否正确;。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

85

帖子

0

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