有没有大佬,请教一下。
我用的是STC32做的ADC采样板,一个板子不够,做了四块,当做485子设备采集。
子设备平时不发数据,只有上位机发送MCUid的时候,才发出数据。
现在的情况是这样。一块板子,或者两块板子,传过来的数据都正常。
随便三块,四块连在一起的时候,上位机收到的数据就不完整了。
疑点:
1.我的485串口只连了A,B,没有接地,接地过来的数据乱码。
2.每个板子上都焊接了一块终端电阻,会不会有影响。
3.USB转485线必须接到上位机上,才能烧录MCU,不然就会通讯失败,或者时钟频率有误差。USB线接电脑上正常。

原理图:

pcb:

单片机程序:
for(i=0; i<7; i++)
{
printf("%02X",ID_ADDR[i]);
sprintf (temp_mcuid,"%02X",ID_ADDR[i]);
strcat(mcuid,temp_mcuid);
}
mcuid[15]='\0';
printf("MCUID:%s \r\n",mcuid);
while (1)
{
if(TX1_Cnt != RX1_Cnt) P32 = 1;
else
{
rec_buffer[0]='\0';
P32 = 0;
}
adc_result[0] = '\0';
delay_ms(10);
if((TX1_Cnt != RX1_Cnt) && (!B_TX1_Busy)) //收到数据, 发送空闲
{
P32 = 1;
sprintf (temp_buffer,"%c",RX1_Buffer[TX1_Cnt]);
strcat(rec_buffer,temp_buffer);
// SBUF = RX1_Buffer[TX1_Cnt];
// B_TX1_Busy = 1;
if(++TX1_Cnt >= UART1_BUF_LENGTH) TX1_Cnt = 0;
}
if(strcmp(rec_buffer,mcuid)==0)
{
for(i=0; i<15; i++)
{
delay_ms(10);
ADC_convert(i); //发送轮询通道AD值
}
printf("MCUID;%s;",mcuid);
printf("adc_result;%s",adc_result);
printf("\r\n");
}
}