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文件

相关推荐
数据知道1 分钟前
YARA 规则编写实战——从样本到检测规则
网络·安全·网络安全
志栋智能5 分钟前
安全超自动化:实现安全策略动态调整的保障
网络·安全·自动化
可视化运维管理爱好者31 分钟前
机房工勘记录器分享
运维·网络·nvisual
码上上岸32 分钟前
基于stm32的智能荷兰豆生长舱监控系统
stm32·单片机·嵌入式硬件·物联网
超级架构师33 分钟前
连接企业系统,不等于把接口直接交给 Agent:LIMENORA 的集成边界
网络·人工智能·架构·ai编程
IT19951 小时前
双网卡 Windows 网络混乱?路由配置一步解决内外网冲突
网络
星栖与芯1 小时前
STM32MP157 M4 指针避坑(一):先看清“客栈“——内存布局与指针基础
stm32·单片机·嵌入式硬件
国科安芯1 小时前
星载数据处理单元中单粒子翻转防护机制的设计考量与实现路径
网络·单片机·嵌入式硬件·架构·抗辐射·星载数据处理·单粒子
Lynne3091 小时前
IT/OT融合为什么难?从网络、协议到实时性的技术问题
网络
FfHUCisI1 小时前
Golang 网络轮询器 netpoll:把阻塞 IO 变成事件通知
开发语言·网络·golang