文章目录
- STM32H750+CubeIDE+FreeRTOS+ETH(LAN8720A)+LWIP
- CubeIDE配置
- RCC
- 时钟树
- SYS
- ETH
- 串口
- MPU
- FreeRTOS
- LWIP
- GPIO
- 然后就可以点击生成代码了!
- 代码修改
- printf重定向
- 补充硬件复位
- 更改补充链接文件
- 然后就可以编译下载ping成功了!
- socket网络编程
STM32H750+CubeIDE+FreeRTOS+ETH(LAN8720A)+LWIP
前言:该文章只做成功案例记录,不做讲解。用到的板子具体型号为STM32H750VBT6。
CubeIDE配置
RCC
- 根据实际情况开启时钟,一般为 外部高速晶振,输出的时钟根据自己的原理图,我这里是PA8,所以勾选的 master clock output 1。
时钟树
- 选择外部时钟,让主频达到最高。
- 注意输出的时钟,也要选择HSE外部高速,否则可能导致初始化失败。
SYS
- 由于要上系统,所以sys需要选择其他的定时器,而不能是systick。
ETH
- 找到ETH,根据实际情况选则mode,这里我是 RMII,然后GPIO速度全部拉倒最高。
- 参数设置保持默认即可,但需要记住这个地址参数,后续还会有别的地方用到的这个地址。
- 开启全局中断。
串口
- 根据自己的情况开启一个串口,Mode是 Asynchronous 。
MPU
- 如图配置即可。
FreeRTOS
- 开启FreeRTOS,将TOTAL_HEAP_SIZE给个30720bytes。
- 来到Advanced settings开启Newlib settings,不开的话生成代码时会有弹窗提示需要打开这个设置。
- 创建默认的任务和一个闪灯的任务用于测试,defaultTask的栈要给大一点,lwip会默认在这个里面初始化。
LWIP
- 启动lwip,关闭动态分配ip地址,自行进行配置。
- 按照如下图更改配置即可,其他默认。
- Platform如图,只能选择LAN8742
GPIO
- 现在来补充配置一下复位的IO,以及灯的IO。我这里的复位是PC0 (初始为高电平), LED是PE7。根据自己实际情况。
然后就可以点击生成代码了!
代码修改
printf重定向
- 这里先不做说明
补充硬件复位
-
找到ethernetif.c,在如图所示位置添加硬件复位。
-
再在main.c 里补充一下使能。
/* USER CODE BEGIN SysInit */
__HAL_RCC_D2SRAM1_CLK_ENABLE();
__HAL_RCC_D2SRAM2_CLK_ENABLE();
/* USER CODE END SysInit */
- 补充一下闪灯的任务
更改补充链接文件
- 找到STM32H750VBTX_FLASH.ld,补充一段,如图。地址参数就是前面配置ETH部分所提到的。
/* Modification start */
.lwip_sec (NOLOAD) :
{
. = ABSOLUTE(0x30000000);
*(.RxDecripSection)
. = ABSOLUTE(0x30000080);
*(.TxDecripSection)
. = ABSOLUTE(0x30000100);
*(.Rx_PoolSection)
} >RAM_D2
/* Modification end */
然后就可以编译下载ping成功了!
- 记住先设置自己电脑的ip地址要和板子同一网段。
- 要ping自己给板子所配置的ip地址哦!
socket网络编程
- 开发完善中…