STM32串口无法正常中断

打印 上一主题 下一主题

主题 807|帖子 807|积分 2421

1.串口无法中断是由于第一次使用
  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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表