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

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

过程:在使用串口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)
经验分享 程序员 微信小程序 职场和发展