void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
uint8_t ucTemp;
if(huart ->Instance == USART1)
{
ucTemp = aRxBuffer;
Uart1_RxBuff[Uart1_Rx_Cnt++] = ucTemp;
if(Uart1_RxBuff[0]!=0xa3 )
{
Uart1_Rx_Cnt=0;
memset(Uart1_RxBuff, 0, sizeof(Uart1_RxBuff)); // 清空接收缓冲区
// 如果数据格式错误或数据测试失败,发送“ERROR”
char error[] = "ERROR1\r\n";
HAL_UART_Transmit(&huart1, (uint8_t*)error, strlen(error), 1000);
// globalError =1;
// HAL_UART_Receive_IT(&huart1, &aRxBuffer, 1);
// return;
}
// 检查是否是脉冲数指令
if (Uart1_Rx_Cnt == 4&& Uart1_RxBuff[0] == 0xA3&&Uart1_RxBuff[1] == 0x5a)
{
if (data_test1(Uart1_RxBuff) )
{
targetPulses =
((int16_t)Uart1_RxBuff[2] << 8) |
(int16_t)Uart1_RxBuff[3];
}
else
{
targetPulses=0;
// 如果数据格式错误或数据测试失败,发送“ERROR”
char error[] = "ERROR4\r\n";
HAL_UART_Transmit(&huart1, (uint8_t*)error, strlen(error), 1000);
memset(Uart1_RxBuff, 0, sizeof(Uart1_RxBuff));
Uart1_Rx_Cnt = 0;
// 在发送完ERROR后,检查接收缓冲区是否已清空,如果清空则重新启动接收中断
HAL_UART_Receive_IT(&huart1, &aRxBuffer, 1);//重新接受
}
Uart1_Rx_Cnt = 0;
}
HAL_UART_Receive_IT(&huart1,&aRxBuffer,1);
}
}
串口基本上指令都能完成 假如我发送A3 5A 4C 59 C3,不管我在59后面添加多少个字节,都是收到error1的错误指令,电机还能转动;我看Uart1_RxBuff【0】是C3;targetPulses是4c59;所以这种BUG我应该怎么避免,软件上逻辑哪里还需要添加或者修改的呢
本帖最后由 xbxdbd 于 2024-10-22 17:03 编辑引用: Jacktang 发表于 2024-10-23 07:27 确定是串口接收中断函数有一个bug么
?我的串口中断函数写的有问题?因为我测试基本的这个3个功能都能实现,就是会出现如果末尾添加多个字节,会被执行,并且会收到error1