工具/软件:Code Composer Studio
我在使用静态 IP 时遇到类似的问题。 我的计算机 IP 为192.168.101.11、DK 电路板为192.168.101.10。 我可以从计算机 ping 192.168.101.10、但无法输出 UDP。
//
//
//此示例演示了以太网控制器的使用。
//
//
main (空)
{
uint32_t ui32User0、ui32User1;
uint8_t pui8MACArray[8];
struct ip_addr ipaddr;
struct ip_addr ipAddr2;
struct ip_addr subnet;
struct ip_addr gateway;
char errorFlag;
struct udp_PCB * UDPSock;
ipaddr.addr =(192u << 24)|(168u << 16)|(101u << 8)| 10U;
ipAddr2.addr =(192u << 24)|(168u << 16)|(101u << 8)| 11u;
subnet.addr =(255u << 24)|(255u << 16)|(255u << 8)| 0;
//网关=(192u << 24)|(168u << 16)|(0U << 8)| 1;
// IP4_ADDR (&ipaddr、192、168、101、10);
// IP4_ADDR (&subnet,255,255,255,0);
IP4_ADDR (&gateway、0、0、0、0);
//
//从 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-static");
//
//为周期性中断配置 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、ipaddr.addr、subnet.addr、gateway.addr、 ipaddr_use_static);
UDPSock = UDP_NEW ();
UDP_recv (UDPSock、NULL、NULL);
errorFlag = UDP_BIND (UDPSock、&ipaddr、7070);
IF (错误标志)
错误标志= 0;
// errorFlag = UDP_CONNECT (UDPSock、IP_ADDR_ANY、7070);
// if (错误标志)
// errorFlag = 0;
char buf[500]="hello Kitty";
struct pbuf *p = 0;
//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);
errorFlag = udp_sendto (UDPSock、p、&ipAddr2、7070);
IF (错误标志)
错误标志= 0;
pbuf_free (p);
for (ui32Loop = 0;ui32Loop < 2000000;ui32Loop +)
{}
}
}