STM32外部中断边沿触发存在延时问题

STM32外部中断边沿触发存在延时问题
概括
   通过软件调试,示波器观察的方式,来分析外部中断边沿触发存在时延的原因。
问题
   在调试模拟SPI接收的时候,想用外部中断检测上升沿的方式来捕捉SCK的上升沿却发现了外部中断存在时延的情况。
直接上图
STM32外部中断边沿触发存在延时问题_第1张图片
●黄色线信号:为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)
	{

	}
}

测试波形:
STM32外部中断边沿触发存在延时问题_第2张图片
观察被测波形,在上升沿与检测到上升沿之间有近1.2us的时延,于是怀疑问题出在了中断函数里。

●●●更改中断函数●●●

/*SCK信号线触发外部中断*/
void EXTI1_IRQHandler(void)//中断服务函数
{
	if(1)
	{
		Flag_H;//对应紫色信号线
		EXTI_ClearITPendingBit(EXTI_Line1);
		Flag_L;//对应紫色信号线
	}
}

测试波形:
STM32外部中断边沿触发存在延时问题_第3张图片
观察波形发现去掉一句中断检测时延就减少了近700ns。

EXTI_GetITStatus(EXTI_Line1) != RESET

所以说要想了解MCU底层尽量就去了解寄存器操作,库函数方便但也有些弊端。

你可能感兴趣的:(stm32,单片机,嵌入式,物联网)