在STM32上通过建立UDP连接实现数据的传输。在上节提到采用的是轻型的TCP/IP协议栈Uip,在Uip协议中实现UDP连接的创建,需要以下步骤:
第一步,打开支持UDP协议的配置项,支持的UDP连接的个数,参考上节的配置文件。
第二步,确定本地的IP地址和端口号(192.168.0.100 9999),远程主机的IP地址和端口号(192.168.0.22 9998)
#define IP_ADDR1 192
#define IP_ADDR2 168
/#define IP_ADDR3 3
/#define IP_ADDR4 100
#define UDP_REMOTE_PORT 9998
#define UDP_LOCAL_PORT 9999
第三步,UDP创建连接初始化,
void Udp_Init(void)
{
uint8_t i = 0;
uip_ipaddr_t ipaddr;
for(i = 0; i< UIP_UDP_CONNS; i++)
{
if(&uip_udp_conns[i] != NULL)
{
uip_udp_remove(&uip_udp_conns[i]);
}
}
//创建UDP连接
uip_ipaddr(ipaddr,192, 168, 0, 22);
uip_udp_conn = uip_udp_new(&ipaddr, HTONS(UDP_REMOTE_PORT));
//绑定本地端口
if(uip_udp_conn != NULL)
{
uip_udp_bind(uip_udp_conn, HTONS(UDP_LOCAL_PORT));
}
}
将此UDP初始化函数,放在uip协议栈初始化之后。
UDP应用层数据处理函数的实现
#ifndef UIP_UDP_APPCALL
#define UIP_UDP_APPCALL Udp_Appcall
#endif
void Udp_Appcall(void)
{
uint32_t i ;
u8 strloadlen = 0;
uip_ipaddr_t ipaddr;
u8 targetIp[4], netMask[4], gateway[4], macaddr[6],netip[4];
char netMaskbuff[16], macaddrbuff[20],gatewayBuf[16];
memset(str,0,100);
udpip_buf = (struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN];
udp_datelen = (udpip_buf->len[0] << 8) + udpip_buf->len[1] - UIP_IPUDPH_LEN;//HTONS(udpip_buf->len);
udp_appbuf = (char *)uip_appdata;
memcyp(str,udp_appbuf,udp_datelen);
myudp_send(str,strlen(str));
}
根据需要,实现对数据的处理,编译完成后,下载值目标板,复位。
第四步,将所使用的PC机的IP地址设置成192.168.0.22,打开网络调试助手,将协议类型设置为UDP,本地端口号设置成 UDP_REMOTE_PORT,点击连接,即可创建UDP连接,此时即可通过在网络助手,向目标板发送UDP数据包。