STM32F4 HAL库串口同时收发代码卡死问题

cathy的头像

过程:在使用串口USART1接收数据转手用USART2发送,在发送的同时再将USART2接收的数据使用USART1进行发送,两个串口都为同时进行,在两个串口每个500ms传输一次时,可以正常传输一段时间之后卡死,但间隔20ms甚至更小时,直接卡死,使用标准库就不会出现这样的情况。

“STM32F4

发送函数使用的 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