找回密码
 立即注册
×

00:00:00

您有一张0.1元限时体验卡,马上领取获得VIP尊享特权。

用485通讯,收到的数据不完整是什么情况

2024-12-10 18:00 来自 houyawei 发布 @ 综合讨论

<p>有没有大佬,请教一下。</p>
<p>我用的是STC32做的ADC采样板,一个板子不够,做了四块,当做485子设备采集。</p>
<p>子设备平时不发数据,只有上位机发送MCUid的时候,才发出数据。</p>
<p>现在的情况是这样。一块板子,或者两块板子,传过来的数据都正常。</p>
<p>随便三块,四块连在一起的时候,上位机收到的数据就不完整了。</p>
<p>疑点:</p>
<p>1.我的485串口只连了A,B,没有接地,接地过来的数据乱码。</p>
<p>2.每个板子上都焊接了一块终端电阻,会不会有影响。</p>
<p>3.USB转485线必须接到上位机上,才能烧录MCU,不然就会通讯失败,或者时钟频率有误差。USB线接电脑上正常。<br />
<img src="data/attachment/forum/202412/10/180640u867bzc0wpw9zr6l.png" alt="image.png" title="image.png" /></p>
<p>原理图:</p>
<p><img src="data/attachment/forum/202412/10/175739f8v58josfamjz7uw.png" alt="image.png" title="image.png" /></p>
<p>pcb:</p>
<p><img src="data/attachment/forum/202412/10/175818q8f29q1m261l2q22.png" alt="image.png" title="image.png" /></p>
<p>单片机程序:</p>
<pre><code>for(i=0; i&lt;7; i++)
                {
                printf(&quot;%02X&quot;,ID_ADDR);
                sprintf (temp_mcuid,&quot;%02X&quot;,ID_ADDR);
                strcat(mcuid,temp_mcuid);
                }
                mcuid[15]='\0';
                printf(&quot;MCUID:%s \r\n&quot;,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) &amp;&amp; (!B_TX1_Busy))   //收到数据, 发送空闲
        {
                                                P32 = 1;
                                          sprintf (temp_buffer,&quot;%c&quot;,RX1_Buffer[TX1_Cnt]);
                                          strcat(rec_buffer,temp_buffer);
//            SBUF = RX1_Buffer[TX1_Cnt];
//            B_TX1_Busy = 1;
            if(++TX1_Cnt &gt;= UART1_BUF_LENGTH)   TX1_Cnt = 0;
                               
        }
               
                                if(strcmp(rec_buffer,mcuid)==0)
                                {
                                                for(i=0; i&lt;15; i++)
                                        {
                                                delay_ms(10);
                                                ADC_convert(i);                //发送轮询通道AD值
                                        }
                                                printf(&quot;MCUID;%s;&quot;,mcuid);
                                                printf(&quot;adc_result;%s&quot;,adc_result);
                                                printf(&quot;\r\n&quot;);
                        }
               
        }
</code></pre>
  • 最近查阅:

免责声明:

本平台旨在开源共享精神,请勿发布敏感信息,任何违法信息我们将移交公安机关;

上一篇: AI8051U芯片到了

下一篇: 求结构体讲解视频

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-9-9 13:35 , Processed in 0.087888 second(s), 50 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.