用cc3000和stm32f10系列的mcu搭配,移植spi驱动的初期存在了一些问题,后来都是通过把杜邦线减短来解决了问题,现在杜邦线连接cc3000和stm32,线长9cm左右,可以连接到固定AP名称的路由器上,存在以下的问题:
1,UDP发送时,第一个数据包网络调试助手接收不到,后面的都能接收到。部分代码如下:
选择建立的socket类型
case UART_COMMAND_SOCKET_OPEN:linktype=atoshort(usBuffer[2], usBuffer[3]);if(linktype==1)ulSocket = socket(2,2,17);//AF_Init SOCK_DGRAM UDPelse if(linktype==2) ulSocket = socket(2,1,6);//AF_Init SOCK_STREAM TCPelseulSocket = socket(2,2,17);
udp发送数据:
case UART_COMMAND_SEND_DATA: pcData = (char *)&usBuffer[4]; ulDataLength = atoshort(usBuffer[2], usBuffer[3]); pcSockAddrAscii = (pcData + ulDataLength); tSocketAddr.sa_family =2;// the destination port tSocketAddr.sa_data[0] = ascii_to_char(pcSockAddrAscii[0], pcSockAddrAscii[1]); tSocketAddr.sa_data[1] = ascii_to_char(pcSockAddrAscii[2], pcSockAddrAscii[3]); // the destination port tSocketAddr.sa_data[2] = ascii_to_char(pcSockAddrAscii[4], pcSockAddrAscii[5]); tSocketAddr.sa_data[3] = ascii_to_char(pcSockAddrAscii[6], pcSockAddrAscii[7]); tSocketAddr.sa_data[4] = ascii_to_char(pcSockAddrAscii[8], pcSockAddrAscii[9]); tSocketAddr.sa_data[5] = ascii_to_char(pcSockAddrAscii[10], pcSockAddrAscii[11]); sendto(ulSocket, pcData, ulDataLength, 0, &tSocketAddr, sizeof(sockaddr)); break;
出现的问题是:第一个发送出去的数据包网络调试助手都收不到,通过串口手动发送指令0405123451f90c0a80165
TCP发送数据时,要先发送一次UDP数据,CC3000才能建立和目标IP和端口的TCP server建立连接,然后数据能够发送成功。如果不先建立UDP连接的话,TCP的connect一直是blocking,直到timeout。
TCP发送数据的代码:
case UART_COMMAND_SEND_DATA_TCP: pcData = (char *)&usBuffer[4]; ulDataLength = atoshort(usBuffer[2], usBuffer[3]); pcSockAddrAscii = (pcData + ulDataLength);// the family is always AF_INET //tSocketAddr.sa_family = atoshort(pcSockAddrAscii[0], pcSockAddrAscii[1]);tSocketAddr.sa_family =2;// the destination port tSocketAddr.sa_data[0] = ascii_to_char(pcSockAddrAscii[0], pcSockAddrAscii[1]); tSocketAddr.sa_data[1] = ascii_to_char(pcSockAddrAscii[2], pcSockAddrAscii[3]); // the destination port tSocketAddr.sa_data[2] = ascii_to_char(pcSockAddrAscii[4], pcSockAddrAscii[5]); tSocketAddr.sa_data[3] = ascii_to_char(pcSockAddrAscii[6], pcSockAddrAscii[7]); tSocketAddr.sa_data[4] = ascii_to_char(pcSockAddrAscii[8], pcSockAddrAscii[9]); tSocketAddr.sa_data[5] = ascii_to_char(pcSockAddrAscii[10], pcSockAddrAscii[11]);ulSocket = socket(2,1,6);//TCP connect blocking returen 0 is successif(connect(ulSocket,&tSocketAddr,sizeof(sockaddr))==0)send(ulSocket,pcData,ulDataLength,0);else{printf("Connect tcp service failed!\n\r");closesocket(ulSocket);ulSocket = socket(2,1,6);connect(ulSocket,&tSocketAddr,sizeof(sockaddr));send(ulSocket,pcData,ulDataLength,0);}
个人觉得不是杜邦线的问题了,因为CC3000已经能够初始化,且连接上AP了。
Yonghua Pan:
你电脑的防火墙有没有挡包?