裸机STM32+CubeMX配置SDIO+FATFS

【举报再看养成习惯,噢 不对,点赞再看养成习惯。感谢支持】

本次实验内容:读取STM32开发板上的SD卡中的内容。

实验平台:野火STM32 F103指南者开发板
软件:STM32CubeMX 6.0.1版本、Keil Ver:5.25.2.0

=============================分割线==================================

要使用SD卡,就要用到SDIO适配器:那么先来看两个时钟的配置(下图中有两处SDIO时钟)

SDIO(上面的72M的):又叫SDIO_CLK,主要负责数据通道、命令通道、控制单元,和SD卡通信

下面的(HCLK/2)的SDIO(36M的):主要负责适配器的寄存器和FIFO缓存,和AHB总线连接。

 

        SDIO_CK是卡的时钟:        每个时钟周期在命令和数据线上传输1 位命令或数据。
        多媒体卡 V3.31协议:        时钟频率可以在0MHz至 20MHz 间变化;
        多媒体卡V4.0/4.2协议:     时钟频率可 以在0MHz至 48MHz 间变化;
        SD或SD I/O卡:                 时钟频率可以在0MHz至 25MHz 间变化。

所以我们配置SD卡的时钟时使用的是72M的那个,SDIO_CLK。

分频的配置我参考了野火的文档,分频数配置为178。但是后来实际测试不按照这个也行....可能是卡的问题吧。

 

=============================分割线==================================

废话少说直接上图:看CubeMX中如何配置SD卡。

下面的分频,本来应该是178的,后来我设置成5测试一下会不会出问题。

 FATFS文件系统的配置之上上面两点,其他的默认即可。

================================分割线=================================

生成代码:

代码生成后,在main函数的初始化中加入下面程序来测试是否读取成功:

int SDTest(void){

    // 挂载文件系统
    retSD = f_mount(&SDFatFS, SDPath, 1);
    if(retSD)
    {
        SEGGER_RTT_printf(0,"mount error : %d \r\n",retSD);
        return -1;
    }
    else
    {
        SEGGER_RTT_printf(0,"mount sucess!!! \r\n");
    }
 
    HAL_SD_CardCIDTypeDef CID;
    HAL_StatusTypeDef s1 = HAL_SD_GetCardCID(&hsd, &CID);
    HAL_SD_CardCSDTypeDef CSD;
    HAL_StatusTypeDef s2 = HAL_SD_GetCardCSD(&hsd, &CSD);
    HAL_SD_CardStatusTypeDef status;
    HAL_StatusTypeDef s3 = HAL_SD_GetCardStatus(&hsd, &status);
    HAL_SD_CardInfoTypeDef cardInfo;
    HAL_StatusTypeDef s4 = HAL_SD_GetCardInfo(&hsd, &cardInfo);
 
    uint32_t fCardSize = 1.0*cardInfo.BlockNbr*cardInfo.BlockSize/1024/1024;
	  SEGGER_RTT_printf(0,"BlockNum=%d   BlockSize=%d \r\n",cardInfo.BlockNbr,cardInfo.BlockSize);
    SEGGER_RTT_printf(0,"Card Size:%d M\r\n", fCardSize);

    return 1;
}

打印结果:卡大小为128M。基本符合。

 

我看网上很多说还要添加两句话,

 但是我看了一下,当前版本的CubeMX不需要调用这里,CubeMX生成的初始化程序中已经帮我们调用过这两个函数了,是在MX_FATFS_Init();函数中实现的。

参考文章:

  1. https://blog.csdn.net/chenjk10/article/details/105205401
  2. https://blog.csdn.net/elikang/article/details/80736726?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-3.control
  3. https://www.icxbk.com/ask/detail/23641.html
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值