SRAM1地址区间是0x30000000 - 0x30003FFF。
SRAM2地址区间是0x30004000 - 0x30007FFF。
不同于H743的地址分配,且没有SRAM3区域,网上的教程没有H723的,如果按H743的方式去做,就会错。
DMARxDscrTab DMATxDscrTab Rx_Buff 的地址都要位于这里,MXcube生成的GNU编译器代码
ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT] __attribute__((section(".RxDecripSection"))); /* Ethernet Rx DMA Descriptors */ ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT] __attribute__((section(".TxDecripSection"))); /* Ethernet Tx DMA Descriptors */ uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_MAX_PACKET_SIZE] __attribute__((section(".RxArraySection"))); /* Ethernet Receive Buffers */
然后在Option for Target-->Linker里取消选择Use Memory Layout form Target Dialog,编辑sct文件,加入地址分配
SRAM1_RxDecripSection 0x30000000 0x60 { * (.RxDecripSection) } SRAM1_TxDecripSection 0x30000060 0x60 { * (.TxDecripSection) } SRAM1_RxArraySection 0x300000C0 0x2000 { * (.RxArraySection) }
EMAC_STM32H7xx.c里默认的#define EMAC_TXBUF_ADDRESS 0x30042000也是不用的,这个也是与H723的地址不匹配的,
在Option for Target-->C/C++(AC6)-->Preprocessor Symbols-->Define里加入EMAC_TXBUF_ADDRESS=0x30002000或EMAC_TXBUF_ADDRESS=0x30004000来重新分配地址。
记得配置使能0x30000000的MPU和使能I-Cache和D-Cache。