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底层尽量就去了解寄存器操作,库函数方便但也有些弊端。
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底层尽量就去了解寄存器操作,库函数方便但也有些弊端。
举报