stm32 RAW-TCP发送模拟量信号,上位机接收为乱码,求大神指导

2019-07-19 21:04发布

代码用的是原子精英版RAW-TCP的例程修改的,采集一个通道的模拟量,边采集,边发送,上位机是用C#编写的,通讯调试的时候显示为筹码。求大神指导,下面贴上代码。发送部分的代码,也就是lwIP tcp_poll的回调函数
//lwIP tcp_poll的回调函数
err_t tcp_client_poll(void *arg, struct tcp_pcb *tpcb)
{
        err_t ret_err;
        struct tcp_client_struct *es;
        es=(struct tcp_client_struct*)arg;
        if(es!=NULL)  //连接处于空闲可以发送数据
        {
                if(tcp_client_flag&(1<<7))        //判断是否有数据要发送
                {
                        int i;
                        for(i=0;i<K;i++)
                        {
                                adcvalude=Get_Adc(ADC_Channel_10);
                                es->p=pbuf_alloc(PBUF_TRANSPORT, sizeof(adcvalude),PBUF_POOL);        //申请内存
                          pbuf_take(es->p,(int*)adcvalude,sizeof(adcvalude));        //将tcp_client_sentbuf[]中的数据拷贝到es->p_tx中
                          tcp_client_senddata(tpcb,es);//将tcp_client_sentbuf[]里面复制给pbuf的数据发送出去
                        }                               
                        tcp_client_flag&=~(1<<7);        //清除数据发送标志
                        if(es->p)pbuf_free(es->p);        //释放内存
                }else if(es->state==ES_TCPCLIENT_CLOSING)
                {
                        tcp_client_connection_close(tpcb,es);//关闭TCP连接
                }
                ret_err=ERR_OK;
        }else
        {
                tcp_abort(tpcb);//终止连接,删除pcb控制块
                ret_err=ERR_ABRT;
        }
        return ret_err;
}



这个是我上位机C#的接收部分的代码
void TSReceive()
        {
            Control.CheckForIllegalCrossThreadCalls = false;
            aimSocket = mySocket.Accept();//服务端监听到的Socket为服务端发送数据的目标socket
            byte[] buffer = new byte[1024];
            while (true)
            {
                try
                {
                    int r = aimSocket.Receive(buffer);//接收到监听的Socket的数据
                    if (r == 0)
                    {
                        MessageBox.Show("连接断开");
                        break;
                    }

                    for (int i = 0; i < buffsize; i++)
                    {
                        //char srdsdf = Encoding.Default.GetChars(buffer, 0, r);
                        string strRec=Encoding.ASCII.GetString(buffer,0,r);
                        string strRec1 = Encoding.Unicode.GetString(buffer, 0, r);
                        string strRec2 = Encoding.UTF8.GetString(buffer, 0, r);
                        string strRec3 = Encoding.Default.GetString(buffer, 0, r);//原代码转换形式                    
                        string ss = aimSocket.RemoteEndPoint.ToString() + ":" + strRec + " ";

                    }

                    int j = 0;
                }
                catch
                { }
            }
        }



求教大神,我该怎么弄,调了很一天多了,试了很多种试,上下位机都改过,还是不行。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
正点原子
1楼-- · 2019-07-19 21:58
你先发送10个字节,比如1~10,然后上位机解析。能实现显示1~10,再去搞你的传输ADC值。  注意编码的不同,导致的数据差异,就可以解决你的问题。。
qjk9520
2楼-- · 2019-07-20 01:54
用网络调试助手勾上16进制后就显示有数据,可以看清楚数字,不勾的话,就是乱码了,不知道是什么东东

一周热门 更多>