STM32F103ZET6 SDIO FATFS 读写SD卡 例程(读写挂载错误排除)

一、首先我们要对串口进行重定向(在没有屏幕或者其他提示的情况下方便调试错误),注意在flash config里面勾选microlib。

int fputc(int ch,FILE *f){
	HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,1000);
	return ch;
}

重定向过程中遇到如下问题:编译时出现error: #20: identifier “FILE” is undefined 

解决方法:

        1、在该函数的定义中添加#include "stdio.h"头文件

        2、添加了头文件依旧报错,这时候其实和头文件没有关系了,我们要在FILE的使用之前定义

typedef struct __FILE FILE;

二、接下来要配置SDIO和FATFS

参考配置:FATFS SDIO配置方法 

参考文件读写方式:FATFS 文件读写方法参考

出现的问题:

        1、SD卡HAL库初始化成功,能顾正确读取存储卡信息(可用容量与总容量),但是挂载不成功

(1)

res = f_mount(&fs_t, "0:", 1);       /* 挂载SD卡 */

返回值为1,FR_DISK_ERR,            /* (1) A hard error occurred in the low level disk I/O layer */

原因是因为分配的读取速度过快,修改方式 hsd.Init.ClockDiv = 9;要根据你的SDIO实际的总线频率来修改,和时钟树有关

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 = 9;
  /* USER CODE BEGIN SDIO_Init 2 */

  /* USER CODE END SDIO_Init 2 */

}

(2)返回值为3,FR_NOT_READY,            /* (3) The physical drive cannot work */

原因是因为存储卡有热插拔检测,在你设置的热插拔检测IO口上,将它设置为输入,并且设置为下拉输入,可以免除没有检测连接的影响

(2)、代码如下&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

potato_potato_123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值