本帖最后由 sujingliang 于 2024-9-27 21:49 编辑
为了配置LWIP又花费了不少时间,虽然已有大佬在其他技术网站分享了配置过程,但轮到自己配置还是遇到不少问题。
先分析一下重点需要关注的问题吧:
一、重点
1、原理图上ETH管脚部分有错误,STM32CubeMX默认生成的也是错的
正确的如下:
- /**ETH GPIO Configuration
- PD7 ------> ETH_RMII_REF_CLK
- PD4 ------> ETH_PHY_INTN
- PG11 ------> ETH_RMII_TX_EN
- PC1 ------> ETH_MDC
- PA2 ------> ETH_MDIO
- PC4 ------> ETH_RMII_RXD0
- PA7 ------> ETH_RMII_CRS_DV
- PC5 ------> ETH_RMII_RXD1
- PB0 ------> ETH_RMII_TXD0
- PB1 ------> ETH_RMII_TXD1
- */
还有跳线JP6要调到PC1
2、要从一个好的模板开始配
完全从头配费时费力,很容易出错。而且STM32H7S78-DK配置需要考虑支持BOOT,APPLI,XIP。所以最好从一个mpu,xspi,EXTMEN_MANAGER、UART4都配好的模板开始。可以从USB_Device\MSC_Standalone例程的ioc文件开始,去掉USB、SD等等就有一个很好的基础。
3、MPU配置很关键
boot
- static void MPU_Config(void)
- {
- MPU_Region_InitTypeDef MPU_InitStruct = {0};
- /* Disables the MPU */
- HAL_MPU_Disable();
- /** Initializes and configures the Region and the memory to be protected
- */
- MPU_InitStruct.Enable = MPU_REGION_ENABLE;
- MPU_InitStruct.Number = MPU_REGION_NUMBER0;
- MPU_InitStruct.BaseAddress = 0x0;
- MPU_InitStruct.Size = MPU_REGION_SIZE_4GB;
- MPU_InitStruct.SubRegionDisable = 0x87;
- MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
- MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS;
- MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
- MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
- MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
- MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
- /** Initializes and configures the Region and the memory to be protected
- */
- MPU_InitStruct.Number = MPU_REGION_NUMBER1;
- MPU_InitStruct.BaseAddress = 0x90000000;
- MPU_InitStruct.Size = MPU_REGION_SIZE_32MB;
- MPU_InitStruct.SubRegionDisable = 0x0;
- MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
- MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
- MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
- MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
- MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
- /** Initializes and configures the Region and the memory to be protected
- */
- MPU_InitStruct.Number = MPU_REGION_NUMBER2;
- MPU_InitStruct.BaseAddress = 0x70000000;
- MPU_InitStruct.Size = MPU_REGION_SIZE_128MB;
- MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
- /** Initializes and configures the Region and the memory to be protected
- */
- MPU_InitStruct.Number = MPU_REGION_NUMBER3;
- MPU_InitStruct.BaseAddress = 0x24000000;
- MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
- MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
- MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
- MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
- /* Enables the MPU */
- HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
- }
appli可能需要重新配置mpu
|