前言
本文提供移植好的工程(仅使用串口和以太网外设),STM32H750+LAN8720
环境
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通
串口正常打印