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

2019-10-14 21:31发布

                                //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);
                                        }
                                }
                        }


0条回答

一周热门 更多>