如何像串口那样处理LAN8720A的接受和发送?

2019-07-20 05:53发布

  各位大神和原子哥:
  下午好!
  关于LAN8720A这章知识,因为涉及的内容比较多,好多地方有些不太懂。因为有很多上层应用和底层应用,看起来很复杂。我遇到的一个问题就是不知道接受数据的长度多少?具体长度在哪个全局变量还是在哪个函数里面?因为我急需寻找这个接受数据长度是多少,这样我就可以通过长度来处理我网络串口助手发过来的数据。因为在串口那章知识里面,都会用到串口接收数据的长度。跪求大仙们指点迷津~@@~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
HCHDaLeiGe
2019-07-20 07:16
//中断服务函数
void ETH_IRQHandler(void)
{
    while(ETH_GetRxPktSize(ETH_Handler.RxDesc))   
    {
        lwip_pkt_handle();//处理以太网数据,即将数据提交给LWIP
    }
    //清除中断标志位
    __HAL_ETH_DMA_CLEAR_IT(&ETH_Handler,ETH_DMA_IT_NIS);
    __HAL_ETH_DMA_CLEAR_IT(&ETH_Handler,ETH_DMA_IT_R);
}

//当接收到数据后调用
void lwip_pkt_handle(void)
{
    //从网络缓冲区中读取接收到的数据包并将其发送给LWIP进行处理
    ethernetif_input(&lwip_netif);
}

err_t ethernetif_input(struct netif *netif)
{
        err_t err;
        struct pbuf *p;
        p=low_level_input(netif);   //调用low_level_input函数接收数据
        if(p==NULL) return ERR_MEM;
        err=netif->input(p, netif);
        if(err!=ERR_OK)
        {
                LWIP_DEBUGF(NETIF_DEBUG,("ethernetif_input: IP input error "));
                pbuf_free(p);
                p = NULL;
        }
        return err;
}

一周热门 更多>