cancel
Showing results for 
Search instead for 
Did you mean: 

STM32F765 Ethernet Migration STM32Cube_FW_F7_V1.17.2

RDos
Associate II

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); }
View more

 

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

 

2 REPLIES 2
ASEHST
ST Employee

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,

If your question is answered, please close this topic by clicking "Accept as Solution".
RDos
Associate II

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