前言
本文提供移植好的工程(仅使用串口和以太网外设),见本文绑定资源
环境
STM32CubeMX: V6.8.1
STM32H7 HAL Pack: V1.11.1
硬件连接
STM32H750 GPIO定义如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/ca74394317ac40cb879fb8aa236d4c19.png)
LAN8720 GPIO定义如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/7e9fbfe5cb454dd2a97c06b1b051e75b.png)
连接方式如下:
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
![在这里插入图片描述](https://img-blog.csdnimg.cn/42bf3463f20c4b168d296ea9ac0444c1.png)
配置时钟,选择时钟源
![在这里插入图片描述](https://img-blog.csdnimg.cn/8425c37b68094f2287319871c374b64b.png)
将主频配置为最大即480MHz
![在这里插入图片描述](https://img-blog.csdnimg.cn/dfeba7f81db44b68957bb63e89622114.png)
配置MPU
使能ICACHE和DCACHE
使能MPU 选择only+disable模式,并配置两个区
这两个配置特别重要,配置有误就ping不通
![在这里插入图片描述](https://img-blog.csdnimg.cn/c257df33f56c40ce9b506b608c1685bd.png)
配置以太网
配置以太网,选择RMII模式
![在这里插入图片描述](https://img-blog.csdnimg.cn/cb42a8ba5a9841f6a24cb9323ab4407d.png)
修改描述符地址和buff长度
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2cb0f9ab9e148c78163294e3b1e3e92.png)
使能中断
![在这里插入图片描述](https://img-blog.csdnimg.cn/93ceaa815cf4440fb7473e24f7ba0828.png)
将相关GPIO全部配置成高速
![在这里插入图片描述](https://img-blog.csdnimg.cn/485e8dc217164bd69f50a6542f046bd3.png)
配置LWIP
使能LWIP并选择LAN8742平台(与LAN8720兼容)
![在这里插入图片描述](https://img-blog.csdnimg.cn/38d05b1be07f426d96f1d05bd6abac32.png)
取消DHCP并配置合适的固定IP
![在这里插入图片描述](https://img-blog.csdnimg.cn/7d69d791406f48f3811bca10c1e12495.png)
配置串口
使能UART1用于debug
![在这里插入图片描述](https://img-blog.csdnimg.cn/2767036f3a3f46abb723e2c559fa0e59.png)
生成代码
配置工程输出,这里选择的是MDK5
![在这里插入图片描述](https://img-blog.csdnimg.cn/f9359ac0f0b8452fa911ae94ecd05655.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/4fff79afb24446af88c906de38fe626d.png)
勾选MicroLIB,否则无法跑通
![在这里插入图片描述](https://img-blog.csdnimg.cn/24f23e16147e417aba26b3ccc81606e4.png)
建议取消这个选项,否则编译会很慢
![在这里插入图片描述](https://img-blog.csdnimg.cn/4e7d4215ff474fbc8d7dbafc7d7d6c07.png)
修改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();
}
}
}
编译成功
![在这里插入图片描述](https://img-blog.csdnimg.cn/188257d470a6420c987d42fbb717ec2b.png)
运行
成功ping通
![在这里插入图片描述](https://img-blog.csdnimg.cn/2fd15901d057491191b8b051dfc666d0.png)
串口正常打印
![在这里插入图片描述](https://img-blog.csdnimg.cn/2133275435244e15a28b4d4bd8dd05b2.png)