Skip to main content
Visitor II
July 18, 2024
Question

STM32F765 Ethernet Migration STM32Cube_FW_F7_V1.17.2

  • July 18, 2024
  • 2 replies
  • 1247 views

I am migrating from Cube_FW_F7_1.16.0 to STM32Cube _FW_F7 V1.17.2

But now Ethernet doesn't work.

I made changes to the file:

STM32F765VITX_FLASH.ld 

/* Highest address of the user mode stack */

_estack = 0x20080000; /* end of RAM */



MEMORY

{

FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 2047K

FLASHSW (rx) : ORIGIN = 0x081FFC00, LENGTH = 1024

RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 497K

Memory_B1(rw) : ORIGIN = 0x2007C000, LENGTH = 0xA0

Memory_B2(rw) : ORIGIN = 0x2007C0A0, LENGTH = 0xA0

}



.ARM.attributes 0 : { *(.ARM.attributes) }

.RxDecripSection (NOLOAD) : { *(.RxDecripSection) } >Memory_B1

.TxDecripSection (NOLOAD) : { *(.TxDescripSection) } >Memory_B2

main.c

 

static void MPU_Config(void)
{
MPU_Region_InitTypeDef MPU_InitStruct;

/* Disable the MPU */
HAL_MPU_Disable();

/* Configure the MPU as Strongly ordered for not defined regions */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x00;
MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.SubRegionDisable = 0x87;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;

HAL_MPU_ConfigRegion(&MPU_InitStruct);

/* Configure the MPU as Normal Non Cacheable for Ethernet Buffers in the SRAM2 */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x20078000;
MPU_InitStruct.Size = MPU_REGION_SIZE_16KB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER1;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;

HAL_MPU_ConfigRegion(&MPU_InitStruct);

/* Configure the MPU as Device for Ethernet Descriptors in the SRAM2 */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x2007C000;
MPU_InitStruct.Size = MPU_REGION_SIZE_1KB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER2;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;

HAL_MPU_ConfigRegion(&MPU_InitStruct);

/* Enable the MPU */
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}

 

I'm basing it on the example STM32Cube_FW_F7_V1.17.2\Projects\STM32F767ZI-Nucleo\Applications\LwIP\LwIP_HTTP_Server_Netconn_RTOS Do you have a tutorial similar to this for the F7 line? https://github.com/stm32-hotspot/STM32H7-LwIP-Examples

 

    This topic has been closed for replies.

    2 replies

    ST Employee
    July 22, 2024

    Hello @RDos,

     

    On my side, the example STM32Cube_FW_F7_V1.17.2\Projects\STM32F767ZI-Nucleo\Applications\LwIP\LwIP_HTTP_Server_Netconn_RTOS works fine with your changes. Could you please ensure that all Ethernet-specific configurations in this example are correctly applied to your project?

    Regarding this tutorial stm32-hotspot/STM32H7-LwIP-Examples: Ethernet examples using LwIP + FreeRTOS for STM32H7 Discovery and Nucleo boards (github.com), I assume the same steps can be applied to the STM32F7, so I suggest you follow them.

     

    With Regards,

    RDosAuthor
    Visitor II
    July 23, 2024

    I'm making a parallel between the HAL STM32H7 and the STM32F7. For me it is confusing because in F7 there is no LWIP_RAM_HEAP_POINTER configuration. I added the configuration by hand:

    LWIP_RAM_HEAP_POINTER 0x20078000.

    /* Configure the MPU as Normal Non Cacheable for Ethernet Buffers in the SRAM2 */

    MPU_InitStruct.Enable = MPU_REGION_ENABLE;

    MPU_InitStruct.BaseAddress = 0x20078000;

    MPU_InitStruct.Size = MPU_REGION_SIZE_16KB;

    MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;

    MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;

    MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;

    MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;

    MPU_InitStruct.Number = MPU_REGION_NUMBER1;

    MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;

    MPU_InitStruct.SubRegionDisable = 0x00;

    MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;

     

    HAL_MPU_ConfigRegion(&MPU_InitStruct);

     

    /* Configure the MPU as Device for Ethernet Descriptors in the SRAM2 */

    MPU_InitStruct.Enable = MPU_REGION_ENABLE;

    MPU_InitStruct.BaseAddress = 0x2007C000;

    MPU_InitStruct.Size = MPU_REGION_SIZE_1KB;

    MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;

    MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;

    MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;

    MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;

    MPU_InitStruct.Number = MPU_REGION_NUMBER2;

    MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;

    MPU_InitStruct.SubRegionDisable = 0x00;

    MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;

     

    HAL_MPU_ConfigRegion(&MPU_InitStruct);

     

    Do you have to change the linker to RX_POOL?
    
    __attribute__((section(".Rx_Pool Section"))) extern u8_t memp_memory_RX_POOL_base[];
    
    
     Memory_B3(xrw) : ORIGIN = 0x2007C200, LENGTH = 0x3E00
    
    .Rx_PoolSection (NOLOAD): { *(.Rx_PoolSection) } >Memory_B3