D5Power 发表于 2017-11-16 21:11:17

关于HAL_UART_Receive_IT和HAL_UART_Transmit一起用的问题

波特率为4800.
在中断中调用HAL_UART_Receive_IT继续进行下次中断,除此之外没有任何其他代码。
然后在主循环里调用HAL_UART_Transmit发送数据,就有一定可能导致再也进不到中断里。这是为什么呢?

最开始我以为是因为波特率低,我设置的最大发送时间太短导致的。后来改长时间后,发现依然有几率出现这样的问题。

请问HAL_UART_Transmit是否会造成了串口被锁,或者处于繁忙状态,是否能够恢复?或者有什么方法可以检测

wenyangzeng 发表于 2017-11-16 21:43:13

本帖最后由 wenyangzeng 于 2017-11-16 21:44 编辑

主函数加入:__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
就可以不断进入中断了。

D5Power 发表于 2017-11-17 00:40:01

wenyangzeng 发表于 2017-11-16 21:43
主函数加入:__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
就可以不断进入中断了。

非常感谢!!今天太晚了。明天试一下!!

D5Power 发表于 2017-11-17 00:40:30

wenyangzeng 发表于 2017-11-16 21:43
主函数加入:__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
就可以不断进入中断了。

非常感谢!我明天一早就试一下!

D5Power 发表于 2017-11-17 00:41:33

非常感谢!我明天一早就试一下!

zero99 发表于 2017-11-20 13:56:19

D5Power 发表于 2017-11-17 00:41
非常感谢!我明天一早就试一下!

楼主问题解决了吗

D5Power 发表于 2017-11-20 21:58:33

zero99 发表于 2017-11-20 13:56
楼主问题解决了吗

解决了一部分。所以没有来回复下定论。目前定期的发送是没问题了。但是连续进行回复,如:
HAL_UART_Transmit(&huart2,p,12,0xffff);
HAL_UART_Transmit(&huart2,p,12,0xffff);

还是会出现卡死的情况。

wenyangzeng 发表于 2017-11-20 22:18:50

D5Power 发表于 2017-11-20 21:58
解决了一部分。所以没有来回复下定论。目前定期的发送是没问题了。但是连续进行回复,如:
HAL_UART_Tran ...

HAL_UART_Transmit(&huart2,p,24,0xffff);
一次发送24字节不就OK了?

D5Power 发表于 2017-11-21 16:36:13

wenyangzeng 发表于 2017-11-20 22:18
HAL_UART_Transmit(&huart2,p,24,0xffff);
一次发送24字节不就OK了?

感谢回复。我明白你的意思,每次循环,把要发送的数据,按照协议连成一个二进制流,然后一起发送就可以解决了。

我就是好奇,是不是这个问题无法解决。是由于单片机的处理速度决定的吗?

modu8888 发表于 2018-3-7 10:53:53

妈蛋我也遇到这个问题了。
页: [1] 2
查看完整版本: 关于HAL_UART_Receive_IT和HAL_UART_Transmit一起用的问题