前语:由于之前使用过LWIP仅仅是移植,网上很多教程,确实可以使用,但是不够详细,本次在项目中使用到,故做笔记记录。
一、软件版本:
1.1 cubeMx版本
Version6.11.1
说明:6.6版本也可以,已验证。
1.2 HAL库版本
STM32Cube_FW_H7_V1.11.2
说明:STM32Cube_FW_H7_V1.11.1版本也可以,已验证。
1.3 MDK版本
Version2.39.0.0
1.4 FreeRtos 版本
CMSIS v2
1.5 硬件版本
ST芯片:STM32H743IIT6-V
PHY芯片:LAN8742A
二、CubeMx配置
2.1 新建H743IIT6工程
2.2 时钟配置
配置系统时钟,本次硬件设计有源晶振,故如下配置(25M 有源晶振)
供电方式及硬件版本确定
说明:SupplySource 供电选择:如下图
PWR_LDO_SUPPLY:系统LDO提供电压,
PWR_EXTERNAL_SOURCE_SUPPLY:外部供电
此图来源于STM32H7xx参考手册(附件查看),主要说明两种供电方式的区别及寄存提配置,H7电源配置比较复杂,主要是分的项目比较多,感兴趣自己查看书册,不考虑低功耗等其他特殊模式,正常运行参考本文配置即可。
先不用管其他配置,此时来配置时钟树
如上图配置即可,接下来继续配置RCC
可以看到,时钟配置到480M,电压调节器及硬件版本选择已经固定,下面来说说原因
Power Regulator Voltage Scale:电压调节器,有0~3 4种模式选择,此功能允许用户调整处理器的工作电压,以平衡功耗和性能。通常有几个不同的电压等级可供选择,例如低功耗模式和高性能模式。选择较低的电压等级可以降低功耗,延长电池寿命,但可能会降低处理器性能。相反,选择较高的电压等级可以提高性能,但会增加功耗。用户可以根据具体应用需求选择合适的电压等级,以达到最佳的功耗和性能平衡。由于选择480M,系统默认高性能,此处默认是Power Regulator Voltage Scale 0。
Product revision:硬件版本,分为V版本和Y版本,Y版本最高400M;V版本最高480M;特备注意,这也是有些配置到480M后无法正常运行的原因(目前正点原子的阿波罗用的是Y版本,我手上的是这样)。芯片却别如下图
2.3 CORTEX_M7配置
配置MPU,打开M7的Dcache 和 Icache
此处是关于MPU的配置,全是和M7内存有关系,配置不对会导致接收或者发送数据异常,DMA配置及FMC配置也需要配置MPU,必须注意,不然无法获取数据,有关MPU配置,后续会有专门文章讲。
2.4 ETH配置
开始配置ETH驱动
①根据PHY芯片选择接口类型
②ETH引脚速度配置,如果默认Low的话,是无法达到LAN8742的要求的,改成上图所示
先打开ETH中断,
NVIC配置中断优先级6
修改ETH配置
此处配置地址是和MPU有关的,以下是关于几个存储区域的分类
AXI SRAM 区
{
1、位于D1域,挂在AXI总线
2、速度200MHZ
3、地址:0x2400 0000,大小512KB
}
SRAM1,SRAM2,SRAM3 区
{
1、位于D2域,挂在AHB总线
2、速度200MHZ
3、SRAM1地址:0x3000 0000,大小128KB
SRAM2地址:0x3002 0000,大小128KB
SRAM3地址:0x3004 0000,大小32KB
}
SRAM4区
{
1、位于D3域,挂在AHB总线
2、速度200MHZ
3、地址:0x3800 0000,大小64KB
}
Backup SRAM区
{
1、位于D3域,挂在AHB总线
2、速度200MHZ
3、地址:0x3880 0000,大小4KB
}
以上图来源于STM32H7编程手册(见附件),关于MPU配置,此处不做说明,H7的MPU功能复杂,后续会专门讲H7的MPU使用。
2.5 LWIP配置
选择PHY芯片LAN8742A
选择静态IP
2.6 SYS系统定时器配置
选择一个系统不用的定时器配置给滴答使用,必须配置,不然ping不通
2.7 添加PHY复位
本次使用PA0为复位,配置如下
说明:未配置复位,可能导致断电后,无法再次ping通!
三、工程配置
工程文件选择
以上Heap Size 和Stack Size 堆栈内存大小,由于H7内存大,此处分配大点,不至于程序变量定义多了后,会导致运行出错(之前有发现程序不报错,就是好多任务无法运行,最后发现是堆栈内存分配太小了导致的,修改后,正常),也可以在KEIL编辑器中修改,两种方法都可以,如下图
配置输出.c和.h独立文件
输出KEIL版本程序工程
四、KEIL工程配置
4.1 工程配置
勾选库及程序优化(关于程序优化,是和KEIL有关系,优化等级高会导致仿真无法运行指定位置,很多程序被优化了,未编译,关于优化问题参考本人其他文章keil代码被优化的问题总结_单片机编译优化后出错-CSDN博客)
4.2 程序修改
添加运行程序
(以上是未添加LAN8742复位的,如果未使用复位,就不用添加,复位信号是低有效,如果配置引脚,默认高电平即可)
添加复位程序,在ethernetif.c里面添加,如下图
五、电脑网口配置
修改IP为固定IP
修改后,一定要点击确认,关闭以上窗口。
六、裸机下载验证
使用CMD打开终端,ping 192.168.1.10
连接正常。
说明:本人在调试的时候发现,硬件设计24V转5V设计应该是纹波太大(猜测),5V转3.3V给芯片供电,导致我配置成480M下载到板子,无法ping成功,而且断电后JLINK找不到芯片,必须修改boot才能重新下载程序,改成400M,就能成功,后来直接给系统提供3.3V,绕开电路板供电,一切正常
七、添加FreeRtos
7.1 添加FreeRtos版本及修改最小内存
修改默认任务大小
7.2 修改LWIP配置
MEM_SIZE必须比默认值大,即可,范围是0~2048MByte
7.3 修改KEIL程序
屏蔽裸机代码
八、FreeRtos下载验证
连接成功,断电后,重启,复位,测试,热插拔,均正常!
/*********************************仅供参考***********************************/