STM32
直播中

陈秀珍

7年用户 918经验值
私信 关注
[问答]

在FreeRTOS中串口重定向使用HAL库函数中断出现异常的原因?

由于需要使用到FreeRTOS 考虑到ISR优先级会比任务优先级高,并且查看HAL_UART_Transmit函数实现需要使用到systick 。


所以在重定义时使用了函数HAL_UART_Transmit_IT。但结果反而是IT函数出现异常。


而HAL_UART_Transmit正常输出

有人遇到过此类情况吗?
不吝赐教。



回帖(2)

赖治添

2024-5-22 15:27:43
HAL_UART_Transmit_IT函数只是准备在中断中发送,调用完后就退出了,但是数据还没发送出去的。后面要等待发送完成才行。你那没等待肯定数据被冲掉了。在中断回调函数搞个标志,等在标志变化。
HAL_UART_Transmit是调用后会等待发送完成之后才退出的。
举报

陈博

2024-5-22 17:46:03
在FreeRTOS中,串口重定向使用HAL库函数中断出现异常的原因可能有以下几点:

1. 中断优先级设置不正确:在FreeRTOS中,中断优先级需要正确设置,以确保中断能够正确触发。请检查您的中断优先级设置是否正确。

2. 串口初始化不正确:请确保您的串口初始化代码是正确的,包括波特率、数据位、停止位和奇偶校验等参数。

3. 缓冲区管理问题:在使用HAL_UART_Transmit_IT函数时,需要确保传入的缓冲区大小和数据长度是正确的。如果缓冲区过小或数据长度不正确,可能会导致异常。

4. FreeRTOS配置问题:请检查您的FreeRTOS配置是否正确,包括堆大小、任务优先级等参数。

5. 硬件问题:如果以上原因都排除了,那么可能是硬件问题导致的异常。请检查您的开发板和连接的串口设备是否正常工作。

为了解决这个问题,您可以尝试以下步骤:

1. 检查中断优先级设置,确保它们是正确的。

2. 检查串口初始化代码,确保所有参数都设置正确。

3. 在使用HAL_UART_Transmit_IT函数时,确保传入的缓冲区大小和数据长度是正确的。

4. 检查FreeRTOS配置,确保所有参数都设置正确。

5. 如果问题仍然存在,尝试使用其他串口设备或开发板,以排除硬件问题。

希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分