查看: 328|回复: 0

[评测分享] 【STM32H735-DK 测评】手工配置LWIP

[复制链接]
  • TA的每日心情
    开心
    14 小时前
  • 签到天数: 99 天

    连续签到: 3 天

    [LV.6]常住居民II

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



    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-27 23:41 , Processed in 0.113110 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.