STM32
直播中

杨勇

7年用户 1173经验值
私信 关注
[问答]

STM32外部中断边沿触发为什么会存在延时的问题呢

STM32外部中断边沿触发为什么会存在延时的问题呢?怎样去解决这个问题呢?

回帖(1)

李颖

2021-10-22 11:11:21
  STM32外部中断边沿触发存在延时问题
  概括:
  通过软件调试,示波器观察的方式,来分析外部中断边沿触发存在时延的原因。
  问题:
  在调试模拟SPI接收的时候,想用外部中断检测上升沿的方式来捕捉SCK的上升沿却发现了外部中断存在时延的情况。
  直接上图
  
  ●黄色线信号:为SPI的SCK线
  ●紫色线信号:捕捉的上升沿信号
  观察紫色信号在一定时间之后才捕捉到了黄色信号的上升沿。
  调试:(MCU-STM32F103 时钟-72M)
  中断函数:
  /*外部中断0中断*/
  /*SCK信号线触发外部中断*/
  void EXTI1_IRQHandler(void)//中断服务函数
  {
  if(EXTI_GetITStatus(EXTI_Line1) != RESET )
  {
  Flag_H;//对应紫色信号线
  EXTI_ClearITPendingBit(EXTI_Line1);
  Flag_L;//对应紫色信号线
  }
  }
  主函数(主循环不做任何指令):
  int main()
  {
  SysTick_init();
  SPI_GPIO_Config();
  EXTI_PB1_Config();
  while(1)
  {
  }
  }
  测试波形:
  
  观察被测波形,在上升沿与检测到上升沿之间有近1.2us的时延,于是怀疑问题出在了中断函数里。
  ●●●更改中断函数●●●
  /*SCK信号线触发外部中断*/
  void EXTI1_IRQHandler(void)//中断服务函数
  {
  if(1)
  {
  Flag_H;//对应紫色信号线
  EXTI_ClearITPendingBit(EXTI_Line1);
  Flag_L;//对应紫色信号线
  }
  }
  测试波形:
  
  观察波形发现去掉一句中断检测时延就减少了近700ns。
  EXTI_GetITStatus(EXTI_Line1) != RESET 所以说要想了解MCU底层尽量就去了解寄存器操作,库函数方便但也有些弊端。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分