OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2684|回复: 3

【求助】Hal库的串口通讯,数据接收死循环问题

[复制链接]

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
发表于 2020-3-20 11:46:29 | 显示全部楼层 |阅读模式
10金钱


HAL 库 串口3的使用,

  1. void USART3_Send_Data(u8 *buf, u8 len)
  2. {
  3.         HAL_UART_Transmit(&UART3_Handler,buf,len,1000);                                        //串口3发送数据
  4.         while(__HAL_UART_GET_FLAG(&UART3_Handler,UART_FLAG_TC)!=SET);        //等待发送结束
  5. }

  6. void USART3_IRQHandler(void)                       
  7. {
  8.         u32 timeout=0;
  9. #if SYSTEM_SUPPORT_OS                 //使用OS
  10.         OSIntEnter();   
  11. #endif
  12.        
  13.         HAL_UART_IRQHandler(&UART3_Handler);        //调用HAL库中断处理公用函数

  14.         timeout=0;
  15.         while (HAL_UART_GetState(&UART3_Handler) != HAL_UART_STATE_READY)//等待就绪
  16.         {
  17.                 timeout++;////超时处理
  18.                 if(timeout>HAL_MAX_DELAY) break;               
  19.         }
  20.          
  21.         timeout=0;
  22.         while(HAL_UART_Receive_IT(&UART3_Handler, (u8 *)Uart3_RxBuffer, UART3_RXBUFFERSIZE) != HAL_OK)//一次处理完成之后,重新开启中断并设置RxXferCount为1
  23.         {
  24.                 timeout++; //超时处理
  25.                 if(timeout>HAL_MAX_DELAY) break;
  26.         }
  27.        
  28. #if SYSTEM_SUPPORT_OS                 //使用OS
  29.         OSIntExit();                                                                                           
  30. #endif
  31. }
复制代码


串口3就一直发送127字节的数据,延时20ms以上
但是从PC的串口助手往 32 发送数据,就会导致死机,就一直卡在等待串口3状态的死循环里面

while (HAL_UART_GetState(&UART3_Handler) != HAL_UART_STATE_READY)//等待就绪
{
        timeout++;////超时处理
        if(timeout>HAL_MAX_DELAY) break;               
}



问下hal库能调用DMA,或者其他高效一点的使用例程吗,麻烦分享借鉴一下。。。谢谢各位大哥了

最佳答案

查看完整内容[请看2#楼]

【阿波罗F429串口3(PB10/PB11)通信测试程序(HAL库版本)】 http://www.openedv.com/forum.php?mod=viewthread&tid=283756 【阿波罗H743_串口DMA接收及发送+空闲中断】http://www.openedv.com/forum.php?mod=viewthread&tid=293299
茵茵猪头
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4307
金钱
4307
注册时间
2018-6-30
在线时间
808 小时
发表于 2020-3-20 11:46:30 | 显示全部楼层
【阿波罗F429串口3(PB10/PB11)通信测试程序(HAL库版本)】
http://www.openedv.com/forum.php?mod=viewthread&tid=283756
【阿波罗H743_串口DMA接收及发送+空闲中断】http://www.openedv.com/forum.php?mod=viewthread&tid=293299
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
 楼主| 发表于 2020-3-20 17:57:07 | 显示全部楼层
1208 发表于 2020-3-20 17:44
【阿波罗F429串口3(PB10/PB11)通信测试程序(HAL库版本)】
http://www.openedv.com/forum.php?mod=view ...

感谢🙏🙏🙏
茵茵猪头
回复

使用道具 举报

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
 楼主| 发表于 2020-8-21 17:50:17 | 显示全部楼层
实际就是这个超时处理有问题。HAL_MAX_DELAY 这个调小一点,或者直接注释掉这个超时处理
茵茵猪头
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 22:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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