压栈操作带来的TIM中断服务周期摄动范围有多大?

2019-08-13 21:56发布

在一个小项目里需要采用STM32F103进行精确的周期控制,因此采用TIM1的定时器中断功能。设定为自动重载,并且没有比它优先级高的中断来打扰。

/***********TIM1***************/
TIM_DeInit(TIM1);
TIM_TimeBaseStructure.TIM_Period=SPEED_REFRESH_CYCLE; //设置固定的中断周期
TIM_TimeBaseStructure.TIM_Prescaler=0;
TIM_TimeBaseStructure.TIM_ClockDivision=0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;       
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

void TIM1_UP_IRQHandler(void)
{
      ………//无分支的固定时长操作

    GPIOA->BRR = GPIO_Pin_7;    //标志信号输出,打开

     ………//无分支的固定时长操作           

    TIM1->SR = (uint16_t)~TIM_IT_Update;

    GPIOA->BSRR = GPIO_Pin_7; //标志信号输出,关闭

     ………//无分支的固定时长操作   
}



然而,在使用中发现,在不同的情况下,PA.7的信号周期存在抖动。

QQ图片20171003155617.png
QQ图片20171003155728.png
分析原因,造成这钟差距的原因应该是进入中断服务程序前的单片机自动压栈操作带来的

那么问题来了,在STM32F103里,这种压栈带来的周期摄动范围究竟有多大呢?如何去分析和测试呢?有没有大佬能够指点迷津??




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。