STM32
直播中

余温重顾

9年用户 881经验值
擅长:可编程逻辑 嵌入式技术 EMC/EMI设计
私信 关注
[问答]

如何解决STM32F4 HAL库串口同时收发代码卡死问题?

如何解决STM32F4 HAL库串口同时收发代码卡死问题?

回帖(1)

李红梅

2021-11-25 11:49:56
  过程:在使用串口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)
举报

更多回帖

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