STM32使用STM32CUBEMX配置FreeRTOS SDIO 4bit FATFS注意事项详解

一、使用STM32CUBEMX配置FreeRTOS+SDIO4bit+FATFS注意事项:

以STM32F429为例:
1、SDIO配置

配置为4bit模式,此配置不是最终配置,后面会在代码进行修改。
2、Fatfs配置

Set Defines 选项中的配置可以默认,最重要注意Advanced Setting 选择中的配置,如下

该界面配置默认Use dma template是默认使能的 ,并且不可以选择,只能选择使能,所以需要使能 SDIO中断和SDIO DMA(注意:如果不使能可能会出现问题),如下图所示:


在使能中断之后,注意 SDIO global 中断要小于或者等于SDIO DMA的中断,否则会出现问题
3、FreeRTOS配置
FreeRTOS配置默认即可

配置完成记得把启动文件的堆栈改大一点,如下:

生成代码即可

二、生成代码修改:

找到sdio.c文件中的void MX_SDIO_SD_Init(void)函数,修改如下:

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_4B;
  hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
  hsd.Init.ClockDiv = 4;
  /* USER CODE BEGIN SDIO_Init 2 */
	//初始化时使用1bit + SDIO_INIT_CLK_DIV初始化时钟频率
	hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
	hsd.Init.ClockDiv = SDIO_INIT_CLK_DIV;//SDIO_TRANSFER_CLK_DIV;
  /* USER CODE END SDIO_Init 2 */

}


经过实际测试,使用最大频率也是可以的,但是初始化时使用1bit+SDIO_INIT_CLK_DIV 初始化时钟频率,防止不必要的错误

在生成的bsp_driver_sd.c文件中找到__weak uint8_t BSP_SD_Init(void)函数,该函数是一个弱函数,可在其他文件复写,如下:

uint8_t BSP_SD_Init(void)
{
  uint8_t sd_state = MSD_OK;
  /* Check if the SD card is plugged in the slot */
  if (BSP_SD_IsDetected() != SD_PRESENT)
  {
    return MSD_ERROR;
  }
  /* HAL SD initialization */
  sd_state = HAL_SD_Init(&hsd);
  
  /* Configure SD Bus width (4 bits mode selected) */
  if (sd_state == MSD_OK)
  {
	hsd.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV;//改为最大传输频率
    /* Enable wide operation */
    if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK)
    {
      sd_state = MSD_ERROR;
    }
  }

  return sd_state;
}

由于使用的SD卡支持改频率,所以我采用SDIO_TRANSFER_CLK_DIV最大频率,这里分频根据不同的SD卡可做调整。

我这里是在main.c复写的。

进行实际读写测试:

调试发现能够正常读写,本次分享到此结束。

物联沃分享整理
物联沃-IOTWORD物联网 » STM32使用STM32CUBEMX配置FreeRTOS SDIO 4bit FATFS注意事项详解

发表评论