OpenEdv-开源电子网

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

帮忙看下,HAL库串口中断怎么能接收到一串完整的数据帧

[复制链接]

12

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2016-9-6
在线时间
30 小时
发表于 2017-3-4 18:12:28 | 显示全部楼层 |阅读模式
1金钱
                                //data head
                                if(cntUsart1Rx < 2)  //data head 0XAA
                                {
                                        buffUsart1Rx[cntUsart1Rx++] = regDataUsart1Rx;    //cntUsart1Rx是我定义的全局变量,这段处理过程是 HAL_UART_RxCpltCallback,目前可以进中断,但是                                                                                                                   死活接收不到一段完整的数据帧,请大家看看这段有什么问题没,谢谢了、
                                        if(cntUsart1Rx == 2)
                                        {
                                                if((buffUsart1Rx[0] != 0xAA) || (buffUsart1Rx[1] != 0x55))
                                                {
                                                        cntUsart1Rx = 0;              //重新接收
                                                        HAL_UART_Receive_IT(&huart1,&regDataUsart1Rx,1);
                                                }
                                        }
                                }
                                //cmd & length
                                else if(cntUsart1Rx < 4)
                                {
                                        buffUsart1Rx[cntUsart1Rx++] = regDataUsart1Rx;
                                        if(cntUsart1Rx == 4)
                                        {
                                                if(buffUsart1Rx[3] < 235)
                                                {
                                                        dataLength = buffUsart1Rx[3] + 5;
                                                }
                                                else
                                                {
                                                        cntUsart1Rx = 0;  //exception handling
                                                        HAL_UART_Receive_IT(&huart1,&regDataUsart1Rx,1);
                                                }
                                        }
                                }
                                //data & checksum
                                else if(cntUsart1Rx >= 4)
                                {
                                        buffUsart1Rx[cntUsart1Rx++] = regDataUsart1Rx;
                                        if(cntUsart1Rx >= dataLength)
                                        {
                                                cntUsart1Rx = 0;
                                                buffUsart1RxComplete = 1;  //接收完成标志
                                                HAL_UART_Receive_IT(&huart1,&regDataUsart1Rx,1);
                                        }
                                }
                        }


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 16:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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