【STM32+HAL】SDIO+DMA模式读写SD卡

一、准备工作

有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32+HAL】CUBEMX初始化配置

二、所用工具


1、芯片: STM32F407ZGT6

2、IDE: MDK-Keil软件

3、库文件:STM32F4xxHAL库

三、实现功能

实现用SDIO+DMA读写SD卡内容

四、HAL库配置

1、开启SDIO

模式配置为1bit,开启DMA传输,开启中断

 Clock transition on which the bit capture is made (时钟跳变沿捕获数据配置):数据捕获边沿设置,可设置为上升沿/下降沿

 SDIO Clock divider bypass (时钟分频器旁路使能):使能该参数时,SDIO_CLK=SDIOCLK;否则SDIO_CLK频率由时钟分频因子决定

 SDIO Clock output enable when the bus is idle (空闲模式时钟输出使能):节能模式,此实验不使能

 SDIO hardware flow control (硬件流控):设置是否使能SDIO的硬件流控,此处不使能

 SDIOCLK clock divide factor (时钟分频因子):当不使能时钟分频器旁路时,SDIO_CLK=SDIOCLK / (2+时钟分频因子)

2、开启串口通信

至此,HAL库配置完毕 

五、Keil填写代码

1、SD.h
#ifndef __SD_H__
#define __SD_H__#include "sdio.h"
#include "stdio.h"void SDCard_TestRead(void);
void SDCard_TestWrite(void);
void SDCard_ShowInfo(void);
void SDCard_EraseBlocks(uint8_t BlockAddrStart,uint8_t BlockAddrEnd);void SDCard_Write_DMA(uint8_t *TX, uint32_t BlockCount, uint32_t BlockAddr);
void SDCard_Read_DMA(uint8_t *RX,uint32_t BlockCount,uint32_t BlockAddr);#endif

2、SD.c

篇幅有限,仅提供SD.c核心代码

/*** @brief  SD卡DMA写入函数* @param  uint8_t *TX: 写入数据数组(若要存入负数,需提前加一个数值,典型值为127,此时数据范围为-127 ~ 128)* @param  BlockCount:  写入的总片数* @param  BlockAddr:   起始写入的片数*/
void SDCard_Write_DMA(uint8_t *TX, uint32_t BlockCount, uint32_t BlockAddr)
{HAL_SD_WriteBlocks_DMA(&hsd, TX, BlockAddr, BlockCount);				//存入TX数组数据到sd卡
}/*** @brief  SD卡DMA读取函数* @param  uint8_t *RX: 读取数据数组(若已存入负数,需在打印时减一个数值,典型值为127,此时数据范围为-127 ~ 128)* @param  BlockCount:  读取的总片数* @param  BlockAddr:   起始读取的片数*/
void SDCard_Read_DMA(uint8_t *RX, uint32_t BlockCount, uint32_t BlockAddr)
{HAL_SD_ReadBlocks_DMA(&hsd, RX, BlockAddr, BlockCount);					//读取sd卡数据到RX数组
}/*** @brief  SD卡擦除函数* @param  BlockAddrStart: 擦除开始块数* @param  BlockAddrEnd:   擦除结束块数*/
void SDCard_EraseBlocks(uint8_t BlockAddrStart,uint8_t BlockAddrEnd)
{printf("\r\n*** Erasing blocks ***\r\n");if(HAL_SD_Erase(&hsd, BlockAddrStart, BlockAddrEnd)==HAL_OK)		//擦除数据printf("Erasing blocks,OK\r\n");elseprintf("Erasing blocks,fail\r\n");HAL_SD_CardStateTypeDef cardState=HAL_SD_GetCardState(&hsd);printf("GetCardState()= %d\r\n", cardState);						//打印当前sd卡数据状态while(cardState != HAL_SD_CARD_TRANSFER){HAL_Delay(1);cardState=HAL_SD_GetCardState(&hsd);}printf("Blocks %d-%d is erased.\r\n",BlockAddrStart, BlockAddrEnd);
}

3、main.c
 uint8_t rx[BLOCKSIZE],tx[BLOCKSIZE];/* USER CODE BEGIN 2 */printf("Hello World\r\n");HAL_Delay(500);SDCard_Write_DMA(tx,1,6);HAL_Delay(500);SDCard_Read_DMA(rx,1,6);HAL_Delay(500);SDCard_EraseBlocks(0,10);/* USER CODE END 2 */

六、巨人之肩

【STM32+HAL】利用SDIO将大量数据存入SD卡,并根据需要读出

STM32CubeMX教程27 SDIO - 读写SD卡

七、源码提供

资源【STM32+HAL】SDIO+DMA模式读写SD卡

八、更多DMA应用

详见【STM32+HAL】DMA应用

九、结语

本人能力有限,代码未必是最优解,若有可改进之处望在评论区留言,采纳有赏~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/6012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05_机器学习赛事_优惠券使用预测

1. 函数库导入 # import libraries necessary for this project import os, sys, pickleimport numpy as np import pandas as pdimport matplotlib.pyplot as plt import matplotlib.dates as mdatesimport seaborn as sns import datetime as dtfrom datetime import datefr…

如何删除BigKey

③第三方工具 利用第三方工具,如 Redis-Rdb-Tools 分析RDB快照文件,全面分析内存使用情况https://github.com/sripathikrishnan/redis-rdb-tools ④网络监控 自定义工具,监控进出Redis的网络数据,超出预警值时主动告警一般阿里…

拼多多新店和老店哪个好做

拼多多新店和老店哪个好做 拼多多推广可以使用3an推客。3an推客(CPS模式)给商家提供的营销工具,由商家自主设置佣金比例,激励推广者去帮助商家推广商品链接,按最终有效交易金额支付佣金,不成交不扣费。是商…

34.Docker基本操作

镜像相关的命令 镜像名称分为两部分组成:[repository]:[tag],tag就是镜像的版本。如果tag没有指定默认就是latest,表示最新版本的镜像。 查看docker命令的帮助信息 docker --help 具体某条命令的帮助信息 docker images --help 案例一:从DockerHub中…

5G赋能 扬帆未来|AGV无人仓成黑科技“顶流”

AGV 近年来,无人化这个概念逐渐被运用到了社会中的各个行业,而跟物流有关的就有无人分拣机器人、无人驾驶卡车、和无人叉车,越来越多的新装备也开始投入到实际运用中。 仓储管理在物流管理中占据着核心地位。传统的仓储管理中存在诸多的弊端…

发卡盗u源码系统搭建ZHU

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包去除后门板,最好是部署智能合约后用合约地址来授权包含转账支付页面盗U授权源码。 完美提U,教程包含如何提u 。功能完美。 1.Php静态 2.目录puicta 3.扩sal 4.ssl不强https

SQL数据库

一.什么是数据库 数据库:存储数据的仓库,数据是有组织的进行存储。(database 简称DB) 数据库管理系统:管理数据库的大型软禁(DataBase Management System 简称DBMS) SQL:操作关系…

Golang | Leetcode Golang题解之第63题不同路径II

题目&#xff1a; 题解&#xff1a; func uniquePathsWithObstacles(obstacleGrid [][]int) int {n, m : len(obstacleGrid), len(obstacleGrid[0])f : make([]int, m)if obstacleGrid[0][0] 0 {f[0] 1}for i : 0; i < n; i {for j : 0; j < m; j {if obstacleGrid[i]…

《读懂财务报表》手绘版读书笔记:通过报表找好公司

通过财报的三张表判断好公司&#xff1a; 然后是在三表中&#xff0c;计算各个项目占总体的比例&#xff0c;以及做比率分析&#xff0c; 比率分析&#xff0c;从偿还能力&#xff0c;运营能力&#xff0c;盈利能力三方面分析&#xff1a; 1&#xff09; 偿还能力 2&#xff09…

【工具】--- Adobe Illustrator 下载-入门绘图

文章目录 软件下载入门项目可看课程 尝试使用Adobe Illustrator&#xff08;设计师常用软件&#xff09;进行科研绘图。 软件下载 阿里云盘下载 入门项目 绘制一个箭头并保持为SVG&#xff0c; 直线->画线->窗口->描边->选择想要的箭头样式->颜色->改为蓝…

Python量化炒股的获取数据函数—get_index_weights()

Python量化炒股的获取数据函数—get_index_weights() 获取指数成分股权重函数get_index_weights()可以获取一个指数给定日期在平台交易的成分股权重&#xff0c;其语法格式如下&#xff1a; get_index_weights(index_id, dateNone)该函数的参数与获取指数成分股代码函数get_i…

人工智能|推荐系统——工业界的推荐系统之概要

以小红书为例的推荐系统的转化流程&#xff0c;用户看到内容就是曝光&#xff0c;可以点击进去&#xff0c;然后进行一些“交互”行为&#xff0c;比如评论、点赞、收藏、转发。 通常会考虑用户的一些消费指标 而从推荐系统的角度则会考虑一些北极星指标&#xff0c;也就是优化…

微信小程序demo-----制作文章专栏

前言&#xff1a;不管我们要做什么种类的小程序都涉及到宣传或者扩展其他业务&#xff0c;我们就可以制作一个文章专栏的页面&#xff0c;实现点击一个专栏跳转到相应的页面&#xff0c;页面可以有科普类的知识或者其他&#xff0c;然后页面下方可以自由发挥&#xff0c;添加联…

OBD读取车辆里程数

OBD(On-Board Diagnostics)系统可以通过车辆的OBD接口读取多种车辆数据,但关于里程数的读取,情况稍微复杂一些。以下是关于通过OBD读取车辆里程数的详细解释: OBD输出信息中与里程相关的数据: 在标准的OBD输出信息中,并不直接提供车辆的总里程数。它主要提供的是与故障相…

spring boot学习第十八篇:使用clickhouse

1、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://…

ConcurrentLinkedQueue 原理

文章目录 1. 模仿 ConcurrentLinkedQueue 1. 模仿 ConcurrentLinkedQueue ConcurrentLinkedQueue 的设计与 LinkedBlockingQueue 非常像&#xff0c;也是 两把【锁】&#xff0c;同一时刻&#xff0c;可以允许两个线程同时&#xff08;一个生产者与一个消费者&#xff09;执行…

Node.js -- MongoDB

文章目录 1. 相关介绍2. 核心概念3. 命令行交互3.1数据库命令3.2 集合命令3.3 文档命令 4. 数据库应用场景4.1 新增4.2 删除4.3 更新4.4 查询 5. 图形化工具Robo 3T 1. 相关介绍 一、简介 Mongodb是什么 MongoDB是一个基于分布式文件存储的数据库&#xff0c;官方地址https://…

深入图像分类:使用美国手语数据集训练定制化神经网络

引言 在前一篇博客中&#xff0c;我们探讨了如何使用MNIST数据集训练一个基础的神经网络来进行手写数字识别。在本文中&#xff0c;我们将更进一步&#xff0c;使用美国手语字母表&#xff08;ASL&#xff09;数据集来构建一个定制化的图像分类模型。通过这个过程&#xff0c;…

[嵌入式系统-53]:嵌入式系统集成开发环境大全 ( IAR Embedded Workbench(通用)、MDK(ARM)比较 )

目录 一、嵌入式系统集成开发环境分类 二、由MCU芯片厂家提供的集成开发工具 三、由嵌入式操作提供的集成开发工具 四、由第三方工具厂家提供的集成开发工具 五、开发工具的整合 5.1 Keil MDK for ARM 5.2 IAR Embedded Workbench&#xff08;通用&#xff09;、MDK&…

EasyRecovery2024汉化版电脑数据恢复软件下载

EasyRecovery是一款功能强大的数据恢复软件&#xff0c;其主要功能包括但不限于以下几点&#xff1a; 硬盘数据恢复&#xff1a;能够扫描本地计算机中的所有卷&#xff0c;建立丢失和被删除文件的目录树&#xff0c;实现硬盘格式化、重新分区、误删数据、重建RAID等硬盘数据恢…