前言
本文提供移植好的工程,见本文绑定资源
环境
STM32CubeMX: V6.8.1
 STM32H7 HAL Pack: V1.11.1
 
硬件连接
STM32H750 GPIO定义如下:

 
 LAN8720 GPIO定义如下:

 
 连接方式如下:
LAN8720       <—>     STM32H750
 MDIO                 ETH_MDIO
 MDC                 ETH_MDC
 TX0                 ETH_TXD0
 TX1                 ETH_TXD1
 RX0                 ETH_RXD0
 RX1                 ETH_RXD1
 TX-EN               ETH_TX_EN
 CRS                 ETH_CRS_DV
 nINT/RETCK            ETH_REF_CLK
配置STM32CubeMX
基础配置
新建项目,我这里是STM32H750VBT6

 
 配置时钟,选择时钟源

 
 将主频配置为最大即480MHz

 
配置MPU
使能ICACHE和DCACHE
使能MPU 选择only+disable模式,并配置两个区
这两个配置特别重要,配置有误就ping不通

 
配置以太网
配置以太网,选择RMII模式

 
 修改描述符地址和buff长度

 
 使能中断

 
 将相关GPIO全部配置成高速

配置LWIP
使能LWIP并选择LAN8742平台(与LAN8720兼容)

取消DHCP并配置合适的固定IP

 
配置串口
使能UART1用于debug

 
生成代码
配置工程输出,这里选择的是MDK5

 
 
勾选MicroLIB,否则无法跑通

建议取消这个选项,否则编译会很慢

修改main函数
将main()替换为如下内容,主要修改如下:
①使能SRAM3
②运行LWIP任务
③增加串口打印
int main(void)
{
	int uart_tick = 0;
	MPU_Config();
	SCB_EnableICache();
	SCB_EnableDCache();
	__HAL_RCC_D2SRAM3_CLK_ENABLE();
	HAL_Init();
	SystemClock_Config();
	MX_GPIO_Init();
	MX_USART1_UART_Init();
	MX_LWIP_Init();
	while (1)
	{
		MX_LWIP_Process();
		if (HAL_GetTick() - uart_tick > 1000)
		{
			HAL_UART_Transmit(&huart1, "hello world!\r\n", 14, 100);
			uart_tick = HAL_GetTick();
		}
	}
}
 
编译成功

运行
成功ping通
 
串口正常打印










![Java里面对int[]数组做新增删除去重实现](https://img-blog.csdnimg.cn/10920c49a4cc469b871ab850d5b171ed.png)








