[STM32H7] STM32H755-Nucle开发板使用STM32CubeIDE配置裸机以太网

[复制链接]
503|0
guanjiaer 发表于 2025-9-11 08:49 | 显示全部楼层 |阅读模式
0.前言
  记录近期使用CubeIDE和H7系列的踩坑记录,这个新接触到的双核MCU用起来还挺烧脑的。本篇主要内容是在Nucleo板子上,将ETH外设配置到M7核心。

一、STM32CubeIDE图形化配置
1.时钟
  由于我的Nulceo板子上没有接外部晶振,使用内部晶振工配置到480MHz时,系统有一点问题且暂未找到解决方案,另外便于配置实际项目的ADC外设,所以暂定到400MHz。RCC配置中的供电模式选项,需要根据实际电路进行修改。

1.png

2.png


2.缓存配置
  STM32H7系列一个很大的变动就是加入了Cache缓存机制,这里需要开辟两段缓存空间,分别给ETH外设和Lwip协议栈使用。

3.png

  关于为什么这样配置的原因,可以在官方的手册中搜索SDRAM关键字,了解H7系列的缓存空间和使用方式。这里只做简要说明。
STM32H7使用的内存不是连续的,而是被划分为多段(不同芯片请以手册为准):


MEMORY
{
        DTCMRAM (xrw)     : ORIGIN = 0x20000000, LENGTH = 128K //高速段,cpu独享
        RAM_D1 (xrw)      : ORIGIN = 0x24000000, LENGTH = 512K
        RAM_D2 (xrw)      : ORIGIN = 0x30000000, LENGTH = 288K
        RAM_D3 (xrw)      : ORIGIN = 0x38000000, LENGTH = 64K
        ITCMRAM (xrw)     : ORIGIN = 0x00000000, LENGTH = 64K //高速段,cpu独享
        FLASH (rx)        : ORIGIN = 0x8000000, LENGTH = 128K
}


(1)cortex-m7的cpu内核集成了L1-cache,包含I-Cache和D-Cache,分别是指令缓存和数据缓存。大小都是16KB。
(2)TCM RAM分为ITCM RAM(64KB)和DTCM RAM(128KB)的速率能到480MHz,无需配置MPU。
(3)AXI SRAM(512KB)AXI SRAM( D1 域) :
– 映射基地址 0x2400 0000 的 AXI SRAM,速率是240MHz,若提升速率要配置MPU
(4)AHB SRAM( D2 域):一共288KB,速率是240MHz,若提升速率要配置MPU
分为三个区域:
– 映射基地址 0x3000 0000 到 0x3001 FFFF(128KB)的 AHB SRAM1,
– 映射基地址 0x3002 0000 到 0x3003 FFFF(128KB)的 AHB SRAM2.
– 映射基地址 0x3004 0000 到 0x3004 7FFF(32KB) AHB SRAM3。
(5)AHB SRAM( D3 域):
– 映射到地址 0x3800 0000 的 AHB SRAM4,速率是240MHz,若提升速率要配置MPU
stm32H7支持管理最多16个单元region。随着序号(region number)的增加,优先级随着增加。

(6)Lwip不被允许使用cpu专用的高速L1缓存(DTCM),只能用D2 Sram区域;
(7)cpu可以无序访问cache,为防止这种情况,Lwip的DMA段必须是device类型或者Strongly-ordered类型,保证有序;
(8)通过MPU配置这段cache,其中一段允许share、允许buffer,长度为256Byte,放TXRX交互存取头;另外一段不share,不buffer,不cache;长度16k。这里都放在0x30040000这一段,大小够用,且便于时钟管理。

MPU TEX field level 内存类型
MPU Shareability Permission 是否共享
MPU Cacheable Permission 是否缓存
MPU Bufferable Permission 是否缓冲
可缓存作用是开启Cache,加速CPU访问SRAM。
可缓冲的作用是开启Buffer,把CPU和Cache从较低的SRAM操作摆脱出来。
可共享的作用是解决master的数据同步,这里不需要开启。

这里配置ETH的Cache缓存基地址0x30040000是 AHB SRAM3的基地址。
MPU Region Size 256B 是用于eth的收发buffer,大小256B。
0x3004 4000落在映射基地址 0x3004 0000 到 0x3004 7FFF的 AHB SRAM3(32KB)的正好中间位置),MPU Region Size 16KB 用于存放lwip协议栈。

3.ETH配置
接口类型选择RMI,使用的GPIO管脚需要根据实际电路图进行调整。

4.png

由于时钟频率较高,GPIO速率也修改为高或最高。

5.png

4.Lwip配置
配置静态地址:

6.png

添加phy芯片驱动(比较坑,只有这一个型号,想添加自己的phy只能后期再源码中更改):

7.png

堆栈设置:

8.png

回调函数接口配置,如果想在链路或状态变化时加入自定义动作时,需要开启:

9.png

5.堆栈设置
将M7内核的堆栈设置大一些,然后即可生成代码。

10.png

二、代码及编译修改
在Keil集成开发环境中,通过魔术棒界面即可修改RAM地址等参数:

11.png

但是在CubeIDE中,笔者目前是通过在ld链接脚本中修改,且每次重新生成工程后都要重新添加。笔者暂未找到其他方法,如有知道方法的博友还请告知。
在工程目录下的 STM32H755ZITX_FLASH.ld文件中,添加以下内容:

  .lwip_sec (NOLOAD) :
  {
    . = ABSOLUTE(0x30040000);
    *(.RxDecripSection)

    . = ABSOLUTE(0x30040060);
    *(.TxDecripsection)

    . = ABSOLUTE(0x30040200);
    *(.RxArraySection)
  } >RAM_D2 AT> FLASH


12.png

在主函数中,添加时钟及任务处理逻辑:

13.png

至此,即可测试电脑ping开发板功能。具体与电脑通信的任务程序,这里就不多叙述,可站内搜索RAW Socket相关通信例程。
————————————————
版权声明:本文为CSDN博主「Amonter」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45682654/article/details/151289572

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

本版积分规则

107

主题

4366

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部