1.串口无法中断是由于第一次使用
- HAL_UART_Receive_IT(&huart6(uint8_t*)&My_Control.Data.SeriaReceivelData,sizeof(My_Control.Data.SeriaReceivelData));//使能串口接受中断
复制代码 之后没有在回调函数里再一次使用
2.串口无法使用,观察寄存器
发现RXNE标志位一直为1,数据一直无法读出
原因:
HAL库版本是:STM32Cube_FW_F4_V1.21.0。
发送函数和接收函数中,都出现了 __HAL_LOCK(huart)操纵。这实现了对端口的全局加锁。然而,此处却是欠思量:huart是全双工的,如果APP调用HAL_UART_Transmit_IT在tx操纵中实行了 __HAL_LOCK(huart)操纵,还没有实行 __HAL_UNLOCK(huart)时发生了rx接收中断,在HAL_UART_RxCpltCallback调用中重新设定HAL_UART_Receive_IT就会出现HAL_BUSY错误。
办理的办法:查抄HAL_UART_RxCpltCallback调用中重新设定HAL_UART_Receive_IT的返回值,若出现HAL_BUSY错误,进一步查抄huart->RxState是否忙,决定是否重新调用启动接收。
当然,不保举的做法是简单注释掉HAL库中HAL_UART_Receive_IT加锁语句也能正常工作。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |