您的位置:首页 > 财经 > 金融 > 网页制作公司_营销qq和企业qq区别_百度指数的基本功能_百度关键词排名工具

网页制作公司_营销qq和企业qq区别_百度指数的基本功能_百度关键词排名工具

2025/1/8 19:19:58 来源:https://blog.csdn.net/zxdzxdzzxd/article/details/144640978  浏览:    关键词:网页制作公司_营销qq和企业qq区别_百度指数的基本功能_百度关键词排名工具
网页制作公司_营销qq和企业qq区别_百度指数的基本功能_百度关键词排名工具

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加锁语句也能正常工作。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com