第一次 USART 接收后不断调用 TIMX_IRQHandler

问题描述

我使用 CubeMX IDE 来生成我的大部分代码。我使用的是 STM32F401RE,9600 波特的 USART2,定时器 2 通道 1。

我有一个中断设置来触发定时器的输入捕获。我的 USART 接收使用全局中断(使用 IDE ioc 文件设置),优先级设置如下:

HAL_NVIC_SetPriority(USART2_IRQn,0);
HAL_NVIC_EnableIRQ(USART2_IRQn);

每当分配给计时器的引脚收到信号时,它就会按预期工作。但是,一旦我从主机收到我的第一条消息(使用 pyserial 波特率 9600),就会调用中断不断,有效地阻止所有其他代码。我一生都无法弄清楚是什么导致了这种情况。收到 USART 通信后,是否有我应该清除的标志?为什么 USART 接收触发器这对我来说毫无意义。

我收到的消息如下:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    HAL_UART_Receive_IT(&huart2,rx_data,expected_packet);
    received_msg = 1;
}

我应该提到我使用 HAL_UART_Transmit 传输回主机。

在 TIM2_IRQHandler 中时,我尝试检查触发中断的标志,但没有设置(至少使用此处列出的标志:http://www.disca.upv.es/aperles/arm_cortex_m3/llibre/st/STM32F439xx_User_Manual/group__tim__exported__macros.html#ga96d98c66ad9d85f00c148de99888ef19)。我确实发现 USART TXE 标志不断设置,但是禁用 TXE 中断没有任何作用。

这非常令人沮丧,是的,我是 Cube IDE、HAL 和 stm32 的新手,所以如果有什么明显的问题,请告诉我。

即使在我停止向相关引脚发送信号后,此中断仍会继续触发,所以我猜有一些挂起的标志需要在串行接收和定时器中断后重置。

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)