text: /**
    ******************************************************************************
    * File Name          : ETH.c
    * Description        : This file provides code for the configuration
    *                      of the ETH instances.
    ******************************************************************************
    * @attention
    *
    * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
    * All rights reserved.</center></h2>
    *
    * This software component is licensed by ST under BSD 3-Clause license,
    * the "License"; You may not use this file except in compliance with the
    * License. You may obtain a copy of the License at:
    *                        opensource.org/licenses/BSD-3-Clause
    *
    ******************************************************************************
    */
  
  /* Includes ------------------------------------------------------------------*/
  #include "eth.h"
  
  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
  
  #pragma location=0x30040000
  ETH_DMADescTypeDef  DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
  #pragma location=0x30040060
  ETH_DMADescTypeDef  DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
  #pragma location=0x30040200
  uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_MAX_PACKET_SIZE]; /* Ethernet Receive Buffers */
  
  #elif defined ( __CC_ARM )  /* MDK ARM Compiler */
  
  __attribute__((at(0x30040000))) ETH_DMADescTypeDef  DMARxDscrTab[ETH_RX_DESC_CNT]; /* Ethernet Rx DMA Descriptors */
  __attribute__((at(0x30040060))) ETH_DMADescTypeDef  DMATxDscrTab[ETH_TX_DESC_CNT]; /* Ethernet Tx DMA Descriptors */
  __attribute__((at(0x30040200))) uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_MAX_PACKET_SIZE]; /* Ethernet Receive Buffer */
  
  #elif defined ( __GNUC__ ) /* GNU Compiler */ 
  
  ETH_DMADescTypeDef DMARxDscrTab[ETH_RX_DESC_CNT] __attribute__((section(".RxDecripSection"))); /* Ethernet Rx DMA Descriptors */
  ETH_DMADescTypeDef DMATxDscrTab[ETH_TX_DESC_CNT] __attribute__((section(".TxDecripSection")));   /* Ethernet Tx DMA Descriptors */
  uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_MAX_PACKET_SIZE] __attribute__((section(".RxArraySection"))); /* Ethernet Receive Buffers */
  
  #endif
  
  ETH_TxPacketConfig TxConfig; 
  
  /* USER CODE BEGIN 0 */
  
  /* USER CODE END 0 */
  
  ETH_HandleTypeDef heth;
  
  /* ETH init function */
  void MX_ETH_Init(void)
  {
  
    heth.Instance = ETH;
    heth.Init.MACAddr[0] =   0x00;
    heth.Init.MACAddr[1] =   0x80;
    heth.Init.MACAddr[2] =   0xE1;
    heth.Init.MACAddr[3] =   0x00;
    heth.Init.MACAddr[4] =   0x00;
    heth.Init.MACAddr[5] =   0x00;
    heth.Init.MediaInterface = HAL_ETH_RMII_MODE;
    heth.Init.TxDesc = DMATxDscrTab;
    heth.Init.RxDesc = DMARxDscrTab;
    heth.Init.RxBuffLen = 1524;
  
    /* USER CODE BEGIN MACADDRESS */
      
    /* USER CODE END MACADDRESS */
  
    if (HAL_ETH_Init(&heth) != HAL_OK)
    {
      Error_Handler();
    }
  
    memset(&TxConfig, 0 , sizeof(ETH_TxPacketConfig));
    TxConfig.Attributes = ETH_TX_PACKETS_FEATURES_CSUM | ETH_TX_PACKETS_FEATURES_CRCPAD;
    TxConfig.ChecksumCtrl = ETH_CHECKSUM_IPHDR_PAYLOAD_INSERT_PHDR_CALC;
    TxConfig.CRCPadCtrl = ETH_CRC_PAD_INSERT;
  
  }
  
  void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle)
  {
  
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    if(ethHandle->Instance==ETH)
    {
    /* USER CODE BEGIN ETH_MspInit 0 */
  
    /* USER CODE END ETH_MspInit 0 */
      /* ETH 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();
      __HAL_RCC_GPIOG_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
      PB13     ------> ETH_TXD1
      PG11     ------> ETH_TX_EN
      PG13     ------> ETH_TXD0 
      */
      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_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);
  
      GPIO_InitStruct.Pin = GPIO_PIN_11|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(GPIOG, &GPIO_InitStruct);
  
    /* USER CODE BEGIN ETH_MspInit 1 */
  
    /* USER CODE END ETH_MspInit 1 */
    }
  }
  
  void HAL_ETH_MspDeInit(ETH_HandleTypeDef* ethHandle)
  {
  
    if(ethHandle->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
      PB13     ------> ETH_TXD1
      PG11     ------> ETH_TX_EN
      PG13     ------> ETH_TXD0 
      */
      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_13);
  
      HAL_GPIO_DeInit(GPIOG, GPIO_PIN_11|GPIO_PIN_13);
  
    /* USER CODE BEGIN ETH_MspDeInit 1 */
  
    /* USER CODE END ETH_MspDeInit 1 */
    }
  } 
  
  /* USER CODE BEGIN 1 */
  
  /* USER CODE END 1 */
  
  /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  