工具/软件:Code Composer Studio
有人可以举一个简单的例子来说明如何使用库 UIP 1.0传输 UDP 数据包?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
有人可以举一个简单的例子来说明如何使用库 UIP 1.0传输 UDP 数据包?
您好、Vladimir、
我们实际上没有针对 TivaWare 的任何 UDP 示例。 如果您想将 TI-RTOS 用于 TivaC、您可以查看它们的 UDP 回波示例、这是它们的以太网网络示例的一部分。
或者、您可以参考此 E2E 帖子、其中包含用于实现自己的 UDP 示例的强大选项列表: https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/498942/1805878#1805878
好的。 我更改了 enet lwip 示例:只发送消息。 我没有在端口7070上看到任何问题、我是不是这样? 我选择了我的插页
NT
main (空)
{
uint32_t ui32User0、ui32User1;
uint8_t pui8MACArray[8];
//
//从 PLL 以120MHz 运行。
//
G_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
//
//配置器件引脚。
//
PinoutSet();
//
//初始化显示驱动程序。
//
Kentec320x240x16_SSD2119Init (g_ui32SysClock);
//
//初始化图形上下文。
//
GrContextInit (&g_sContext、&g_sKentec320x240x16_SSD2119);
//
//绘制应用程序帧。
//
FrameDraw (&g_sContext、"enet-lwip");
//
//为周期性中断配置 SysTick。
//
ROM_SysTickPeriodSet (g_ui32SysClock/SYSTICKHZ);
ROM_SysTickEnable();
ROM_SysTickIntEnable();
//
//初始化文件系统。
//
fs_init();
//
//为的以太网控制器过滤配置硬件 MAC 地址
//传入数据包。 MAC 地址将存储在非易失性存储器中
// USER0和 User1寄存器。
//
ROM_FlashUserGet (&ui32User0、&ui32User1);
if ((ui32User0 == 0xffffffff)||(ui32User1 == 0xffffffff)
{
//
//我们永远不应该来这里。 如果 MAC 地址有、则这是一个错误
//未编程到器件中。 退出程序。
//
GrContextForegroundSet (&g_sContext、ClrRed);
GrStringDrawCenter(&G_sContext,"MAC 地址",-1,
GrContextDpyWidthGet (&g_sContext)/ 2、
(GrContextDpyHeightGet (&g_sContext)/ 2)- 4、
false);
GrStringDrawCenter(&g_sContext,“未编程!”,-1,
GrContextDpyWidthGet (&g_sContext)/ 2、
(GrContextDpyHeightGet (&g_sContext)/ 2)+ 16、
false);
while (1)
{
}
}
//
//将24/24拆分 MAC 地址从 NV RAM 转换为32/16拆分 MAC
//对硬件寄存器进行编程所需的地址,然后对 MAC 进行编程
//将地址输入以太网控制器寄存器。
//
pui8MACArray[0]=((ui32User0 >> 0)& 0xff);
pui8MACArray[1]=((ui32User0 >> 8)& 0xff);
pui8MACArray[2]=((ui32User0 >> 16)& 0xff);
pui8MACArray[3]=((ui32User1 >> 0)& 0xff);
pui8MACArray[4]=((ui32User1 >> 8)& 0xff);
pui8MACArray[5]=((ui32User1 >> 16)& 0xff);
//
//使用 DHCP 初始化 lwIP 库。
//
lwIPInit (g_ui32SysClock、pui8MACArray、0、0、0、 ipaddr_use_AUTOIP);
void * UDPSock = UDP_new();
UDP_recv (UDPSock、NULL、NULL);
UDP_BIND (UDPSock、IP_ADDR_ANY、7070);
UDP_CONNECT (UDPSock、IP_ADDR_ANY、7070);
char buf[500]="hello Kitty";
struct pbuf *p = pbuf_alloc (PBUF_transport、500、PBUF_RAM);
//struct ip_addr server;
// IP4_ADDR (&server,192,168,253,236);
//
//
//设置设备定位服务。
//
//LocatorInit();
//LocatorMACAddrSet (pui8MACArray);
//LocatorAppTitleSet ("DK-TM4C129X enet_lwip");
//
//初始化示例 httpd 服务器。
//
//httpd_init();
//
//设置中断优先级。 我们将 SysTick 中断设置为更高的值
//优先级比以太网中断高,以确保文件系统
如果 SysTick 在以太网处理程序运行时发生、则处理// tick
//已处理。 这很可能是因为所有 TCP/IP 和 HTTP 工作都是
//在以太网中断上下文中完成。
//
ROM_IntPrioritySet (INT_EMAC0、ETHERNET_INT_PRIORITY);
ROM_IntPrioritySet (FAULT_SysTick、SysTK_INT_PRIORITY);
uint32_t ui32Loop;
//
//永久循环。 所有工作都在中断处理程序中完成。
//
while (1)
{
p=pbuf_alloc (PBUF_transport、500、PBUF_RAM);
memcpy(p->payload、buf、500);
udp_sendto (UDPSock、p、IPADDR_ANY、7070);
pbuf_free (p);
for (ui32Loop = 0;ui32Loop < 2000000;ui32Loop +)
{}
}
}
在使用 AUTOIP 之前、是否可以先尝试使用 DHCP?
完成。 没有改变。 我得到 IP 地址169.254.159.146。 网络配置为169.254.159.1 mask 255.255.0.0
#define LWIP_DHCP 1 #define LWIP_AUTOIP 1
完成。 没有改变
struct udp_pcb *pcb; pcb = udp_new();
完成。 没有改变
有关 LwIP 的更多问题、请直接将您的问题发布到 LwIP 论坛
链接?