为什么同时打开TIM4,5,6,7,发现中断响应函数里面中断时间发生延迟,开的中断越多越延迟

2019-07-21 00:57发布

如题: 为什么同时打开TIM4,5,6,7,发现中断响应函数里面中断时间发生延迟,开的中断越多越延迟 我的中断响应函数里仅仅是执行 一次IO的反转而已,为什么开一个TIM中断时中断响应时间正常,开2个就都延迟一些,开4个就都更加延迟了呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
正点原子
1楼-- · 2019-07-21 05:12
 精彩回答 2  元偷偷看……
lycreturn
2楼-- · 2019-07-21 08:58
 精彩回答 2  元偷偷看……
sfraim
3楼-- · 2019-07-21 10:49
回复【2楼】lycreturn:
---------------------------------
4个,都设定了同样的频率,同时都中断
lycreturn
4楼-- · 2019-07-21 13:17
回复【3楼】sfraim:
---------------------------------
同时中断,响应根据定时器中断优先级来,高优先级先响应
sfraim
5楼-- · 2019-07-21 19:15
这是TIM4的,其他TIM5,TIM5,TIM7的函数都一样的设置,但是同时打开这几个定时器时,我发现所有的中断响应函数都变慢了,只开一个定时器比如TIM4的时候,是正常的速度 
void TIM4_Base_Init()
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能

TIM_TimeBaseStructure.TIM_Period = 3;  //重装值,默认
TIM_TimeBaseStructure.TIM_Prescaler =60; //分频系数,72M/72=1MHz,其他依此类推  
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);     //把上述数值写入对应寄存器
 
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);            //使能或者失能指定的TIM中断

NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;            //TIM3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure);                 //把上述数值写入对应寄存

TIM_Cmd(TIM4, ENABLE);  //使能TIMx外设
 
}
sfraim
6楼-- · 2019-07-22 00:19
回复【4楼】lycreturn:
---------------------------------
我的这四个定时器的优先级应该是一样的,因为都是同时给电机发脉冲

一周热门 更多>