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.

[参考译文] CCS/TM4C129XNCZAD:TM4C129XNCZAD Tiva UDP 示例

Guru**** 2415590 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/673873/ccs-tm4c129xnczad-tm4c129xnczad-tiva-udp-example

器件型号:TM4C129XNCZAD

工具/软件: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 +)
    {}


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Vladimir、

    老实说、我们在这里没有太多 lwip/UDP 知识-这在我们的范围之外(我们负责 IC 外设-在本例中为以太网-但并非所有能够利用它的应用)。 尽管如此、我将把这个问题发送给我们的以太网外设专家、他可能会提供一些建议。 但是他在下周才上班、所以不确定他是否会在下周之前回到您那里。 请原谅任何可能的答复延迟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    在使用 AUTOIP 之前、是否可以先尝试使用 DHCP? 使用 Wireshark 查看您是否能够获取 IP 地址。 您是否有任何原因不会将 DHCP 用于您的应用程序?

    首先、我不确定您是否获得了自动 IP 地址。 其次,如果为网络配置的 IP 地址与169.254.x.y 不同,则具有自动 IP 地址的设备可能无法正常通信。

    确保您的 LwIP 已将#define LWIP_DHCP 和#define LWIP_AUTOIP 设置为1。 如果主机无法接收 DHCP 地址、然后又返回到自动 IP、则通常是网络问题的迹象。

    在代码上、我看到您调用 udp_new。 我认为它应该以 UDP_PCB 结构的形式返回新的 PCB、如下所示。 我不太确定 void * UDPSock = UDP_NEW ();

    struct udp_pcb *pcb;
    PCB = UDP_NEW ();

    下面是一些 UDP 示例的链接。
    ultimaserial.com/avr_lwip_udp.html

    有关 LwIP 的更多问题、请直接将您的问题发布到 LwIP 论坛。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在使用 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 论坛

    链接?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果 DHCP 工作正常、则应在以下范围内获得专用 IP 地址。 169.254.x.y 是一个自动 IP 地址、而不是我所理解的 DHCP 地址。 尝试将 LWIP_AUTOIP 设置为0、是否可以获取 DHCP 地址? 使用 Wireshark 并捕获日志。 你看到什么?

    24位块10.0.0.0–10.255.255.255
    20位块172.16.0.0–172.31.255.255
    16位块192.168.0.0–192.168.255.255

    我正在度假、在接下来的8小时内、我将不能进入论坛。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     尝试将 LWIP_AUTOIP 设置为0、您是否可以获取 DHCP 地址

    完成。我无法获取 IP。 DHCP 无法正常工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您能否使用 Wireshark 中的 MAC 地址筛选器仅显示与您的 MAC 地址相关的日志? 如果 DHCP 不起作用,则它与使用 UDP 发送数据的方式无关。 您可以尝试一下 TivaWare 以太网示例吗? 它们都使用 DHCP 获取 IP 地址、即使该 TCP 用于协议栈。 TivaWare 以太网示例在您的网络中获取 DHCP 地址是否有效? 如果它们正常工作、则您需要在获取 IP 地址时参考项目的示例代码。

    我无法从您的 Wireshark 日志中进行真正的阐述。 它显示 DHCP Discover。 这通常来自客户机。 DHCP 是从 Discovery->Offer->Request->Acknowledge 开始的四阶段过程。 DHCP 服务器应向客户端发送 DHCP 服务。 我在 Wireshark 日志中看不到提供框架。 DHCP 服务器是否可能未收到发现数据包? 您可能还需要检查路由器。