ESP32以太网(ETH)环境和参数配置,基于内部mac和外部PHY(LAN8720A)

文章详细介绍了使用ESP32进行以太网开发的过程,包括理论知识如MAC和PHY芯片、RJ45接口,以及开发步骤,如使用VScode创建工程、idf.py编译和烧录。在遇到内存问题和配置错误时,作者提供了配置和解决方法,最后通过ping测试验证了配置的成功。
摘要由CSDN通过智能技术生成

ESP32在网上的资料很多,但问题也各式各样。由于ESP32主要做wifi功能,因此对于以太网的资料也很少。相对应的开发板也很少。

本人使用的是淘宝上购买的雨甄机电的带网口的开发板(如下图)安信可ESP-32S

参考资料主要以热心博主《兴趣使然_》的(5条消息) ESP32 单片机学习笔记 - 06 - (以太网)Ethernet转Wifi_esp32 以太网_兴趣使然_的博客-CSDN博客这篇文章。

对于我一个小白来说,先得学习一些理论知识。

首先,以太网是局域网的通讯方式,以太网是具有TCP/IP协议,以太网常用接口有RJ45接口。

然后以太网的组成包括mac和phy芯片和RJ45的座子。然后一个芯片说支不支持网络说的是是否具有内部mac,不支持的就需要外接W5500等模块(W5500就是把mac和phy组合到一个芯片上,然后利用SPI的方式和主板通信)。(mac和phy芯片中间有种通信方式叫RMII或MII,类似于SPI的东西,对于运用来说,两者主要区别就是一个的信号线多,一个的信号线少)。(理论知识太多了,我也看不到太懂,这就是我的理解)。

然后利用VS code 创建一个工程,创建工程之前需要先下载ESP的插件,下载方法网上很多。下载完毕后,打开vscode,此时快捷方式输入ctrl+shift+p,打开工程示例。

打开工程示例后,根据左边的目录找到ethernet>>basic

选中目标项目后进行创建

此时项目创建完成(也可以使用idf工具创建,但代码不好编辑查找)

由于vs code编译较慢,因此,采用idf编译,烧录和观察,采用vs cod来编辑代码

此时打开idf工具,找到此项目(由于idf工具没有ls等命令,只有cd,因此需要记得自己项目保存的位置)

因为第一次编译较慢,因此我们先编译一下(骗人的,第一次编译慢,之后每次改配置编译都慢),输入编译命令 idf.py build

等待编译完成

编译完成后,我们先将代码烧录进入开发板,由于我采用的开发板是带烧录功能的,因此直接使用type C线接好就可以烧录。输入烧录命令idf.py -p COM7 flash  (COM7具体情况来输入)

烧录完成后,此时可以运行一下观察现象(一般情况下,此时运行没有问题,就算完成了,但没有问题是基本不可能的,接坑才刚刚开始)

输入运行命令:idf.py -p COM7 monitor

此时观察log

我们出现的现象是

从打印我们可以看出是内存的问题,此时我们就需要修改配置了,修改方法有两种

方法一:采用idf工具修改,输入配置命令:idf.py menuconfig

输入命令idf.py menuconfig打开配置界面,进入Serial flasher config,按需将Flash size改为自己的大小。比较常用的两个模组:安信可ESP-32S乐鑫ESP32-WROOM-32,flash都是4MB。连续按Esc退出,按y保存。

此时再编译烧录,发现代码已经正常运行,不需要再进行修改(这就结束了吗?哦呜阔斯诺特)我们的代码之所以能正常运行,是因为之前已经进行了配置,正常情况下你可能会出现以下问题

  1. 不断重启
  2. 复位超时

  1. w550错误

这些都是配置的问题,如果配置不对,你是解决不了这些问题的。

接下来就看看我们的配置(idf工具自行配置,作者英文不好,也不擅长使用命令,配置方式还是配置命令到配置界面配置)

按照如下方式进行配置:

不配置时钟会导致不断重启,参考(5条消息) 66 ESP32 ethernet\basic实验记录_esp32 以太网_Chasing_Chasing的博客-CSDN博客进行时钟配置

配置完毕后再编译代码烧录观察。如果不出意外就会出现正常打印到

Ethernet Started

看起来是正常了。但是等待一段时间后,后出现错误打印,也可能是我哪里配置的原因,反正是正常可用了(如下):

此时是因为网线没插或者网线坏了等原因,我们只需要接入正常网线即可出现如下打印,此时,网口配置完成(如果还出现错误,则需要自行排查了)

(什么是正常网线呢?一般情况下,未插入网线时,RJ45亮橙(黄)色灯,当网线正常时亮绿灯,可以数据交互时橙(黄)色灯闪烁,所以我们的正常情况为:绿灯亮起,橙(黄)色灯闪烁。

如何检验是否正常工作,一般我们采用的都是ping的方式,也就是拿两个网线将电脑和ESP32都接到同一个路由器,电脑上打开命令窗口,然后输入指令ping 192.168.1.1查看连接情况,ping通了就可以证明配置完成且可用。

此时,配置完成。

  • 18
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
在STM32中配置ETH MAC参数需要以下步骤: 1. 确定ETH MAC的工作模式,可以选择MII或RMII模式。 2. 配置ETH MAC的时钟源,可以选择外部时钟源或者内部PLL时钟源。 3. 配置PHY芯片的地址,使ETH MAC能够与PHY进行通信。 4. 配置ETH MACMAC地址,以便其他设备能够识别该设备。 5. 配置ETH MAC的传输参数,如最大传输单元、发送和接收缓冲区大小等。 6. 启动ETH MAC,使其能够开始工作。 以下是一个简单的示例代码,可以帮助你更好地了解如何在STM32中配置ETH MAC参数: ``` #include "stm32f4xx.h" #include "stm32f4xx_eth.h" void ETH_Configuration(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx | RCC_AHB1Periph_ETH_MAC_Rx, ENABLE); ETH_DeInit(); ETH_StructInit(&ETH_InitStructure); ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable; ETH_InitStructure.ETH_Speed = ETH_Speed_100M; ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex; ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable; ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable; ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Enable; ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable; ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable; ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect; ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect; ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable; ETH_InitStructure.ETH_ReceiveBuffer = ETH_ReceiveBuffer_Ring; ETH_InitStructure.ETH_TransmitBuffer = ETH_TransmitBuffer_Ring; ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1; ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable; ETH_InitStructure.ETH_ReceiveThresholdControl = ETH_ReceiveThresholdControl_64Bytes; ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable; ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable; ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable; ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable; ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable; ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat; ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat; ETH_InitStructure.ETH_RxDescAligned = ETH_RxDescAligned_Enable; ETH_InitStructure.ETH_TxDescAligned = ETH_TxDescAligned_Enable; while (ETH_Init(&ETH_InitStructure, PHY_ADDRESS) != ETH_SUCCESS); ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } ``` 在上面的代码中,我们首先开启了ETH MAC和相关的外设时钟,并使用ETH_DeInit函数将ETH MAC的所有寄存器恢复到默认值。然后,我们使用ETH_StructInit函数初始化了ETH_InitStructure结构体,并设置了各种ETH MAC参数。最后,我们使用ETH_Init函数将ETH MAC初始化,并使用ETH_DMAITConfig函数和NVIC_Init函数配置相关的DMA和中断。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值