首页 > 其他分享 >stm32读写sd卡代码解析和调试总结

stm32读写sd卡代码解析和调试总结

时间:2022-12-30 17:58:02浏览次数:43  
标签:DMA tx 读写 hdma stm32 Init InitStruct GPIO sd

一 前言   做程序员真是来不得半点偷懒,假如你对经常使用的代码不熟悉,早晚会让你付出沉重的代价。像认识自己的灵魂一样认识每行用到的代码,这才是一个合格的程序员,才不至于在出现问题的时候出现慌乱。   二 stm32读写sd卡   stm32读写sd卡的这部分代码量还是非常大的。它包含了两大部分,一部分是文件系统,另外一部分是底层的接口。笔者认为,hal层的代码相对简单一些,文件系统的代码逻辑比较复杂。想要在这里面定位一些问题,的确要对代码相当了解的。这部分不花点苦功夫是不行的。   三 hal层代码解析   hal层的代码重要关注两点,一个是接口的配置,代码如下,接口配置这块的确不复杂,可这块经常会出问题。一个容易出问题地方是接口能否被复用,另外一个容易出问题的地方是硬件的接口根本不通。这两点一定要在使用前做一些验证。

    /**SDMMC1 GPIO Configuration
    PC8     ------> SDMMC1_D0
    PC9     ------> SDMMC1_D1
    PC10     ------> SDMMC1_D2
    PC11     ------> SDMMC1_D3
    PC12     ------> SDMMC1_CK
    PD2     ------> SDMMC1_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_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF12_SDMMC1;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_2;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF12_SDMMC1;
    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

另外一个是DMA 的使用,sdio一般要用dma的,否则就凸显不出来速率了。这里的DMA链接一定要不能出错,注意的就是dma链接不能失败。

    /* SDMMC1_TX Init */
    hdma_sdmmc1_tx.Instance = DMA2_Channel5;
    hdma_sdmmc1_tx.Init.Request = DMA_REQUEST_7;
    hdma_sdmmc1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
    hdma_sdmmc1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_sdmmc1_tx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_sdmmc1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
    hdma_sdmmc1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
    hdma_sdmmc1_tx.Init.Mode = DMA_NORMAL;
    hdma_sdmmc1_tx.Init.Priority = DMA_PRIORITY_LOW;
    if (HAL_DMA_Init(&hdma_sdmmc1_tx) != HAL_OK)
    {
      Error_Handler();
    }

    __HAL_LINKDMA(sdHandle,hdmatx,hdma_sdmmc1_tx);
四 文件系统     文件系统是一个非常庞大的,不是一篇小文章能分析的透彻的。这里留在后面做一个总体的细致的分析吧。这里之给出容易出错的点,以及定位思路。这里是纯软件的东西,最笨的办法就是添加打印看返回值。比较聪明的办法就是先找和hal层的接口,一般出问题的地方就是接口部分。 五 总结    最近调试这部分,才发现很多不足之处。初始化失败该怎么分析?无法读写该怎么着手呢?通过这次的调试,算是有了一定的思路了吧。

标签:DMA,tx,读写,hdma,stm32,Init,InitStruct,GPIO,sd
From: https://www.cnblogs.com/dylancao/p/17015479.html

相关文章

  • Opentsdb安装部署(单机版)
    Opentsdb简介opentsdb是基于Hbase的时序数据库[时间序列数据库]。不具备通用性,主要针对具有时间特性和需求的数据,如监控数据、温度变化数据等。opentsdb说是数据库,但并不能......
  • 直播平台运营应该接入什么样的美颜SDK?
    说到直播平台,接入各种各样的SDK似乎已经成了时下的主流解决方案,而美颜SDK更是重中之重。因此,直播平台对于运营级的美颜SDK也有着比较高的要求,下文小编将从试运营和正式运营......
  • Visual Studio 2022 MAUI NU1105(NETSDK1005) 处理记录
    故障说明MAUI项目是日常使用的项目,一直都好好的某一天修改了几行代码后,突然项目无法编译了,提示NU1105错误从Git重新拉取一份之前的代码编译也是同样的错误,经过半天......
  • ch32F208/ch32v208/ch32v203 wch sdk工程配置相关说明
    说明wch官网的ch32v2系列的芯片只给了一个SDK:https://www.wch.cn/downloads/CH32V20xEVT_ZIP.htmlch32v2系列芯片型号众多,存储大小,和外设各不相同,wch给的例程工程......
  • Orbbec SDK使用摄像头读取并展示图像(以深度图为例)
    在上一篇文章《Linux环境下奥比中光摄像头开发环境搭建(基于OrbbecSDK)》中,我们讲解了如何在Linux下配置奥比中光摄像头的使用环境,下载了OrbbecSDK,配置其编译环境,并编译、......
  • First time to activate mb sd c4 steps
    Firsttimetoactivatembsdc4stepsOpenyourStarSetyoucomporttoCom2,115200XXOpentheEPC_NetUser:adminpasswd:12345Click“Server”Click......
  • Python读写文件说明
    f= open(path,mode)  主要就是modemode解释如下:摘自菜鸟教程......
  • Android SDK的安装与配置
    测试Android应用的时候经常会使用adb命令,怎么才能使用adb相关的命令?一、AndroidSDK简介AndroidSDK(SoftwareDevelopmentKit,软件开发工具包)被软件开发工程师用于为特定......
  • freebsd 开启snmp
    参考配置https://blog.csdn.net/gaga_yan/article/details/38512937这个里面有个生成默认snmp配置的挺好使snmpconf-gbasic_setup按照说明生成配置文件遇到的......
  • MM SD 常用BAPI DEMO列表
    下面是最近这段时间整理的MMSD常用BAPI的demo。暂时先整理这些,后面关于什么盘点,预留等等的吧再慢慢追加吧。最近忙。忙完这阵再整理其他模块的BAPI。目前是想整理完BAPId......