CubeMX配置STM32VET6实现网口通信(无操作系统版-附源码)

下面是使用CubeMX配置STM32F407VET6,实现以太网通讯(PHY芯片为LAN8720)的具体步骤总结:

一、硬件连接方式:

  • 硬件原理图:

    使用外部晶振为PHY芯片提供时钟。

image-20250407202838959

  • STM32F407VET6 与 LAN8720 采用 RMII 模式连接。
STM32F407VET6引脚功能(RMII)LAN8720引脚
PA1ETH_REF_CLKREF_CLK(50MHz时钟输入)
PA2ETH_MDIOMDIO
PC1ETH_MDCMDC
PA7ETH_CRS_DVCRS_DV
PC4ETH_RXD0RXD0
PC5ETH_RXD1RXD1
PB11ETH_TX_ENTX_EN
PB12ETH_TXD0TXD0
PB13ETH_TXD1TXD1
PA8ETH_RESETnRST

注意:

  • LAN8720使用RMII模式,需提供50MHz外部时钟至LAN8720芯片的XTAL1/CLKIN引脚。

    • LAN8720芯片外接的晶振频率为 25MHz,连接至LAN8720的XTAL1/CLKIN管脚。

      STM32F407在使用RMII模式进行以太网通信时,LAN8720内部会将这个25MHz时钟倍频为50MHz后输出到STM32的PA1引脚(ETH_REF_CLK),因此你只需要给LAN8720提供一个25MHz的晶振即可。

      • 外部晶振:25MHz
      • RMII参考时钟:LAN8720输出50MHz到STM32
  • LAN8720的地址引脚PHYAD0置0(接地),则默认PHY地址为0(我这里默认接地了,只是原理图没画出来)。

    • 根据LAN8720官方Datasheet说明:
    • 当PHYAD0引脚 下拉到GND 时,PHY地址为 0
    • 当PHYAD0引脚 上拉到VDDIO 时,PHY地址为 1

    在原理图中,这个引脚既未上拉也未下拉(即悬空状态),通常会导致PHY地址不确定,在实际工作中可能会导致STM32无法正确识别PHY芯片。


二、CubeMX软件配置步骤:

(1)以太网ETH配置:

  • 打开ETH外设,选择ModeRMII

    image-20250407204010071

  • 其他配置保持默认即可:

    • Ethernet MAC address:可以自定义,例如:00:80:E1:00:00:00。此处不做任何处理,保持默认即可。
  • 根据硬件设计,确认IO口是否配置成功(默认配置)

    image-20250407204112887

  • 配置PHY芯片复位引脚,这个引脚用于复位芯片,使得芯片初始化成功

    image-20250407204212948

(2)使能LWIP中间件:

  • 在Middleware选项中使能LWIP
  • 配置PHY芯片:

image-20250407204720221

PHY(Port Physical Layer),可称之为端口物理层,是一个对 OSI 模型物理层的简称。现在常用于STM32 的有 DP83848,LAN8270,DM9161/9162 等。这些 PHY 芯片都大同小异,基本寄存器都是一样的,只有扩展寄存和厂商专门设置的寄存器不同。如果将其中一个 PHY 驱动成功了,驱动另一个也是非常方便的,所以这里选择LAN8742即可(我们使用的芯片是LAN8720)

  • 配置LWIP的参数,

  • 使能ICMP(方便PING测试)

  • IP地址、子网掩码、网关等信息。 示例:

    IP地址:192.168.100.100
    子网掩码:255.255.255.0
    网关:192.168.100.1
    

    image-20250407204451400

  • 配置LWIP 关键参数:

image-20250407204627458

(3)配置中断(可选):

  • 通常默认已开启以太网相关中断,无需额外配置。

三、软件代码实现:

(1)初始化函数:

在生成的代码中,以太网和LWIP初始化函数自动生成,无需手动更改:

MX_LWIP_Init();    // LWIP协议栈初始化

(2)代码编写:

CUBEMX生成工程代码后,只需要编写如下函数即可实现网络初始化,实现和电脑网络以太网连接:

  • 主循环中必须调用MX_LWIP_Process(),否则网络栈不能正常工作,若不周期性调用,则导致网络数据包未及时处理,无法建立连接。

  • 需要初始化的时候给复位引脚一个脉冲,使PHY芯片开始工作。

    HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_RESET);
    HAL_Delay(55);
    HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_SET);
    HAL_Delay(55);	
    
  • 如果PHY芯片还是初始化不成功,则在MX_LWIP_Init()运行之前加入5-10s的延时。

  • 由于这个版本LWIP库的原因,需要我们在程序中手动设置PHY芯片的地址,根据上文分析,PHY芯片地址为0X00:

    image-20250407211139514

  • 如下为初始化代码,完成下买的代码即可PING通:

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM3_Init();
  MX_USART1_UART_Init();
  MX_USART6_UART_Init();
  MX_LWIP_Init();
  /* USER CODE BEGIN 2 */

    //芯片复位
    HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_RESET);
    HAL_Delay(55);
    HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_SET);
    HAL_Delay(55);	

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {		
       /* LWIP协议栈定时任务处理 */
		MX_LWIP_Process();
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

(3)网络PING测试:

编译并烧写程序后,使用PC机的CMD命令行输入:

image-20250407205212112

如果能够ping通,说明硬件连接、LWIP协议栈工作正常。


四、注意事项与调试:

  • LAN8720供电电压为3.3V。
  • 必须确保LAN8720芯片接收到50MHz外部时钟,否则通讯无法正常进行。
  • 网络线连接方式需采用交叉线或连接到交换机。
  • 代码编写部分需要特别注意一下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魂兮-龙游

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值