STM32H743+LWIP+CubeIDE
一、实验环境:
- STM32H743-NUCLEO开发板(板载LAN8742A PHY芯片)
- CubeIDE 1.5.0
- LWIP版本2.1.2
- NO_OS,裸跑
二、配置
1)、首先要配置一下系统时钟、Debug接口。
2)、使能ICache、DCache
如果不使能DCache,则LWIP不能使用
3)、配置ETH接口
要使能ETH中断:
同时,CubeIDE默认的ETH接口和NECLO板子的接口不一样,需要根据原理图进行修改,同时把IO速度拉满。修改之后:
4)、配置LWIP
使能LWIP,并使能DHCP:
将对应的模块打开DEBUG使能:
并且需要在lwipops.h中define LWIP_DEBUG
5)、配置DEBUG串口
在这个开发板上,STLINK一个串口和H743的uart3连接,IO为:
波特率默认115200即可:
在usart.c文件中对printf进行重定义:
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart3, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
return ch;
}
注意,还需要该一处地方,才能正常串口打印输出:
6)、生成代码并调整修改
这是生成代码之后的目录框架:
在ethernetif.c文件中修改,清除DCache缓存:
在low_level_output函数中:
在low_level_input函数中:
同时,在ethernet.c文件中,定义了DMA-Buffer,要指定运行的位置(对应前面配置的MPU):
这个位置要在ld文件中进行指定声明(默认是没有声明的,这点坑我三天,一直跑不起来就是因为默认没有声明)
.lwip_sec (NOLOAD) :
{
. = ABSOLUTE(0x30040000);
*(.RxDecripSection)
. = ABSOLUTE(0x30040060);
*(.TxDecripSection)
. = ABSOLUTE(0x30040200);
*(.RxArraySection)
} >RAM_D2 AT> FLASH
7)、最后效果
串口打印输出内容,可以看出分配的IP地址为192.168.4.106
然后用电脑CMD去ping一下(要求在同一局域网内)
链路打通!