我正在使用STM32CubeIDE开发STM32F411CEU6,我正在制作一个在UART中断内工作的库,在UART中断内我使用HAL_GetTick函数来跟踪时间,当我在中断之外使用此函数时它可以正常工作,但是当我尝试在 uwTick 停止中断内使用它。
我知道uwTick是一个在中断时递增的全局变量,我的第一个猜测是UART中断比系统滴答计时器中断具有更高的优先级(我猜测这个中断是触发uwTick增量的中断) ),但系统滴答定时器中断在引脚配置 UI 中具有更高的中断。
这是怎么回事?
我应该改变我的方法并使用计时器(读取内部计数器)吗?
附加信息:
-我通过 HAL_UART_Receive_IT(&huartx, &USART_receive[0], 1) 触发中断,其中 USART_receive 是接收缓冲区
-使用 HAL_GetTick 函数的函数在 HAL_UART_IRQHandler(&huart1) 函数之后的 void USART1_IRQHandler(void) 处理程序中被调用
提前致谢!
最佳答案
较高的中断优先级由较低的数字表示,反之亦然。也许您需要改变优先级来做您想做的事。
但是,请注意:
按照惯例,systick 是系统中优先级最低的中断之一,只有 pendsv/svcall 较低。
通常认为尝试在中断内延迟是一个坏主意,尤其是几毫秒。最好在中断中设置一个标志或其他东西,让您的主上下文执行延迟的操作。
关于stm32 - 在中断中使用 HAL_GetTick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74620807/