static void MPU_Config( void ); int main(void) { int32_t timeout = 0xFFFF; while( ( __HAL_RCC_GET_FLAG( RCC_FLAG_D2CKRDY ) != RESET ) && ( timeout > 0 ) ) { timeout--; } if ( timeout < 0 ) { Error_Handler(); } /* Enable I-Cache */ SCB_EnableICache(); /* Make the AXI memory non-cacheable */ MPU_Config(); /* Enable D-Cache */ SCB_EnableDCache(); /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); ... } static void MPU_Config( void ) { MPU_Region_InitTypeDef MPU_InitStruct; /* Prohibit MPU */ HAL_MPU_Disable(); /* Configure the MPU attributes of AXI SRAM as Write back, Read allocate, Write allocate */ MPU_InitStruct.Enable = MPU_REGION_ENABLE; MPU_InitStruct.BaseAddress = 0x24000000; // AXI memory where ETH descriptors and buffers are stored MPU_InitStruct.Size = MPU_REGION_SIZE_512KB; 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_SHAREABLE; MPU_InitStruct.Number = MPU_REGION_NUMBER0; MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1; MPU_InitStruct.SubRegionDisable = 0x00; MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE; HAL_MPU_ConfigRegion(&MPU_InitStruct); /*Enable MPU */ HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT); }