初学STM32, 这几天在学定时器中断,发现TIM2~TIM4都正常,但同样的代码用到TIM5上就不能进中断,在论坛上查过也有别的兄弟遇到过同样的问题,但基本上都是中断入口函数里没有TIM5中断。
但我用的是startup_stm32f10x_hd.s, 里面有TIM5_IRQHandler,TIM5的配置也和TIM2~4一样,只是更改里面相关的编号为5而已,但就是不能进TIM5中断,程序也没有跑飞,其它功能还在正常运行。
请各位用过TIM5的兄弟指点一上,TIM5是否需要什么特别的设置?下面是代码:
void TIM5_IRQHandler(void)
{
if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=RESET)
{
TIM_ClearITPendingBit(TIM5,TIM_IT_Update); //清除中断标志
LED1=!LED1;
}
}
void Timer5_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
//------------------------------------------------------------
//打开定时器的时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //TIM5时钟开启
//------------------------------------------------------------
//TIMx寄存器重设为缺省值
TIM_DeInit(TIM5);
TIM_TimeBaseStructure.TIM_Period=1; //自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler=3599; //TIMx 时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频 0x0000 TIM5->CR1 = 0
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 0x0000
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
TIM_PrescalerConfig(TIM5,3600-1,TIM_PSCReloadMode_Immediate);//时钟分频系数,定时器100uS TIM5->PSC = 0x8C9F=36000-1
TIM_ARRPreloadConfig(TIM5, ENABLE);//ARR预装载缓冲器 TIMx->CR1 &= CR1_ARPE_Reset(0x037F);
TIM_ClearITPendingBit(TIM5,TIM_IT_Update); //清除中断标志
TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_Trigger,ENABLE); //更新中断使能寄存器
TIM_Cmd(TIM5, ENABLE); //开启时钟 TIM5->CR1 |= CR1_CEN_Set(0x0001);
//------------------------------------------------------------
//配置TIM5中断
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
|