Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ART-Pi
drv_eth_以太网驱动
artpi2的drv-eth修改使用eth与设备驱动学习笔记
发布于 2025-05-26 11:58:18 浏览:149
订阅该版
[tocm] # 简介 ——最近在学习rtthread的使用,想要在stm32h7r的开发板上使用can功能,然后发现artpi2的eth设备驱动没法直接使用,因为初学也想找个东西实际动手做一下,就开干了。 ——修改drv-eth参考了正点的h7r,还有st官方例程,基于artpi1的drv-eth上面做的改动 ——hal库不要用1.1版本的!!!!!一定要升级到1.2!!! (吐槽:stm32h7和stm32h7r就一个字母不一样,hal库改动好多,md这个1.1版本的hal库还有问题,找了三天升级到1.2就好了,怀疑可能是readdata里面的更新描述符的尾指针寄存器设置不对。) # 使用 ## 替换文件 [drv_eth.h](https://club.rt-thread.org/file_download/3754a1b639f363d1) [drv_eth.c](https://club.rt-thread.org/file_download/fafa1821cd8ac815) ## 修改配置文件 ——使用ART-PI2的工程 ## 修改kconfig ——文件路径是项目/libraries/kconfig。进去翻到BSP_USING_ETH那块,替换成 ``` menuconfig BSP_USING_ETH bool "Enable Ethernet" default n select RT_USING_LWIP if BSP_USING_ETH config ETH_RESET_PIN string "ETH RESET PIN" default "PA.3" endif if BSP_USING_ETH choice prompt "Choose ETH PHY" default PHY_USING_LAN8720A config PHY_USING_LAN8720A bool "USING LAN8720A" config PHY_USING_DM9161CEP bool "USING DM9161CEP" config PHY_USING_DP83848C bool "USING DP83848C" config PHY_USING_YT8512C bool "USING YT8512C" endchoice endif ``` ## 修改sconscript ——文件位置在项目/libraries/stm32h7rsxx_hal_driver/sconscript。然后进去,有两行被注释掉的关于eth的代码,修改成 ``` if GetDepend(['BSP_USING_ETH']): src += ['Src/stm32h7rsxx_hal_eth.c'] src += ['Src/stm32h7rsxx_hal_eth_ex.c'] ``` ## 修改cubemx ——这里就不多赘述了,用cubemx配置eth的引脚,模式设置为RMII,eth的输入时钟我设置为了50Mhz。正点的时钟配置有些怪,但是我用了可以正常用,怪在  ——这里st写最大是8,但是正点弄了12,用我现在是能正常用 ## 效果  # 修改思路 ## 头文件 ——我现在用的硬件是正点原子的h7r,板上的以太网phy是yt8512c,所以在头文件添加了对应的宏定义和选择,配置了kconfig,可以在rtthread studio里面选择phy的种类。调整了一些宏定义的位置和顺序,yt8512c我看手册好像是支持中断的,但是正点的板子没有把中断引出来,这部分的中断我就没测试了。(偷懒) . ——还有添加了两个额外的宏定义ETH_RX_BUFFER_SIZE和BSP_ETH_PHY_ADDR,前面那个设置成1536主要是为了32字节对齐,后面那个是phy的地址,我初始化那块把自动找的那段函数注释掉了,如果用的话可以自己改回来。 ## 源文件  ——源文件修改的地方比较多,修改最大的地方是读取的时候rt_stm32_eth_rx。然后我发现原来的drv-eth的rt_stm32_eth_rx函数这里pbuf-alloc申请之后next就是空的,实际上好像也只运行了一次。我就想着read时候pbuf链接起来了,这里也改了一下把数据链接起来了,不知道会不会出问题。 . ——在h7r里面读取的操作更改了很多,只用了HAL_ETH_ReadData就可以把所有信息读出来,比较坑的是里面嵌了两个需要外部覆写的函数HAL_ETH_RxAllocateCallback和HAL_ETH_RxLinkCallback。 . ——HAL_ETH_RxAllocateCallback函数简单来说就是弄片buffer内存准备给eth-dma用,我图省事就没有弄动态申请了,直接初始化时候划一片内存给这部分用。我把buffer和pbuf打包成了RX_BUFF结构体,数量和hal库里面定义的ETH_RX_DESC_CNT有关,记得如果调大了可能要改一下分散加载文件,注意32字节对其。 . ——HAL_ETH_RxLinkCallback这个我其实没有太懂为什么要这么做,我的计算机网络基础不太行,应该说没基础。这里面就是把多个以太网帧(应该没说错吧)链接起来,pbuf连起来。但是我有个地方不太明白,接收一帧最大已经是15xx字节了,还要再连接起来吗,我问deepseek他说还有以太网巨型帧9000字节,不知道是不是和这个有关。 . ——其他地方应该就没什么大修改了。 # 笔记 [rt-thread-new.zip](https://club.rt-thread.org/file_download/a6cbab618ec409df) #结语 ——小白初次学习,可能很多地方做的还不完善,如果有问题欢迎各位大佬留言指正。 最后感谢artpi群的老哥的帮助。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
WenShan
这家伙很懒,什么也没写!
文章
2
回答
1
被采纳
0
关注TA
发私信
相关文章
1
SPI总线挂接2个W5500以太网芯片
2
用studio开发ETH设备时drv_eth.c不参与编译
3
STM32H743 以太网驱动 问题
4
关于在drv_eth.c中如何强制PHY工作
5
如何在rt-thread工作过程中切换IP地址获取模式(静态IP或者动态IP)
6
w5500_socket错误
7
STM32H743 LAN8720A
8
rt bthread studio不支持stm32H7系列的cpu 以太网驱动
9
studio生成stm32h7工程,drv_eth.c编译不过,如何解?
10
LWIP配置一直ping不同
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
6
五分钟玩转RT-Thread新社区
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
Bootloader
AT
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
UART
cubemx
ota在线升级
ESP8266
WIZnet_W5500
BSP
PWM
packages_软件包
flash
freemodbus
潘多拉开发板_Pandora
GD32
ADC
定时器
flashDB
编译报错
keil_MDK
ulog
socket
rt_mq_消息队列_msg_queue
msh
中断
Debug
SFUD
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
8
个答案
4
次被采纳
xiaorui
4
个答案
1
次被采纳
tjrong
2
个答案
1
次被采纳
yans
2
个答案
1
次被采纳
alight
2
个答案
1
次被采纳
本月文章贡献
Pai同学
10
篇文章
13
次点赞
Rick98
3
篇文章
12
次点赞
RTT_逍遥
2
篇文章
11
次点赞
WenShan
2
篇文章
2
次点赞
加缪
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部