最近调试F28335芯片的串口,需要一次性接收多个字节的数据,求大神们帮忙看一下我写的多字节接收代码是不是有什么问题
void SCI_B_ReceiveBytes(char *RX)
{
int i=0;
do
{
i++;
while(ScibRegs.SCIFFRX.bit.RXFFST !=1);
RX[i] = ScibRegs.SCIRXBUF.all;
}while( RX[i] != '\0');
}
i++ 放后面 放在赋值的后面 赋值完毕后再++
否则RX[0] 可能是初始化的0(\0)
/* 发送的字符串需要以尾零'\0'结束 否则不会停止接收(一直阻塞等待尾零) */
void sci_A_recv_String(){
char recv_buff[128] = {0};
int i = 0;
for(i=0; i<sizeof(recv_buff)/sizeof(char); i++){
while(SciaRegs.SCIFFRX.bit.RXFFST != 1);
recv_buff[i] = SciaRegs.SCIRXBUF.all;
if(recv_buff[i] == '\0'){
break;
}
}
sci_A_sendString("recv_buff[");
sci_A_sendString(recv_buff);
sci_A_sendString("]\r\n\0");
}
/* 发送的字符串需要以尾零'\0'结束 否则不会停止接收(一直阻塞等待尾零) */
void rs485_Recv_Str(void){
DELAY_US(2);
RS485_DIR_SET_L; // 拉低 接收消息
ScibRegs.SCICTL1.bit.SWRESET = 0;
DELAY_US(2);
ScibRegs.SCICTL1.bit.SWRESET = 1;
// Wait for inc character. Wait for RXRDY=1 for empty state
// Get string
int i = 0;
for(i=0; i<sizeof(recv_msg)/sizeof(char); i++){
while(ScibRegs.SCIRXST.bit.RXRDY != 1);
recv_msg[i] = ScibRegs.SCIRXBUF.all;
if(recv_msg[i] == '\0'){
break;
}
}
RS485_DIR_SET_H;
DELAY_US(5);
// 回显
rs485_SendString("your enter is:[\0");
rs485_SendString(recv_msg);
rs485_SendString("]\r\n\0");
}
https://blog.csdn.net/zxtwzl/article/details/89765852
楼主这个问题怎么解决的?