Skip to main content
Senior
May 6, 2025
Question

Cube does not generate initialization code for Ethernet GPIO

  • May 6, 2025
  • 1 reply
  • 380 views

Hello @Sara BEN HADJ YAHYA and @all,

I just came across the "eth.c and etc.h not generated" problem as mentioned in this older thread CubeIDE 1.9.0, and CubeH7 1.10.0 does not generate HAL_ETH_MspInit .

In this thread, which is unfortunately read only, are two topics unanswered, maybe some people here can find out what happened to them in the meantime.

1st there is a "internal ticket number" : what happend to it?

2nd there is a workaround suggested which does not work around anything for me. The files are still not generated, no matter if the LAN8742 PHY component is configured or this parameter is set to UNDEFINED.

I'm here on Cube V6.14.1 and H75x. I want to use the KSZ8863 switch and I'm just starting to write code for it, so it would be great to know, how to integrate my code in the code into the generated project in such a way it is "Cube compliant", e.g. disable LWIP in Cube, generate code including eth.c/.h files, rename the files, re-enable lwip in Cube and generate final code which now includes the previously saved ethernet initialization files. Any better idea?

BTW: I share the feeling that the H7 Ethernet pin initialization belongs to the HW layer and not to lwip or other 3rd party stuff.

Thanks,

Jochen

1 reply

Ghofrane GSOURI
Technical Moderator
May 6, 2025

Hello @regjoe 

First let me thank you for bringing this issue to our attention.

1- Regarding the missing generation of  HAL_ETH_MspInit and HAL_ETH_MspDeInit : A ticket has been escalated to development team to fix this issue as soon as possible .

Internal ticket number : 209243 

As a workaround try to add the following code in user section in stm32h7xx_hal_msp.c

void HAL_ETH_MspInit(ETH_HandleTypeDef* heth)
{
 GPIO_InitTypeDef GPIO_InitStruct = {0};
 if(heth->Instance==ETH)
 {
 /* USER CODE BEGIN ETH_MspInit 0 */

 /* USER CODE END ETH_MspInit 0 */
 /* Peripheral clock enable */
 __HAL_RCC_ETH1MAC_CLK_ENABLE();
 __HAL_RCC_ETH1TX_CLK_ENABLE();
 __HAL_RCC_ETH1RX_CLK_ENABLE();

 __HAL_RCC_GPIOC_CLK_ENABLE();
 __HAL_RCC_GPIOA_CLK_ENABLE();
 __HAL_RCC_GPIOB_CLK_ENABLE();
 /**ETH GPIO Configuration
 PC1 ------> ETH_MDC
 PA1 ------> ETH_REF_CLK
 PA2 ------> ETH_MDIO
 PA7 ------> ETH_CRS_DV
 PC4 ------> ETH_RXD0
 PC5 ------> ETH_RXD1
 PB11 ------> ETH_TX_EN
 PB12 ------> ETH_TXD0
 PB13 ------> ETH_TXD1
 */
 GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

 GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7;
 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

 GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13;
 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

 /* USER CODE BEGIN ETH_MspInit 1 */

 /* USER CODE END ETH_MspInit 1 */

 }

}

/**
 * @brief ETH MSP De-Initialization
 * This function freeze the hardware resources used in this example
 * @param heth: ETH handle pointer
 * @retval None
 */
void HAL_ETH_MspDeInit(ETH_HandleTypeDef* heth)
{
 if(heth->Instance==ETH)
 {
 /* USER CODE BEGIN ETH_MspDeInit 0 */

 /* USER CODE END ETH_MspDeInit 0 */
 /* Peripheral clock disable */
 __HAL_RCC_ETH1MAC_CLK_DISABLE();
 __HAL_RCC_ETH1TX_CLK_DISABLE();
 __HAL_RCC_ETH1RX_CLK_DISABLE();

 /**ETH GPIO Configuration
 PC1 ------> ETH_MDC
 PA1 ------> ETH_REF_CLK
 PA2 ------> ETH_MDIO
 PA7 ------> ETH_CRS_DV
 PC4 ------> ETH_RXD0
 PC5 ------> ETH_RXD1
 PB11 ------> ETH_TX_EN
 PB12 ------> ETH_TXD0
 PB13 ------> ETH_TXD1
 */
 HAL_GPIO_DeInit(GPIOC, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5);

 HAL_GPIO_DeInit(GPIOA, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7);

 HAL_GPIO_DeInit(GPIOB, GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13);

 /* USER CODE BEGIN ETH_MspDeInit 1 */

 /* USER CODE END ETH_MspDeInit 1 */
 }

}

 

 

THX

Ghofrane

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.