STM32H743(同样适用于H745)LWIP配置-裸机+FreeRtos V2--笔记

前语:由于之前使用过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下载验证

连接成功,断电后,重启,复位,测试,热插拔,均正常!

/*********************************仅供参考***********************************/

您好!对于STM32F407和ETH LWIP,我可以为您提供一些关于TCP client客户端的开发方面的信息。 首先,您需要使用STM32CubeMX软件来配置STM32F407的ETH和LWIP库。在STM32CubeMX中,您可以配置以太网接口和选择使用LWIP协议栈。确保在配置期间启用TCP/IP协议。 一旦配置完成并生成代码,您可以在生成的代码中找到LWIP库的API函数以及以太网驱动程序的相关函数。在这里,您将能够设置和管理TCP连接。 以下是一个简单的TCP客户端示例代码,用于向服务器发送数据: ```c #include "lwip/api.h" #define SERVER_IP "192.168.0.100" #define SERVER_PORT 8080 void tcp_client_task(void *arg) { struct netconn *conn; err_t err; // 创建TCP连接 conn = netconn_new(NETCONN_TCP); if (conn != NULL) { ip_addr_t server_addr; // 设置服务器IP地址和端口 IP4_ADDR(&server_addr, 192, 168, 0, 100); // 连接服务器 err = netconn_connect(conn, &server_addr, SERVER_PORT); if (err == ERR_OK) { const char *data = "Hello, server!"; struct netbuf *send_buf; // 创建发送数据包 send_buf = netbuf_new(); if (send_buf != NULL) { // 将数据添加到发送数据包中 netbuf_ref(send_buf, data, strlen(data)); // 发送数据包 err = netconn_send(conn, send_buf); // 释放发送数据包 netbuf_delete(send_buf); } } // 关闭连接 netconn_close(conn); netconn_delete(conn); } vTaskDelete(NULL); } ``` 请注意,此示例代码仅用于演示目的,您可能需要根据您的具体需求进行修改。另外,还要确保正确初始化LWIP协议栈和以太网接口。 希望这些信息对您有所帮助!如果您有任何进一步的问题,请随时提问。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值