PCRS232通信不能接收数据

使用com口RS232连接电脑,想要读取数据,测试发现com口1,3之间存在50mv的电流,3,5间为ol,通过com线连接到PC机com口,却无法接收到数据,请问大神该怎么解决

0

1个回答

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MSCOMM通信控件接收数据
从串口接收数据,显示在Edit Box里: void CMyDlg::OnOnCommMscomm1() {        // TODO: Add your control notification handler code here        VARIANT variant_inp;        COleSafeArray safearray_inp;        LON...
安卓tcp通信,接收数据
try {     Socket s = new Socket("192.168.1.5", 8240);     InputStream inputStream = s.getInputStream();     DataInputStream input = new DataInputStream(inputStream);     byte[] b =...
TCP通信无法接收数据
TCP通信无法接收数据,代码如下:rnrn /// rn /// 声明获取事件的委托rn /// rn private delegate void SynReceive();rn /// rn /// 线程接收函数rn /// rn rn public void Receive()rn rn rn tryrn rn string strRcv = "";rn // 声明字节数组,一次接收数据的长度为1024字节 rn byte[] RcvBuffer = new byte[1024];rn //循环读取,直到接收完所有数据 rn while (true)rn rn int bytes = socket.Receive(RcvBuffer, RcvBuffer.Length, 0);rn //读取完成后退出循环 rn if (bytes <= 0)rn break;rn //将读取的字节数转换为字符串 rn strRcv += Encoding.ASCII.GetString(RcvBuffer,bytes,0);rn rn if (!txtRcv.InvokeRequired)rn rn txtRcv.AppendText(strRcv);rnrn rn elsern rn txtRcv.Invoke(new SynReceive(Receive));rn rnrn rn rn rn catch (Exception ex)rn rn MessageBox.Show(ex.Message);rn rnrn rn
mscomm可以接收数据 serialport不能接收数据
下位机用485口与上位机通信,485转232,232转USB线数据线与电脑相连rnrn232转USB线有两种,一种是优越者的数据线,一种是普通的数据线,rnrn之前代码用的是serialport进行串口通信,发现普通的数据线接收不到数据,只能用优越者的数据线可以接收到数据,rnrn我改用mscomm32进行串口通信时,这两种线都可以接收到数据,rnrnserialport串口通信时,对数据线有要求吗, 还是我的代码有问题,大家帮我看一下rn下面只是做了一个例子,代码不太完美rnrnrn public partial class Form1 : Formrn rn public SerialPort Sp;rnrn public Form1()rn rn InitializeComponent();rn Sp = new SerialPort();rn rnrn private void axMSComm1_OnComm(object sender, EventArgs e)rn rnrn axMSComm1.Height = 12;rn object ret;rn ret = axMSComm1.Input;rn rnrn private void mscomm_btn_Click(object sender, EventArgs e) //用mscomm通信rn rn if( axMSComm1.PortOpen==false)rn rn axMSComm1.CommPort = 9;rn axMSComm1.Settings = "9600,n,8,1";rn axMSComm1.InBufferSize = 1024;rn axMSComm1.OutBufferSize = 1024;rn axMSComm1.InputMode = MSCommLib.InputModeConstants.comInputModeBinary;rnrn axMSComm1.InputLen = 0;rnrn axMSComm1.PortOpen = true;rn rn byte[] TT=new byte[6];rn rn TT[0]=1;rn TT[1]=3;rn TT[2]=0;rn TT[3]=0;rn TT[4]=241;rn TT[5]=216;rn //1,3,0,0,241,216rn axMSComm1.Output = TT;rn rnrn private void serialBTN_Click(object sender, EventArgs e) //用serialport通信rn rn byte[] TT = new byte[6];rnrn TT[0] = 1;rn TT[1] = 3;rn TT[2] = 0;rn TT[3] = 0;rn TT[4] = 241;rn TT[5] = 216;rn rn if (Sp.IsOpen == false)rn rnrn rn Sp.PortName = "COM9";rnrn Sp.BaudRate = 9600;rn Sp.Parity = Parity.None;rn Sp.DataBits = 8;rn Sp.StopBits = StopBits.One;rn Sp.Open();rn rn Sp.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(Sp_DataReceived);rn rn Sp.DiscardInBuffer();rn Sp.Write(TT, 0, TT.Length);rn rn public void Sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)rn rn int lenTemp = 0;rn int dataLen;rn byte[] input = new byte[70];rnrn if (Sp.IsOpen == false)rn return;rnrn input = new byte[70];rnrn lenTemp = Sp.Read(input, 0, 70);rn Sp.DiscardInBuffer();rn rn rn rn
C# udp 不能接收数据
发送没有问题,就是接收不到内容,就在哪里卡住了,非常郁闷,希望大虾能帮我一下,先谢谢了!rn源码:rn[code=C#]rnusing System;rnusing System.Collections.Generic;rnusing System.ComponentModel;rnusing System.Data;rnusing System.Drawing;rnusing System.Text;rnusing System.Windows.Forms;rnusing System.Net.Sockets;rnusing System.IO;rnusing System.Net;rnnamespace UDPrnrn public partial class Form1 : Formrn rn rnrn public Form1()rn rn InitializeComponent();rn rn IPEndPoint ipEndPoint;rn //发送rn private void button1_Click(object sender, EventArgs e)rn rn UdpClient udpClient;rn udpClient = new UdpClient(12345);rn ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 60000);rn byte[] mybyte = Encoding.Default.GetBytes("nihao");rn udpClient.Send(mybyte, mybyte.Length,ipEndPoint);rnrn rn //接收rn private void button2_Click(object sender, EventArgs e)rn rn MessageBox.Show("1");rn UdpClient udpServer;rn // IPEndPoint ipEndPoint;rn udpServer = new UdpClient(12355);rn MessageBox.Show("2");rn if (udpServer != null)rn rn MessageBox.Show("bukong");rn rn ipEndPoint = new IPEndPoint(new IPAddress(0),0);rn MessageBox.Show("3");rn byte[] data = udpServer.Receive(ref ipEndPoint);//执行到这步就卡住了rn MessageBox.Show("4");rn MessageBox.Show ( Encoding.Default.GetString(data));rn MessageBox.Show("5");rnrn rn rnrn[/code]
socket 为什么不能接收数据?
Post=ResvBuffer+ResvLen;rn tResvLen=recv(Socket,Post,MaxResvMessageLen-ResvLen,0);rn IncResvLen(tResvLen);rnrn Accept(...)后。。。 rn tResvLen=recv(Socket,Post,MaxResvMessageLen-ResvLen,0);rn 没有问题。。tResvLen=-1rn 客户端发送数据后。。。rn 不能从 tResvLen=recv(Socket,Post,MaxResvMessageLen-ResvLen,0);退出rn ????rnrnrnrn rnrn
VC串口不能接收数据
使用串口调试助手再用程序就可以,直接使用的时候不能接收数据,不知道是不是配置的问题,下面是配置代码rnhCom=CreateFile(m_Com,rn GENERIC_READ|GENERIC_WRITE,rn 0,rn NULL,rn OPEN_EXISTING,rn FILE_ATTRIBUTE_NORMAL,rn NULL);rn if(hCom==(HANDLE)-1)rn rn AfxMessageBox(_T("打开失败"),MB_OK,NULL);rn return;rn rnrn rn AfxMessageBox(_T("打开成功"),MB_OK,NULL);rn COMMTIMEOUTS TimeOuts;rnrn TimeOuts.ReadIntervalTimeout=0xFFFFFFFF;rn TimeOuts.ReadTotalTimeoutMultiplier=0;rn TimeOuts.ReadTotalTimeoutConstant=0; //读超时rnrn TimeOuts.WriteTotalTimeoutMultiplier=0;rn TimeOuts.WriteTotalTimeoutConstant=0;rn SetCommTimeouts(hCom,&TimeOuts); //写超时rnrn DCB dcb;rn GetCommState(hCom,&dcb);rn dcb.DCBlength=sizeof(DCB);rn dcb.BaudRate=115200; //波特率为115200rn dcb.ByteSize=8; //每个字节有8位rn dcb.Parity=NOPARITY; //无奇偶校验位rn dcb.StopBits=1; //1个停止位rn //dcb.EvtChar = 'q';rn dcb.fDtrControl=1;rn dcb.fRtsControl=1;rn SetCommState(hCom,&dcb);rn SetupComm(hCom,1024,1024);rn SetCommMask(hCom, EV_RXCHAR | EV_CTS | EV_DSR);rn rn PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
Android bluetooth 不能接收数据
我用Android手机和蓝牙模块HC-05通信,手机发送数据都正常,但总是接收不到模块发来的数据,测试发现线程中的run()函数好像没执行,即没有显示这条信息Log.d("run", "have data recv");,请问怎么回事呢?rnrn[code=java]try rn rn socket.connect();rn Toast.makeText(MainActivity.this, "connect success", Toast.LENGTH_SHORT).show();rn rn dataThread = new DataThread(socket); //创建线程rn dataThread.start(); rn rn catch (IOException e)rn rn Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();rn return;rn rnrnprivate class DataThread extends Thread //数据接收和发送线程rn rn private final BluetoothSocket mSocket;rn private final InputStream mInputStream;rn private final OutputStream mOutputStream;rn rn public DataThread(BluetoothSocket socket)rn rn mSocket = socket;rn InputStream tempInputStream = null;rn OutputStream tempOutputStream = null;rn rn try rn rn tempInputStream = socket.getInputStream();rn tempOutputStream = socket.getOutputStream();rn rn catch (IOException e) rn rn Toast.makeText(MainActivity.this, "get input and output stream error", Toast.LENGTH_SHORT).show();rn rn rn mInputStream = tempInputStream;rn mOutputStream = tempOutputStream;rn rn rn public void run() //接收数据rn rn Log.d("run", "have data recv");rn rn byte[] buffer = new byte[1024];rn int nRead;rn while (true)rn rn try rn rn nRead = mInputStream.read(buffer); rn nRecvNum += nRead;rn TextView textViewRecv = (TextView)findViewById(R.id.textViewRecv);rn textViewRecv.setText(Integer.toString(nRecvNum));rn rn catch (IOException e)rn rn Toast.makeText(MainActivity.this, "receive data error", Toast.LENGTH_SHORT).show();rn break;rn rn rn rn rn public void write(byte[] bytes) //发送数据rn rn try rn rn mOutputStream.write(bytes);rn nSendNum += bytes.length;rn TextView textViewSend = (TextView)findViewById(R.id.textViewSend);rn textViewSend.setText(Integer.toString(nSendNum));rn rn catch (IOException e) rn rn Toast.makeText(MainActivity.this, "send data error", Toast.LENGTH_SHORT).show();rn rn rn rn public void cancel()rn rn try rn rn if (mSocket.isConnected())rn rn mSocket.close();rn rn rn catch (IOException e) rn rn //rn rn rn rnrn[/code]
咨询:Socket不能多次接收数据
最近用socket写了一个异步接收服务器端程序,修改于MSDN上的示例程序。客户端的Socket要求处于常开状态,给服务器发消息时第一次正常接收,但第二次则收不到了,如果将客户端Socket断开再重新连接,即可发送成功,但也是只能发一次。请问在客户端和服务器端Socket不断开的状态下,怎样连续接收数据,谢谢。rn问题解决100分送上。。。
为什么NMUDP不能正常接收数据
rnrn从串口读入数据,然后用UDP报文发送rnrn测试阶段,自发自收rnrn可以发现收到的报文都是错误的,经检查发现rnrn在程序执行到rnNMUDP_OnDataReceived的时候rnrn显示的读入的NumberBytes居然是-1rnrn这是怎么回事呢?rnrn谢谢
NRF24L01 怎么不能连续接收数据?
问题:如果将SetRX_Mode(),放在while循环之外 只能接收一个数据, 且就是在上电那一刻。 求同行帮忙分析一下,rn/***************主程序******************/rnvoid main(void)rnrn unsigned char tf =0;rn unsigned char TxBuf[32]="WangChengJunWangChengJunWangChen"; // rn unsigned char RxBuf[32]=0;rn UART_init(); rn init_NRF24L01();rn //SetTX_Mode(); rn while(1)rn rn [color=#FF0000]SetRX_Mode();[/color] //如果将次语句放在while循环之外就不能连续接收数据,只会在上电接收一次数据 rn// nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer datarn Delay(6000);rn led = ~led; rn if(nRF24L01_RxPacket(RxBuf))rn rn RxBuf[31] ='\0';rn Printf(RxBuf); // 串口发送数据rn BufSet(RxBuf,32,0); //清除缓存区rn rn rnrnrn/*****************************************************************************************************/rnvoid SetRX_Mode(void)rnrn CE=0;rn SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH); //选择通道0的有效数据宽度 rn SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收rn CE = 1; rn inerDelay_us(130);rnrn/****************************************************************************************************/rn/*函数:void SetTX_Mode(void)rn/*功能:数据发送配置 rn/****************************************************************************************************/rnvoid SetTX_Mode(void)rnrn CE=0;rn SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写本地地址rn SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次 rn SPI_RW_Reg(WRITE_REG+CONFIG,0x0e); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断rn CE = 1; rn inerDelay_us(130); rnrn//****************************************************************************************rn/*NRF24L01初始化rn//***************************************************************************************/rnvoid init_NRF24L01(void)rnrn inerDelay_us(100);rn CE=0;//待机模式Ⅰ (写寄存器之前一定要进入待机模式或掉电模式)rn CSN=1;rn SCK=0;rn IRQ=1; rn rn SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址rn SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 频道0自动 ACK应答允许 rn SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道0,如果需要多频道可以参考Page21 rn SPI_RW_Reg(WRITE_REG + RF_CH,40); // 设置信道工作为2.4GHZ,收发必须一致rn SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f); //设置发射速率为1MHZ,发射功率为最大值0dBrnrn CE = 1;rnrn/******************************************************************************************************/rn/*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)rn/*功能:数据读取后放如rx_buf接收缓冲区中rn/******************************************************************************************************/rnunsigned char nRF24L01_RxPacket(unsigned char* rx_buf)rnrn unsigned char revale=0;rn sta=SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况rn SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志rn if(RX_DR) // 判断是否接收到数据rn rn CE = 0; //SPI使能rn SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO bufferrn SPI_RW_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器 rn revale =1; //读取数据完成标志rn rn return revale;rnrn/***********************************************************************************************************rn/*函数:void nRF24L01_TxPacket(unsigned char * tx_buf)rn/*功能:发送 tx_buf中数据rn/**********************************************************************************************************/rnvoid nRF24L01_TxPacket(unsigned char * tx_buf)rnrn CE=0; //StandBy I模式 rn SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据 rn CE=1; //置高CE,激发数据发送 rn while(IRQ!=0);//等待发送完成rn sta=SPI_Read(STATUS); //读取状态寄存器的值 rn SPI_RW_Reg(WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志rnrn inerDelay_us(10);rnrnrn/*****************************************END FILE***************************************************/
超级魔电600 不能接收数据???
通过电话线拨号建立两个modem之间的链接,一个modem是笔记本自带的modem,一个是超级魔电600.但是连接建立之后,超级魔电600只能收到modem返回的结果码,接收不到对方发送的数据。但是笔记本的modem可逆接收到超级魔电600发送的数据。rn求原因?????
Select模型只接收数据,不能发送数据
while(TRUE)rn rn printf("nRetCode!=SOCKET_ERROR) while(TRUE)\t");rn FD_SET writefd;rn FD_SET readfd;rn FD_ZERO(&writefd);rn FD_ZERO(&readfd);rn FD_SET(ServerSocket,&writefd);rn FD_SET(ServerSocket,&readfd); rn nRetCode=select(0, &writefd, &readfd, NULL, NULL);rn if(SOCKET_ERROR==nRetCode)rn rn printf("Select错误");rn return nRetCode ;rn rn else if(nRetCode>0)rn rn if(FD_ISSET(ServerSocket,&writefd))rn rn printf("writefd启动");rn if(FALSE ==SendData(ServerSocket))//发送数据接收数据rn rn printf("SendData(ServerSocket)未成功");rn // RecvData(ServerSocket);rn return 0;rn rn rn if(FD_ISSET(ServerSocket,&readfd)) rn rn printf("readfd启动\n");rn if (FALSE == RecvData(ServerSocket)) //接收数据rn rn printf("RecvData(ServerSocket)失败");rn // RecvData(ServerSocket);rn return 0;rn rn rn
PHPStrom _POST不能接收数据的问题
参考:http://blog.csdn.net/muzilinxi90/article/details/52458511 主要是phpstrom内部端口的问题,通常直接使用ps运行,会显示63342端口,(URL是localhost:63342/这样的形式)。 如果不将工程放在wamp/www下,保持原有工作目录的话,可以考虑以下方式: 在Apache中 添加alias 例如:将http:
superSocket不能接收数据的原因之一
在用 网络调试助手 或其它工具软件 向 supersocket发送字符串时,                在字符串的结尾一定要加上回车换行符,否则不能接收           某些采集器发送的字符串可能也存在这样的问题,因此           一定要加上回车换行符
计算机通信数据链路层-完整无误接收数据
理论部分 计算机通信基础 广域网 物理层 数据链路层 网络层 传输层 应用层详细讲解,让你高明计算机通信过程,使用的协议,进而掌握计算网络安全。
win32 TCP通信连续发送接收数据的问题
我自己封装了一个mysocket类,里面用的是win32 的api进行socket,是TCP协议通信。这个类的作用就是作为一个客户端,连到指定的服务器上,然后跟服务器进行数据交互。按照TCP客户端的通信步骤,本来应该是send一次之后就要调用一次recv。我觉得这样很麻烦,就自己做了一个线程,线程里有一个死循环,一直接收数据。问题就是,我下一次send的时候需要先收到上一次的回应数据,然后根据解析的结果来确定要发什么消息。我尝试过在接收的子线程里用postThreadMessage 来实现,但是这个时候主线程会卡死在getmessage这里。请问一下有比较好的方法解决这个问题吗
TCP通信,recv接收数据需要注意的地方?
        关于TCP通信中,recv函数接收数据大小的问题,之前一直觉得,只要是客户端与服务器一发一收的模式,那么recv接收的数据大小一定是函数中指定的数据大小。这次写了客户端与服务器通信的程序,在这上面栽了一个大跟斗。        程序功能如下:通过客户端与服务器的通信,实现文件的传输,客户端每次发送1k的数据,服务器每次接收1k大小数据并将数据存储到文件中,就这样一发一收的循环发送接...
Socket实现通信,实时接收数据以及发送数据
公司要做一个视频采集socket通信的项目,第三方服务端已经提供好了服务,让我们对接,但是目前ui还没有,所以就暂时先自己写个小demo测试一下数据连接。 ![22.png](https://upload-images.jianshu.io/upload_images/2904860-9f2b4eb8af7b98aa.png?imageMogr2/auto-orient/strip%7Cimage...
C#串口接收数据-根据特定通信协议解析
string strs3 = null;         //接收数据并显示函数:可用:测试的接收数据为:0x01 0x02(镇头) 0x02(长度)  0x03(帧尾、即校验位) 0x34 0x05(数据):这是硬件发送过来的测试数据         private void DataReceivedHandler(object sender, SerialDataReceivedE
UDP通信,如何实现不停的接收数据
服务器端发送数据代码:rn[code=C#] IPAddress broadcast = IPAddress.Parse(ip);rn IPEndPoint ep = new IPEndPoint(broadcast, ipPort);rn udpClent.Connect(ep);rnrn byte[] sendData = getSendData(data, dateTime);rn sendData[1] = des;rn udpClent.Send(sendData, 35);rn byte[] temp = new byte[10] 0x7F, 0x01, 0xE1, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 ;rn temp[1] = des;rn getBCD(dateTime).CopyTo(temp, 5);rn udpClent.Send(temp, 10);[/code]rn客户端接收代码[code=C#]rn private void reciveButton_Click(object sender, EventArgs e)rn rn tryrn rn IPEndPoint ep = new IPEndPoint(IPAddress.Any, int.Parse(textPort.Text));rn UdpClient client = new UdpClient(ep);rn UdpState state = new UdpState();rn state.e = ep;rn state.u = client;rn client.BeginReceive(new AsyncCallback(fuc), state); //首次触发接收数据方法rn reciveButton.Enabled = false;rn rn catch (Exception ex) rn rn MessageBox.Show(ex.Message);rn rn rnrn private void fuc(IAsyncResult ar)rn rn UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u;rn IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).e;rnrn Byte[] reDatas = u.EndReceive(ar, ref e);rnrn if (reDatas.Length > 0)rn rn R = new byte[reDatas.Length];rn R = reDatas;rn if (recClient == null || recClient.IsAlive == false)rn rn recClient = new Thread(showRec);rn recClient.Start();//显示到界面rn rn rn u.BeginReceive(new AsyncCallback(fuc), ar.AsyncState);rn rn delegate void wakeShow();rn private void showRec() //委托执行函数rn rn if (!textMessage.InvokeRequired)rn rn tryrn rn for (int i = 0; i < R.Length; i++)rn rn textMessage.AppendText(R[i].ToString("X2"));rn rnrn textMessage.AppendText("\n");rn rn catch rnrn textMessage.Refresh();rn rn elsern rn wakeShow show = new wakeShow(showRec);rn Invoke(show);rn rn rn[/code]rn这样写,首先局域网通信时成功的,但是,上面的服务器端,连着发了两条数据过来,但是客户端显示的接收值接收了后面那条数据。调试发现其实 Byte[] reDatas = u.EndReceive(ar, ref e);rn这里接收是接收到了两次,但是,到下面用线程显示的时候 就只显示了一次
红外通信(遥控)--接收数据---串口显示
红外通信(遥控)--接收数据---串口显示,单片机上操作的,真实有效。
使用socket的tcp方式通信接收数据的问题
在使用socket的tcp方式接收数据时,发现有些接收到的数据是发送端两次消息内容合并后的结果。哪位知道产生这种情况的原因是什么?tcp方式是否会经常导致该问题?
stm32 做rs485通信,MCU可以接收数据,但不能发数据?stm32 做rs485通信,MCU可以接收数据,但不能发数据
#include "stm32f10x_lib.h"rn #include"delay.h"rnrn /*rn RS485_TX----PC10-----USART3_TXrn RS485_RX---- PC11-----USART3_RXrn RS485_DIR----PC12rn */rn#define RS485_DIR_TX GPIO_SetBits(GPIOC, GPIO_Pin_12)rn#define RS485_DIR_RX GPIO_ResetBits(GPIOC, GPIO_Pin_12)rnrnrnvoid USART3_Configuration(void)rnrn USART_InitTypeDef USART_InitStruct;rn GPIO_InitTypeDef GPIO_InitStructure;rnrn GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);rn //RS485_DIR--PC12rn GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;rn GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;rn GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出;rn GPIO_Init(GPIOC, &GPIO_InitStructure);rnrn //RS485_TX--PC10rn GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;rn GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;rn GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;rn GPIO_Init(GPIOC, &GPIO_InitStructure);rnrn //RS485_RX--PC11rn GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;rn GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;rn GPIO_Init(GPIOC, &GPIO_InitStructure);rnrnrn USART_StructInit(&USART_InitStruct);//将结构体设置为缺省状态rn USART_InitStruct.USART_BaudRate=9600;//波特率设置为9600rn USART_InitStruct.USART_WordLength=USART_WordLength_8b;//一帧数据的宽度设置为8bitsrn USART_InitStruct.USART_StopBits=USART_StopBits_1;//在帧结尾传输1个停止位rn USART_InitStruct.USART_Parity=USART_Parity_No;//奇偶失能模式,无奇偶校验rn USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//硬件流控制失能rn USART_InitStruct.USART_Mode=USART_Mode_Tx |USART_Mode_Rx; //使能发送/接收使能rn USART_Init(USART3, &USART_InitStruct);rn USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//打开串口3接受中断rn //USART_ITConfig(USART3, USART_IT_TXE, ENABLE);//打开串口1的中断响应函数rn USART_Cmd(USART3, ENABLE);//打开USART1rn rn USART_ClearFlag(USART1,USART_FLAG_TC);//清除发送完成标志位rn rn RS485_DIR_RX;rnrnrnvoid USART485_SendChar(u8 data)rnrn RS485_DIR_TX;rn delay_ms(1);rn USART_SendData(USART3,data);rn while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);rn delay_ms(1);rn RS485_DIR_RX;rnrn程序及电路图截图如下:rn[img=https://img-bbs.csdn.net/upload/201305/18/1368843241_202073.png][/img]rn[img=https://img-bbs.csdn.net/upload/201305/18/1368843254_199154.png][/img]rn[img=https://img-bbs.csdn.net/upload/201305/18/1368843270_771805.png][/img][img=https://img-bbs.csdn.net/upload/201305/18/1368843286_634243.png][/img]rn
S3C44B0X的网卡不能通信
我用是S3C44B0X(ARM7 TDMI)的板子,网卡的型号是RTL 8019AS,想搭建一个开发环境,将uclinux烧写到板子上之后可以正常运行,但网络却无法正常工作,具体现象如下:rn1. uclinux中执行ifconfig -a命令能够看到eth0网络接口。rn2. 目标机和开发机之间相互都ping不通对方(注:开发机中已经关闭了防火墙)。目标机在执行ping时屏幕提示为:rn NETDEV WATCHDOG: eth0: transmit timed out...rn3. 目标机能够ping通自己。rn4. 用bootloader能够通过网络下载文件,因此网卡和网线连接应该不会有问题。rn5. 用cat /proc/interrupts命令发现网卡中断号在驱动程序中被配置为24号,并且不论怎样ping,24号中断次数始终是1次。rn6. 查阅用户手册,网卡中断号应为EXTINT1,而驱动程序源码中配置的中断号是24。不知道这两者之间是否存在映射关系。为保险起见修改了网卡驱动程序源码中的中断号(没有依据,随便试了几个),现象依旧。(注:uclinux中用修改后的ne2000网卡驱动程序来驱动RTL 8019AS)rn7. RTL 8019AS网卡可以工作在8位或16位模式。查阅用户手册,网卡用16位数据总线传输数据,因此猜测应以16位模式工作。结合网上查阅的资料,在16位模式下网卡的基地址应为0x60000300。查看驱动程序源码,发现寄存器基地址配置为0x60000000,将其改为0x60000300后现象依旧。rn8. 从网上下载了另一个驱动程序的源码,编译后再烧写到板子上,现象和原先的驱动程序类似。rnrn在网上进一步查阅一些资料,对问题原因有三点猜测:rn1. 网卡中断的触发方式好像有高、低电平或上升沿、下降沿的区别,但不知道应该怎样修改源代码。rn2. 中断向量表的配置是否存在问题,但网卡既然触发了一次中断,似乎这也不构成问题。不知道在源码中如何检查中断向量表的配置。rn3. bootloader能够正常使用网络下载文件,bootloader与uclinux内核对网卡中断的处理是否存在冲突。rnrn不知道这种情况该怎样解决?下面附上板子附带的bootloader和网上下载的网卡驱动程序源代码,请大家帮忙看一下,谢谢!rnrnrtl8019.rar : http://pan.baidu.com/share/link?shareid=256930&uk=2133253253rnuClinux-bios.rar : http://pan.baidu.com/share/link?shareid=257081&uk=2133253253
不能和DNS服务器通信
vista系统,自动获取IP为169开的的字段, 手动设置IP后,提示不能和DNS服务器通信?DNS地址是设置和其他人的一样
TClientSocket 在win2000下不能通信!!!
我用TClientSocket作为客户端通信组件写了一个程序,在xp和2003下都能正常通信,可是在2000下不起任何作用,按正常来说当我把TClientSocket的Active设为true时,组件会自己连接服务器,并且在连接上后触发他的OnConnect事件,在XP和2003下都能正常触发,但是2000下没有反应,不知是怎么造成的,如何解决?静待高手指点
mfc 聊天程序 不能通信
麻烦帮我看看哪里出错了 由于是新手不知道论坛上 怎么传附件 只能把我的代码上传的资源区 如果有别的方法求叫我怎么上传附件 求好心人帮忙谢谢了 [img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif][/img]rn这是代码的连接:rnhttp://download.csdn.net/detail/luyan1235/5306916
路由器不能路由的通信
我们学校上网前要经锐捷的验证系统验证,我想用路由器共享,但不行。有没有人之但怎么办?
LWIP 公网不能通信,局域网可以通信。
各位大神,rn遇到一个非常奇怪的问题,rn1、LWIP在局域网路由器中转可以通信rn2、LWIP设备与PC直接连接可以通信rn[color=#FF0000]3、LWIP挂公网上面不能通信。[/color]rnrn在公网状态:LWIP协议栈设备做好了端口映射PC机也做了端口映射,rn对比机(跑不同的软件)能够通信。rnrn并且LWIP不能ping通,提示TIMEOUT。rn而对比机能够ping。rnrn帮忙分析解释一下情况。
mscomm控件为何有时不能接收数据
我的程序在打开串口后,有时候会无法接受数据,我用debug.print mscomm1.inbuffercount查看了一下,缓存区里字符为0,此时端口确实是打开的,而且单片机也确实在发送数据,但就是不能接收,然后把串口关掉,再打开,又可以接收数据了,不知道是何故.而且我试了一下,用别的程序,也接收这个单片机数据,把settings设置成 [4800,n,8,2]就不会出现那种出现,而一旦设置成[57600,n,8,1]就会出现跟我的程序一样状况,声明一下,波特率设置应该没问题,因为数据读取是正确的,而且用串口工具调试都能正常读取,各位大虾有碰到过这个情况吗?rn 另外settings[57600,n,8,1]的停止位1占用57600中的一位吗?或者说波特率57600每秒钟就发送57600个有效位呢?rn
vxworks 组播不能接收数据,在线等....
代码如下:rn struct sockaddr_in addrHost;rn struct sockaddr_in addrFrom;rn ULONG l;rn SOCKET s ;rn fd_set ReadSet ;rn struct ip_mreq mcast;rn int width = 0 ;rn struct timeval timeOut ;rn char netReceiveBuf[NET_BUF] ;rn ULONG sourceIp ;rn USHORT sourcePort ;rn char sendBuf[]= "this is a test" ;rn int addrSize = sizeof(addrFrom) ;rn rn s = socket(AF_INET, SOCK_DGRAM, 0);rn if(s == ERROR)rn return ;rnrn timeOut.tv_sec = 10 ;rn timeOut.tv_usec = 0 ;rnrn memset(&addrHost, 0, sizeof(struct sockaddr_in));rn rn addrHost.sin_family = AF_INET;rn addrHost.sin_port = htons(7777);rn addrHost.sin_addr.s_addr = inet_addr("192.100.89.185");rn rn if(bind(s, (struct sockaddr*)(&addrHost), sizeof(addrHost)) < 0)rn rn close(s) ;rn return ;rn rn rnrn mcast.imr_multiaddr.s_addr = inet_addr("224.1.0.1");rn mcast.imr_interface.s_addr = inet_addr("192.100.89.185");rn rn if (setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP,rn (char *)&mcast, sizeof(mcast)) == ERROR)rn rn printf("setsockopt(IP_ADD_MEMBERSHIP) failed:n");rn close(s);rn rn return ;rn rnrn FD_ZERO(&ReadSet) ;rn FD_SET(s , &ReadSet) ;rn width = s ;rn width++ ;rnrn if (select(width , &ReadSet , NULL , NULL , &timeOut) == 0) rn rn perror("Ssmr_CarCommunication:select timeOut , carNet error. \n");rn close(s);rn return ;rn rnrn memset(netReceiveBuf , 0 , NET_BUF) ;rn if (FD_ISSET(s , &ReadSet))rn rn recvfrom(s, netReceiveBuf , NET_BUF , 0 , (struct sockaddr *)&addrFrom , &addrSize) ;rn rn rnrn if (setsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP,rn (char *)&mcast, sizeof(mcast)) == ERROR)rn rn printf("setsockopt(IP_ADD_MEMBERSHIP) failed:n");rn close(s);rn rn close(s) ;rnrnrnrn程序运行到select时就停止,等待timeOut之后就返回。说明socket没有接收到数据。请问vxworks组播接收数据还要进行什么设置??rn另,利用此socket可以发送数据到组播地址。rn谢谢。
我的tcp接收数据为什么不能持续
我做了个tcp接收和发送的小程序,接收程序总是接收一次,要close,不然就一直白屏,看不到接收的数据,程序如下,帮忙分析下:rnrnsend:rn Socket s;rn System.Net.Sockets.TcpListener listener = new TcpListener(8005); rnrnrn private void button1_Click(object sender, EventArgs e)rn rn byte[] bytes = new byte[256];rn int bytelen = 0;rn string a = "aaa"; rnrnrn s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);rn IPAddress ipAddress = IPAddress.Parse("192.168.0.198"); //Dns.Resolve("www.contoso.com").AddressList[0];rn IPEndPoint ipRemoteEndPoint = new IPEndPoint(ipAddress, 8005);rnrn //Serializes the IPEndPoint. rn SocketAddress socketAddress = ipRemoteEndPoint.Serialize();rn IPAddress ipAddressL = IPAddress.Parse("192.168.0.198"); //Dns.Resolve("www.contoso.com").AddressList[0];rn IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddressL, 8100);rnrn tryrn rn s.Connect(ipRemoteEndPoint);rn //s.Bind(s.LocalEndPoint);rn //s.Bind((EndPoint)ipLocalEndPoint);rnrn bytes = System.Text.Encoding.Default.GetBytes(a);//string.Buffer.GetByte(a,0);rn bytelen = bytes.Length;rn s.Send(bytes,bytelen,SocketFlags.None);rn //s.Close();rn catch(Exception e1)rn MessageBox.Show(e1.ToString());rn rn rn rn rnrnrecieve:rnrnrn private void button2_Click(object sender, EventArgs e)rn rn int cflag=5;rn int recv;rn byte[] bytes = new byte[256];rn /*try rn listener.Start();rn rn rn catch(Exception e1)rn return;rn rn */rn s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);rn // IPAddress ipAddress = IPAddress.Parse(IPAddress.Any.ToString());rn IPAddress ipAddress = IPAddress.Parse("192.168.0.198");rn IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 8005);rn // if(listener.res)rn //s.Connect(new IPEndPoint(IPAddress.Any, 0));rn s.Bind(ipLocalEndPoint);rn //IPAddress.Parse(CType(s.LocalEndPoint, IPEndPoint).Address.ToString());rn //s.Connect(ipLocalEndPoint);rn s.Listen(cflag);rn //listener.AcceptSocket();rn //while (true)rn // rnrn rn Select();rn Socket client = s.Accept();rn /*IPAddress ipAddress1 = IPAddress.Parse("192.168.0.181"); //Dns.Resolve("www.contoso.com").AddressList[0];rn IPEndPoint ipRemoteEndPoint = new IPEndPoint(ipAddress1, 8005);rn IPEndPoint clientip = (IPEndPoint)ipRemoteEndPoint;*/rnrn string b = "Server Send...";rn bytes = Encoding.ASCII.GetBytes(b);rnrn client.Send(bytes, b.Length, SocketFlags.None);rnrn //while(true)rn byte[] data = new byte[256];rn recv = client.Receive(data);rn //s.Receive(bytes);rn // if (recv == 0) break; rnrn richTextBox1.Text = System.Text.Encoding.Default.GetString(data); //bytes.ToString();rn //client.Send(data,recv,SocketFlags.None);rn rnrn // rn client.Close();rn // rn s.Close();rn rn //s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);rn //IPAddress ipAddress = IPAddress.Parse("192.168.0.198");rn //IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 8001);rnrn //Serializes the IPEndPoint. rn //SocketAddress socketAddress = ipLocalEndPoint.Serialize();rnrnrn
双网卡下UDP Socket通讯不能接收数据问题
Client是双网卡机器,对所有网卡都Bind了,然后发送数据,Server 能收到数据,但返回的数据Client不能收到。rnrn禁用一块网卡后就能正常通讯rnrn对多网卡是否需要特别的处理?
新创建的线程中QTcpsocket不能接收数据?
QT Examples 中的例子rn void FortuneServer::incomingConnection(int socketDescriptor)rn rn QString fortune = fortunes.at(qrand() % fortunes.size());rn FortuneThread *thread = new FortuneThread(socketDescriptor, fortune, this);rn connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));rn thread->start();rn rnrnvoid FortuneThread::run()rn rn QTcpSocket tcpSocket;rn if (!tcpSocket.setSocketDescriptor(socketDescriptor)) rn emit error(tcpSocket.error());rn return;rn rn rn // 这里tcpSocket貌似不能接收数据rn while (true) rn qDebug() << tcpSocket.bytesAvailable(); //输出总为0,客户端确实在不停发数据rn if (tcpSocket.bytesAvailable() > 0) rn // tcpSocket.read((char *)&data, sizeof(data));rn break;rn rn rnrn // 但是下面的数据能发送给客户端,不知道为什么啊,盼好心人指点,感激不尽啊!rn QByteArray block;rn QDataStream out(&block, QIODevice::WriteOnly);rn out.setVersion(QDataStream::Qt_4_0);rn out << (quint16)0;rn out << text;rn out.device()->seek(0);rn out << (quint16)(block.size() - sizeof(quint16));rnrn tcpSocket.write(block);rn tcpSocket.disconnectFromHost();rn tcpSocket.waitForDisconnected();rn
有哪些情况会使CAsyncSocket不能接收数据?
-
用空间mscomm接收数据不能连续接收?
我用mscomm接收下位机dsp发送的数据,在inputmode=comInputModeBinary下,发送十个字符的化如“abcdefghig"运行一次dsp只能接收到"abcdef"六个字符,若再运行一次dsp能持续接收到后面四个字符。而在inputmode=0的情况下就能收到全部十个字符,这是为什么哪?rn下面是程序的主要部分:看看十个什么原因呢?rnPrivate Sub Form_Load()rnWith MSCommrn .CommPort = 1rn .Settings = "9600,N,8,1"rn .InBufferSize = 1024rn .OutBufferSize = 1024rn .RThreshold = 1 '接收1字节触发oncomm事件rn .InputMode = 1 'comInputModeBinaryrn .InputLen = 1 '输入长度为1rn .InBufferCount = 0 '清除接收缓冲区rn .OutBufferCount = 0rn .SThreshold = 0 '发送完所有产生oncomm事件rnEnd Withrnrn'打开端口rnIf MSComm.PortOpen = False Thenrn MSComm.PortOpen = Truern If Err Thenrn MsgBox (Err.Description)rn Exit Subrn End IfrnEnd IfrnEnd SubrnrnPrivate Sub MSComm_OnComm()rnrnSelect Case MSComm.CommEventrnrn Case comEvReceive '收到Rthreshold个字节产生的接收事件rn rn MSComm.RThreshold = 0 '关闭OnComm事件接收rn rn av = MSComm.Input '读取一个接收字节rn rn For i = LBound(av) To UBound(av)rn rn dataframe = dataframe & Chr(av(i))rn rn Next irn rn txtData.Text = txtData.Text + dataframe + Chr(&HD) + Chr(&HA)rn rn dataframe = ""rn rn MSComm.RThreshold = 1 '打开OnComm事件接收rn rn Case Elsern rnEnd SelectrnrnEnd Sub
wifi不能接收数据广播包的问题
无线网卡wifi可以接收beacon的广播包,但是不能接收数据广播包,无线是通的,如果STA先ping AP的话能双向ping通,但AP不能先ping STA,就是说AP发送的ARP广播包不能被STA接收,大家说可能是什么原因呢?RX的Broadcast和Multicast寄存器都设置好的
UDP-Socket通讯服务端异地不能接收数据
大家好,我要做一个UDP方式的Socket通信程序,我先写了一对客户端和服务端,在我本机上调试,是成功的,可以运行。然后我把服务端,和别人的客户端,进行通信,就没反应了,别人的客户端向我的服务端发送数据,我的服务端接收不到,没一点反应,我打断点调试,也没有数据进来。我们想了很多办法,甚至用抓包工具,比如OmniPeek抓,显示客户端确实是发送数据了,可是,我为什么就收不到呢?rn 主要代码如下:rn SOCKET sock;rn WSADATA wsaData;rn if (WSAStartup(MAKEWORD(2,2),&wsaData)) //调用Windows Sockets DLLrn rn MessageBox("Winsock无法初始化!");rn WSACleanup();rn return;rn rn struct sockaddr_in local;rn struct sockaddr_in from;rn int fromlen =sizeof(from);rn local.sin_family=AF_INET;rn local.sin_port=htons(27015); ///监听端口rn local.sin_addr.s_addr=inet_addr("127.0.0.1"); ///本机rn sock=socket(AF_INET,SOCK_DGRAM,0);rn bind(sock,(struct sockaddr*)&local,sizeof(local));rn while (1)rn rn char buffer[1024]="\0";rn printf("waiting-------------\n");rn if (recvfrom(sock,buffer,sizeof(buffer),0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)rn rn 接收后做处理....rn rn rn closesocket(sock);rn 我就是不明白,哪里有错,我和我的客户端,本机可以通讯啊,怎么异地就不行了呢?我看到有人说,在bind之前是不是要清空一下,我也做了,加了句:rn ZeroMemory(&(local.sin_zero), sizeof(local.sin_zero));rn 可结果还是一样的。rn 这个问题已经困扰我几天了,一直解决不了,还请高手帮忙处理一下,只要是做过UDP通讯的,一看肯定就明白,知道问题在哪,大家帮帮忙吧,我工期赶得紧啊,在线等。
Android 与电脑的Socket通信为什么不能接收数据
将电脑作为服务端,android平板作为客户端,进行同一局域网下的TCP的socket通信,结果测试时发现可以android客户端可以向电脑发送数据缺接受不到数据,求大神帮忙看看什么问题rnrnpublic static String receiveData;rn public static Socket s;rn public static BufferedReader in;rn public static BufferedWriter out;rnrnpublic static void connect()rn new Thread() rn public void run() rnrn try //打开app后按下一个按钮开启连接,可以连接上rn rn s = new Socket("192.168.0.100", com.android.dafenqi.MainActivity.port);rn in = new BufferedReader(new InputStreamReader(s.getInputStream()));rn out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));rn rn catch (UnknownHostException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn catch (IOException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn rn rn .start();rn rn//每次按下一个按钮便调用下面的send()方法接受和发送数据,接受在前时,便不能发送,发送在前电脑服务端能正常收到数据,就是android接受数据时卡住了,接受不到rnrnpublic static void send() rnrn rn try rn rn //receiveData = in.readLine();这时能发送数据,但不能接收数据,去掉//就连数据都不能发了rn rn out.write(sendData + "\n");rn rn out.flush();rn rn receiveData = in.readLine();rn /*byte[] datas = new byte[2048];rn //从服务端程序接收数据rn s.getInputStream().read(datas);rn com.android.dafenqi.ScoketClient.receiveData=new String(datas);*/rnrn catch (Exception e) rn e.printStackTrace();rn rn rn
相关热词 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd c# 操作sql视图