野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12828|回复: 5

STM32F429+LAN8720网口调试

[复制链接]
发表于 2016-12-20 17:00:25 | 显示全部楼层 |阅读模式
第一次调网口相关的程序,相关文件太多,完全看不懂,那就先不管了,先把功能实现,在后面慢慢消化,买的是fire的F429系列的一个核心板,拿到了相关的程序源码,于是选择了一个UDP协议的程序,原程序里是通过按键控制udp的连接与断开,由于核心板里只有一个复位按键,于是将按键部分程序删掉,改成直接进入主循环后,直接开启udp连接,ip啥的都改好,ping通之后,下载程序,复位后通过串口打印情况发现出问题了,在连接udp函数里出现了“can not create udp pcb”,原因是由一个upcb变量不为零,其他的程序部分我也看不懂,请问论坛里面有大神指导什么原因吗?以下是main部分程序和udp连接部分程序:
int main(void)
{  
        /* 3õê¼»ˉμ÷êÔ′®¿ú£¬ò»°ãÎa′®¿ú1 */
        Debug_USART_Config();
       
        /* 3õê¼»ˉÏμí3μÎ′e¶¨ê±Æ÷ */       
        SysTick_Init();
       
        TIM3_Config(999,899);//10ms¶¨ê±Æ÷
        printf("LAN8720A Ethernet Demo\n");

        /* Configure ethernet (GPIOs, clocks, MAC, DMA) */
  ETH_BSP_Config();       
  printf("LAN8720A BSP INIT AND COMFIGURE SUCCESS\n");
       
  /* Initilaize the LwIP stack */
  LwIP_Init();       

  printf("    KEY1: Æô¶ˉUDPᬽó\n");
  printf("    KEY2: ¶Ï¿aUDPᬽó\n");

  //IPμØÖ·oí¶Ë¿ú¿éÔúnetconf.hÎļtDT¸Ä£¬»òÕßê1óÃDHCP·tÎñ×Ô¶ˉ»ñè¡IP(Dèòa·óéÆ÷Ö§3Ö)
  printf("±¾μØIPoí¶Ë¿ú: %d.%d.%d.%d:%d\n",IP_ADDR0,IP_ADDR1,IP_ADDR2,IP_ADDR3,UDP_SERVER_PORT);
  printf("Ô¶¶ËIPoí¶Ë¿ú: %d.%d.%d.%d:%d\n",DEST_IP_ADDR0, DEST_IP_ADDR1, DEST_IP_ADDR2, DEST_IP_ADDR3,DEST_PORT);
        while(1)
        {

                        if (EthLinkStatus == 0)
                        {
        printf("Connect to udp server\n");
                                /* Connect to udp server */
                                udp_echoclient_connect();
                        }

                        /* check if any packet received */
                        if (ETH_CheckFrameReceived())
                        {
                                /* process received ethernet packet */
                                LwIP_Pkt_Handle();
                        }
                        /* handle periodic timers for LwIP */
                        LwIP_Periodic_Handle(LocalTime);
        }
}


/**
  * @brief  Connect to UDP echo server
  * @param  None
  * @retval None
  */
void udp_echoclient_connect(void)
{

  struct pbuf *p;
  struct ip_addr DestIPaddr;
  err_t err;

  /* Create a new UDP control block  */
  upcb = udp_new();

  if (upcb!=NULL)
  {
    /*assign destination IP address */
    IP4_ADDR( &DestIPaddr, DEST_IP_ADDR0, DEST_IP_ADDR1, DEST_IP_ADDR2, DEST_IP_ADDR3 );

    /* configure destination IP address and port */
    err= udp_connect(upcb, &DestIPaddr, DEST_PORT);

    if (err == ERR_OK)
    {
      /* Set a receive callback for the upcb */
      udp_recv(upcb, udp_receive_callback, NULL);

      sprintf((char*)data, "sending udp client message %d\n",message_count);

      /* allocate pbuf from pool*/
      p = pbuf_alloc(PBUF_TRANSPORT,strlen((char*)data), PBUF_POOL);

      if (p != NULL)
      {
        /* copy data to pbuf */
        pbuf_take(p, (char*)data, strlen((char*)data));

        /* send udp data */
        udp_send(upcb, p);

        /* free pbuf */
        pbuf_free(p);
      }
      else
      {
        /* free the UDP connection, so we can accept new clients */
        udp_remove(upcb);
        #ifdef SERIAL_DEBUG
        printf("\n\r can not allocate pbuf ");
        #endif
      }
    }
    else
    {
      /* free the UDP connection, so we can accept new clients */
      udp_remove(upcb);
      #ifdef SERIAL_DEBUG
       printf("\n\r can not connect udp pcb");
      #endif
    }
  }
  else
  {
    #ifdef SERIAL_DEBUG
     printf("\n\r can not create udp pcb");
    #endif
  }
}

回复

使用道具 举报

 楼主| 发表于 2016-12-20 17:06:37 | 显示全部楼层
这是串口打印出来的信息
DOR56$~TVE4XA_BLG6U%`]L.png
回复 支持 反对

使用道具 举报

发表于 2016-12-20 17:25:34 | 显示全部楼层
只有核心板你怎么进行网络通讯啊?核心板上没有网络模块
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-20 17:27:15 | 显示全部楼层
随风 发表于 2016-12-20 17:25
只有核心板你怎么进行网络通讯啊?核心板上没有网络模块

网口模块有的,用的是LAN8720,而且也试过可以ping通
回复 支持 反对

使用道具 举报

发表于 2016-12-20 17:30:05 | 显示全部楼层
LOVELING`32 发表于 2016-12-20 17:27
网口模块有的,用的是LAN8720,而且也试过可以ping通

创建pcb要分配动态内存或者从内存池里分配的,你有没有改这部分相关的代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-20 19:50:07 | 显示全部楼层
随风 发表于 2016-12-20 17:30
创建pcb要分配动态内存或者从内存池里分配的,你有没有改这部分相关的代码

没有,我就删了一个按键部分的代码,其他的看不懂,,也没敢动,,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-27 23:16 , Processed in 0.047851 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表