stm32 - 在中断中使用 HAL_GetTick

标签 stm32 microcontroller uart interruption

我正在使用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/

相关文章:

embedded - STM32 虚拟 COM 端口在 Windows 10 上显示为 DFU 模式下的设备

c - ESP32s NodeMCU 无法识别 SD 卡突破 : "Card Mount Failed"

c - 我需要有关为微 Controller 编写设备驱动程序的信息

c - 每次在收到新消息之前如何刷新/清空我的 UART(RX)?

c - stm32 Nucleo-L011K4 i2c 确认失败

arm - STM32F103 TIM1 脉宽调制输出

c - Uart 检查接收缓冲区中断与轮询

c - 在 c 中读取 uart,仅通过声明 char 数组是垃圾

stm32 - I2C 从机 - 时钟拉伸(stretch)

Clock() 不允许我存储在 Clock_t 变量中