void Receiver_ustart_arry() //接收处理函数 { char rxData[64]; uint8_t rxIndex = 0; u8 x=0; u8 stbit=0; //printf("接收成功rxIndex2222=%d\r\n\r\n",rxIndex); // printf("开始前rxData=%s\r\n\r\n",rxData); do { while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); rxData[rxIndex] = USART_ReceiveData(USART1); rxIndex++; } while(rxData[rxIndex - 1] != '\n' && rxIndex < 64); //检测字符串以换行结尾且没有超出缓冲区 rxData[rxIndex] = '\0'; //printf("接收后rxData=%s\r\n\r\n",rxData); printf("接收前string1 %c rxData=%c\r\n\r\n",string1[0],rxData[0]); if(rxData[x]==string1[x]) { stbit+=1; } memset(rxData,' ',strlen(rxData)); printf("初始化rxData=%s\r\n\r\n",rxData); 为什么第二次接收到的字符串不一样,发送一样的数据 }
时间: 2024-03-28 09:39:54 浏览: 22
这段代码是一个串口接收处理函数,它会从 USART1 的接收缓冲区读取数据,并将其存储在 rxData 数组中。在读取数据的过程中,函数会检测是否读取到了换行符 '\n',如果读取到了则表示接收完成。
在接收完成后,函数会将 rxData 数组的末尾设置为 '\0',以便将其当作 C 语言字符串来处理。接着,函数会将 rxData 数组中的数据与另一个字符串 string1 进行比较,如果二者相同则 stbit 自增 1。
需要注意的是,rxData 数组在每次接收完成后都会被初始化为全空格,这可能会导致第二次接收到的字符串与第一次不同。为了解决这个问题,可以将 memset 函数的调用从 do-while 循环的最后移动到循环的开始处,这样每次接收数据之前都会将 rxData 数组清空。同时,需要确保 string1 数组中存储的字符串不会被修改,可以将其声明为 const char 类型。