【易开嵌入式】rt-thread+stm32f407,实现RL-TCPnet网络协议栈

前文:【易开嵌入式】rt-thread+stm32f407+nandflash,实现RL-FLASHFS文件系统移植        

         

版权声明:本版面文章皆为原创、或参考其他技术网站、博客后自己动手做实验所得,转载请注明出处。

鸣谢:感谢eric硬汉

商务合作:lz_kwok@foxmail.com

易开嵌入式工作室

本文重点讲述,使用stm32最新hal库,基于rt-thread操作系统,移植RL-TCPnet的流程。

 

    参考【前文】描述,编写kconfig和sconsript脚本,将源码源码加入rtt的工程中:

   

    数据收发采用中断模式,需要实现以下几个接口:

void init_ethernet () //初始化以太网控制器。

void send_frame (OS_FRAME *frame)//发送数据包给以太网控制器。

void int_enable_eth () //使能以太网控制器中断。

void int_disable_eth () //关闭以太网控制器中断。

HAL_ETH_RxCpltCallback//中断函数,主要用于数据包的接收

    使用hal库,实现方法如下:

     首先是init_ethernet函数

/* Register the EMAC device */
int init_ethernet(void)
{
    rt_err_t state = RT_EOK;
    /* Prepare receive and send buffers */
    Rx_Buff = (rt_uint8_t *)rt_calloc(ETH_RXBUFNB, ETH_MAX_PACKET_SIZE);
    if (Rx_Buff == RT_NULL)
    {
        LOG_E("No memory");
        state = -RT_ENOMEM;
        goto __exit;
    }

    Tx_Buff = (rt_uint8_t *)rt_calloc(ETH_TXBUFNB, ETH_MAX_PACKET_SIZE);
    if (Tx_Buff == RT_NULL)
    {
        LOG_E("No memory");
        state = -RT_ENOMEM;
        goto __exit;
    }

    DMARxDscrTab = (ETH_DMADescTypeDef *)rt_calloc(ETH_RXBUFNB, sizeof(ETH_DMADescTypeDef));
    if (DMARxDscrTab == RT_NULL)
    {
        LOG_E("No memory");
        state = -RT_ENOMEM;
        goto __exit;
    }

    DMATxDscrTab = (ETH_DMADescTypeDef *)rt_calloc(ETH_TXBUFNB, sizeof(ETH_DMADescTypeDef));
    if (DMATxDscrTab == RT_NULL)
    {
        LOG_E("No memory");
        state = -RT_ENOMEM;
        goto __exit;
    }
#ifdef RT_USING_LWIP
    stm32_eth_device.ETH_Speed = ETH_SPEED_100M;
    stm32_eth_device.ETH_Mode  = ETH_MODE_FULLDUPLEX;

    /* OUI 00-80-E1 STMICROELECTRONICS. */
    stm32_eth_device.dev_addr[0] = 0x00;
    stm32_eth_device.dev_addr[1] = 0x80;
    stm32_eth_device.dev_addr[2] = 0xE1;
    /* generate MAC addr from 96bit unique ID (only for test). */
    stm32_eth_device.dev_addr[3] = *(rt_uint8_t *)(UID_BASE + 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值