cathy 在 提交
过程:在使用串口USART1接收数据转手用USART2发送,在发送的同时再将USART2接收的数据使用USART1进行发送,两个串口都为同时进行,在两个串口每个500ms传输一次时,可以正常传输一段时间之后卡死,但间隔20ms甚至更小时,直接卡死,使用标准库就不会出现这样的情况。
发送函数使用的 HAL_UART_Transmit();,接收使用中断接收,函数为HAL_UART_Receive();这两个函数都有__HAL_LOCK(huart);查阅资料发现,这是一个上锁,在发送时先上锁,发送完成后进行解锁,可能是发送刚上锁,此时接收中断到来,HAL_UART_Receive();函数内部__HAL_LOCK(huart);返回忙,则不能正常接收,而代码一直卡死在接收中断里,这也只是我的猜想。
解决方法:注释掉上锁函数,将下面代码屏蔽掉。
#define __HAL_LOCK(__HANDLE__) \ do{ \ if((__HANDLE__)->Lock == HAL_LOCKED) \ { \ return HAL_BUSY; \ } \ else \ { \ (__HANDLE__)->Lock = HAL_LOCKED; \ } \ }while (0) #define __HAL_UNLOCK(__HANDLE__) \ do{ \ (__HANDLE__)->Lock = HAL_UNLOCKED; \ }while (0)
版权声明:本文为CSDN博主「OH_PRO」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45053714/article/details/106566831