CubeMX H743 lwip ETH初始化流程

初始化流程

cpp 复制代码
low_level_init();函数初始化网卡

    -》HAL_ETH_Init(); //设定mac等信息

    -》创建接收数据信号量
    -》创建数据输入任务函数

    HAL_ETH_Start_IT();  
    -> ETH_UpdateDescriptor();
        ->void HAL_ETH_RxAllocateCallback();分配描述符缓存空间
cpp 复制代码
DMA收到数据包
-》数据包写入到接收描述符缓冲区
->HAL_ETH_RxLinkCallback();组装pbuf链
-》ETH_IRQHandler     
    → HAL_ETH_IRQHandler 触发中断
        -》调用中断回调函数HAL_ETH_RxCpltCallback()
            ->释放接收数据包信号量
cpp 复制代码
ethernetif_input();//任务一直在等待收到数据包的信号量
-》 p = low_level_input( netif );
    -》HAL_ETH_ReadData(&heth, (void **)&p);//读取组装好的pbuf数据
    -》netif->input( p, netif);//数据交给lwip
    ->pbuf_free(p);//释放资源

描述符内存位置分配

ETH DMA可访问的内存地址如下图

可正常通信的描述符地址 举例 都在0x30000000之后

需要指定分配的buff地址。

由编译器指定位置

cpp 复制代码
__attribute__((at(0x30040000))) ETH_DMADescTypeDef  DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
__attribute__((at(0x30040080))) ETH_DMADescTypeDef  DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */

魔术棒-》linker-》取消勾选 use memory layout from target dialog

编辑.sct文件

相关推荐
史蒂芬_丁19 小时前
EPWM Global Load
单片机·嵌入式硬件
碎像19 小时前
单片机-数码管显示
单片机·嵌入式硬件
观无19 小时前
Modbus RTU 与 Modbus TCP 温湿度采集
网络·网络协议·tcp/ip
空中海19 小时前
3.4 状态同步与生命周期管理
android·网络
航Hang*19 小时前
Windows Server 配置与管理——第7章:配置DNS服务器
运维·服务器·网络·windows·安全·虚拟化
xixixi7777719 小时前
通信产业的“全维度加速”:从5G-A商用、6G冲刺到卫星互联网密集组网
大数据·网络·人工智能·ai·多模型
Wave84519 小时前
从裸机到 FreeRTOS:STM32 智能手表重构之路
stm32·重构·智能手表
@insist12320 小时前
网络工程师-网络安全核心加密技术体系:对称 / 非对称加密、数字签名与证书全解析
网络·安全·web安全·网络工程师·软考·软件水平考试
盐真卿20 小时前
华为数通 | VRRP负载分担与网关冗余实验:主备切换+流量分流,企业高可用网络实战
网络·华为
isyangli_blog20 小时前
4、sdn 网络性能的测试与验证
网络