ST提供的例程做IAP时STM32是做tftp服务器的。因项目需要,我们需要STM32做客户端。
主要的程序如下:
UDPpcb = udp_new();
if (UDPpcb != NULL)
{
/*assign destination IP address */
IP4_ADDR( &dest_ip, 192, 9, 50, 224 );
/* configure destination IP address and port */
err= udp_connect(UDPpcb, &dest_ip, 69);
if (err == ERR_OK)
{
/* Set a receive callback for the upcb */
udp_recv(UDPpcb, tftp_recv_callback, NULL);
len = sprintf (data, "%c%c%s%c%s%c", 0x00, TFTP_RRQ, "app.bin", 0x00, "octet", 0x00);
/* allocate pbuf from pool*/
p = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_POOL);
if (p != NULL)
{
/* copy data to pbuf */
pbuf_take(p, (char*)data, len);
/* send udp data */
udp_send(UDPpcb, p);
/* free pbuf */
pbuf_free(p);
}
else
{
printf("Can not allocate pbuf\r\n");
}
}
但在测试中发现tftp_recv_callback从来没被调用,导致服务器端收不到ACK而超时终止文件传输 |