×
单片机 > 单片机程序设计 > 详情

Uip在STM32平台移植之建立UDP链接

发布时间:2020-08-31 发布时间:
|

在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数据包。




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机中高阻态的实质及意义