void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin == GPIO_PIN_9) { HAL_Delay(5); if(page_sta==0) { OLED_Clear(); page_sta=1; page2_test(); } else if(page_sta==1) { OLED_Clear(); page_sta=0; page1_test(); } } } 程序到HAL_Delay(5);就卡死了
时间: 2024-04-06 21:28:51 浏览: 11
这个程序很可能是因为 HAL_Delay(5) 导致的死循环,因为 HAL_Delay() 函数是一个阻塞函数,会使CPU进入等待状态,直到延时时间结束。在这段代码中,如果GPIO中断触发时,跳转到中断处理函数 HAL_GPIO_EXTI_Callback(),如果GPIO_Pin为GPIO_PIN_9,则会执行 HAL_Delay(5),这里的延时时间是5ms,这段时间内CPU会一直等待,如果期间又有GPIO中断触发,则会卡死。
解决这个问题的方法是使用定时器中断来替代 HAL_Delay() 函数,或者使用RTOS等操作系统来管理任务,避免阻塞CPU。
相关问题
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
`void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)`是一个回调函数,当外部中断被触发时,它会被自动调用。在这个函数中,你可以编写你想要执行的代码,以响应中断事件。例如,你可以在这个函数中读取传感器数据或者控制某些设备的状态。
这个函数的参数`GPIO_Pin`表示触发中断的引脚号。你可以使用这个参数来确定是哪个引脚触发了中断,从而采取相应的措施。
下面是一个示例代码,演示了如何使用`HAL_GPIO_EXTI_Callback`函数来处理外部中断:
```c
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if (GPIO_Pin == GPIO_PIN_4) {
// 处理引脚4的中断事件
// ...
} else if (GPIO_Pin == GPIO_PIN_5) {
// 处理引脚5的中断事件
// ...
}
}
```
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)什么意思
这是STM32 HAL库中的一个回调函数。当GPIO口的外部中断事件被触发时,HAL库会自动调用这个函数,以执行用户自定义的中断处理操作。
其中,GPIO_Pin表示触发中断的GPIO口的引脚号,可以根据这个参数来判断是哪个GPIO口触发了中断事件。
用户可以在程序中重写这个函数,以实现自己的中断处理逻辑。例如,当外部中断触发时,可以在这个函数中读取相应的传感器数据,并进行相应的处理,以实现更加智能化的系统功能。