text: /**
    ******************************************************************************
    * @file    sdio.c
    * @brief   This file provides code for the configuration
    *          of the SDIO instances.
    ******************************************************************************
    * @attention
    *
    * <h2><center>&copy; Copyright (c) 2021 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 "sdio.h"
  
  /* USER CODE BEGIN 0 */
  
  /* USER CODE END 0 */
  
  SD_HandleTypeDef hsd;
  
  /* SDIO init function */
  
  void MX_SDIO_SD_Init(void)
  {
  
    /* USER CODE BEGIN SDIO_Init 0 */
  
    /* USER CODE END SDIO_Init 0 */
  
    /* USER CODE BEGIN SDIO_Init 1 */
  
    /* USER CODE END SDIO_Init 1 */
    hsd.Instance = SDIO;
    hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
    hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
    hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
    hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
    hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
    hsd.Init.ClockDiv = 8;
    if (HAL_SD_Init(&hsd) != HAL_OK)
    {
      Error_Handler();
    }
    if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
    {
      Error_Handler();
    }
    /* USER CODE BEGIN SDIO_Init 2 */
  
    /* USER CODE END SDIO_Init 2 */
  
  }
  
  void HAL_SD_MspInit(SD_HandleTypeDef* sdHandle)
  {
  
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    if(sdHandle->Instance==SDIO)
    {
    /* USER CODE BEGIN SDIO_MspInit 0 */
  
    /* USER CODE END SDIO_MspInit 0 */
      /* SDIO clock enable */
      __HAL_RCC_SDIO_CLK_ENABLE();
  
      __HAL_RCC_GPIOC_CLK_ENABLE();
      __HAL_RCC_GPIOD_CLK_ENABLE();
      /**SDIO GPIO Configuration
      PC8     ------> SDIO_D0
      PC9     ------> SDIO_D1
      PC10     ------> SDIO_D2
      PC11     ------> SDIO_D3
      PC12     ------> SDIO_CK
      PD2     ------> SDIO_CMD
      */
      GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
                            |GPIO_PIN_12;
      GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
      GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
      HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  
      GPIO_InitStruct.Pin = GPIO_PIN_2;
      GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
      GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
      HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  
    /* USER CODE BEGIN SDIO_MspInit 1 */
  
    /* USER CODE END SDIO_MspInit 1 */
    }
  }
  
  void HAL_SD_MspDeInit(SD_HandleTypeDef* sdHandle)
  {
  
    if(sdHandle->Instance==SDIO)
    {
    /* USER CODE BEGIN SDIO_MspDeInit 0 */
  
    /* USER CODE END SDIO_MspDeInit 0 */
      /* Peripheral clock disable */
      __HAL_RCC_SDIO_CLK_DISABLE();
  
      /**SDIO GPIO Configuration
      PC8     ------> SDIO_D0
      PC9     ------> SDIO_D1
      PC10     ------> SDIO_D2
      PC11     ------> SDIO_D3
      PC12     ------> SDIO_CK
      PD2     ------> SDIO_CMD
      */
      HAL_GPIO_DeInit(GPIOC, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
                            |GPIO_PIN_12);
  
      HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2);
  
    /* USER CODE BEGIN SDIO_MspDeInit 1 */
  
    /* USER CODE END SDIO_MspDeInit 1 */
    }
  }
  
  /* USER CODE BEGIN 1 */
  
  /* USER CODE END 1 */
  
  /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  