[评测分享]
【STM32H735-DK 测评】手工配置LWIP
#板卡评测
2278 人阅读
|
0 人回复
|
2024-03-17
TA的每日心情 | 开心 2025-10-22 07:09 |
|---|
签到天数: 590 天 连续签到: 1 天 [LV.9]以坛为家II
状元
- 积分
- 8788
|
【目的】
STM32H735-DK板载了网口,能够实现联网的功能。在官方提供的驱动示例中已经给出了好多的示例。但是如果需要结合到其它的项目时面,那么配置它的驱还是有必要的。
【实现步骤】
1、创建基于stm32H735-DK的开发板工程,详细步骤这里略过。
2、配置ETH参数,在基础工程中,已经配置好了与LA8742的连接,如果是基于芯片的驱动,那么还需要根据开发板的原理图来修改相应的IO。这里我们需要配置的参数是TX、RX的RAM的地址。根据网上一位UP主的教程,设计收发地址如下图,需要RX为描述符的基地址为0x30000000,它占用4*32=128个字节,那么我们的TX描述就从0x3000080开发,然后RX接收缓冲区就从0x30000100开始点用4*1534个字节
那么我们的网址地址配置如下图所示:
3、开启LWIP必须配置MPU才能激活,打开MCU并使能MPU,打开ICache、DCache,按照0x30000100+10*1024,那么我们配l置堆从0x30002000开始,大小为32KB,配置如下图,
4、LWIP中配置为固定IP形式,具体根据自己的网络环境进行设置。我这里设置IO地址如下:
在key Options中设置MEM_SIZE大小为10*1024,基地址为0x30002000
在Platform Settings中选择Found Soulutions为LA8742
到此我们的stm32CubeMAX就配置好了。
【添加代码】
由于生成的代码还有几个地方需要配置才能正常的运行。
1、在ethernetif.c中没有给出rxbuffer的地址,因此需要添加以下代码:
- <font size="4">/* USER CODE BEGIN 2 */
- #if defined ( __ICCARM__ ) /*!< IAR Compiler */
- #pragma location = 0x30000100
- extern u8_t memp_memory_RX_POOL_base[];
- #elif defined ( __CC_ARM ) /* MDK ARM Compiler */
- __attribute__((at(0x30000100)) extern u8_t memp_memory_RX_POOL_base[];
- #elif defined ( __GNUC__ ) /* GNU Compiler */
- __attribute__((section(".Rx_PoolSection"))) extern u8_t memp_memory_RX_POOL_base[];
- #endif
- /* USER CODE END 2 */</font>
复制代码 2、配置flashID在STM32H735IGKX_FLASH.ld文件中添架如下代码:
- <font size="4"> /* Modification start */
- .lwip_sec (NOLOAD) :
- {
- . = ABSOLUTE(0x30000000);
- *(.RxDecripSection)
- . = ABSOLUTE(0x30000080);
- *(.TxDecripSection)
- . = ABSOLUTE(0x30000100);
- *(.Rx_PoolSection)
- } >RAM_D2
- /* Modification end */</font>
复制代码 【注】官方给出的示例中,SD卡初始化会卡死,因此需要注释掉MX_SDMMC1_SD_Init();
4、在主循环中添加LWIP的进程。
- MX_LWIP_Process();
- HAL_Delay(10);
复制代码 到此,配置全部结束,我们编译下载到开发板后,使用PING可以成功PING通,效果如下:
【总结】 <span] 因上STM32H7系列配置LWIP需要开启MPU,因此我学习了好多都没有成功配置。昨天在B站看到STM32H743的配置才成功,在这里特别要感谢@[color=var(--text1)] 倪博的天空这位大佬的教程。
|
|
|
|
|
|
|
|
|