运用STM32对SD卡数据读取

本文介绍了如何使用Altium Designer 18绘制STM32最小系统和STM32+SD卡的原理图,详细讲解了SD卡的物理结构和引脚定义,并阐述了建立工程、配置代码、烧录运行的过程,最终实现了SD卡的数据读取功能。
摘要由CSDN通过智能技术生成

一、利用Altium Designer 18绘制原理图

1 Altium Designer 18的安装

1.1 下载和破解

百度网盘下载链接:Altium Designer 18
提取码:fnr9
下载完毕之后,我们解压出来可以得到如下文件夹。
在这里插入图片描述
选择安装程序。
在这里插入图片描述
直接点击next。
在这里插入图片描述
可以根据个人需要决定需不需要汉化。(可能安装完毕后并没有看见汉化,关闭后重新进入就会看见汉化了。)
在这里插入图片描述
接下来一直next就可,安装路径选择自己能一下找到的为后面破解做准备。
在这里插入图片描述
点击finish后,找到shfolder.dll文件。复制这个文件。
在这里插入图片描述
找到安装路径。在X2.exe的目录下,将文件粘贴进去,替换掉之前的文件。
在这里插入图片描述
然后我们就可以打开Altium Designer 18。找到license管理进行破解。
在这里插入图片描述
在和谐包中任意选一个就可以。
在这里插入图片描述
再进行本地化勾选。
在这里插入图片描述
现在我们已经可以正常使用了。

1.2 添加元件库

Altium Designer 18里面有一些元件库,但为了下面画图比较方便,我们再加入需要的元件库。(因为Altium Designer 18还可以自己设计画出元件,所以应用泛性很高。)
百度网盘下载链接:元件库.zip
提取码:luha
同样解压缩,还是放到自己方便找到的路径。
在这里插入图片描述
然后我们进入Altium Designer 18。选择从文件中安装。
在这里插入图片描述
选中元件库的三个文件。
在这里插入图片描述
添加后直接close就可以了。

2 stm32最小系统的电路原理图

在这里插入图片描述
双击添加到画板开始作图。所以元器件寻找都是这个过程。
在这里插入图片描述
电源和地端口:
在这里插入图片描述
选中元器件后按TAB键可以进行信息修改,按回车修改完成。接下来就可以开始绘图了。
stm32f103c8t6芯片
在这里插入图片描述
指示灯
R:Miscellaneous Devices LC.IntLib 元件库中搜索 0805 1k
D:Miscellaneous Devices LC.IntLib 元件库中搜索 0603
在这里插入图片描述
去耦电路
C:Miscellaneous Devices LC.IntLib 元件库中搜索 0805 100nf
在这里插入图片描述
晶振电路
Y:Miscellaneous Devices.IntLib 元件库中搜索 XTAL
C:Miscellaneous Devices LC.IntLib 元件库中搜索 0805 22pf
在这里插入图片描述
复位电路
S:Miscellaneous Devices.IntLib 元件库中搜索 SW-PB
C:Miscellaneous Devices LC.IntLib 元件库中搜索 0805 1uf
在这里插入图片描述
降压电路
AMS1117:stm32f103c8t6 最小系统.SchLib 元件库中
在这里插入图片描述
下载方式选择及程序烧录接口
P:Miscellaneous Connectors.IntLib 元件库中搜索 MHDR
在这里插入图片描述
输入、输出电源
J:base.SchLib 元件库中搜索 USB micro
在这里插入图片描述
排针
P:Miscellaneous Connectors.IntLib 元件库中搜索 MHDR1X16
在这里插入图片描述

3 STM32+SD卡 的系统原理图设计

3.1 SD卡物理结构

在这里插入图片描述
SD 卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器 5 个部分。
存储单元:是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输;
电源检测单元:保证 SD 卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;
卡及接口控制单元:控制 SD 卡的运行状态,它包括有 8 个寄存器;
接口驱动器:控制 SD 卡引脚的输入输出。
在这里插入图片描述

3.2 SD卡引脚定义

在这里插入图片描述

3.3 STM32+SD卡 的系统原理图绘制

在之前STM32的原理图上进行绘制。
SD卡原理图
AMS1117:stm32f103c8t6 最小系统.SchLib 元件库中
P:Miscellaneous Connectors.IntLib 元件库中搜索 MHDR
C:Miscellaneous Devices LC.IntLib 元件库中搜索 0805 100uf
在这里插入图片描述
STM32+SD卡总览
在这里插入图片描述

二、SD卡的数据读取

1 建立工程

配置FATFS:
在这里插入图片描述
配置SYS:
在这里插入图片描述
GPIO口设置:
在这里插入图片描述
SPI设置:
在这里插入图片描述
USART1设置:
在这里插入图片描述
时钟设置:
在这里插入图片描述
生成工程:
在这里插入图片描述

2 修改代码

百度网盘链接:头文件下载
提取码:fb1b
在这里插入图片描述
将两个文件添加到自己的工程中。接下来修改代码。
user_diskio.c:
头文件添加:

#include "diskio.h"        /* Declarations of disk functions */
#include "SDdriver.h"
  uint8_t res;
	res = SD_init();//SD_Initialize() 
		 	if(res)//STM32 SPI的bug,在sd卡操作失败的时候如果不执行下面的语句,可能导致SPI读写异常
			{
   
				SPI_setspeed(SPI_BAUDRATEPRESCALER_256);
				spi_readwrite(0xff);//提供额外的8个时钟
				SPI_setspeed(SPI_BAUDRATEPRESCALER_2);
			}
	if(res)return  STA_NOINIT;
	else return RES_OK; //初始化成功

在这里插入图片描述
main.c:

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under Ultimate Liberty license
  * SLA0044, the "License"; You may not use this file except in compliance with
  * the License. You may obtain a copy of the License at:
  *                             www.st.com/SLA0044
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "fatfs.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "SDdriver.h"




/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
### 回答1: stm32f4系列的微控制器可以使用SPI(串行外设接口)来读写TF(TransFlash)卡,以下是具体的步骤: 1. 初始化SPI接口:首先需要初始化SPI接口,包括设置时钟、模式以及数据位顺序等。可以使用STM32CubeMX工具来配置SPI参数,并生成初始化代码。 2. 初始化TF卡:在开始读写之前,需要对TF卡进行初始化。具体的初始化步骤包括复位、发送初始化命令以及等待TF卡的应答。 3. 发送读写命令:通过SPI接口发送读写命令给TF卡。读写命令包括读取扇区的命令和写入扇区的命令。根据需要,可以设置读写起始地址和扇区大小等参数。 4. 读取数据:通过SPI接口读取TF卡中的数据。可以使用SPI的双向模式,通过同时发送和接收数据来实现读取操作。 5. 写入数据:通过SPI接口将数据写入TF卡。可以先发送写入命令,然后再发送待写入的数据。在写入完成后,可以发送停止写入命令以确保数据的正确保存。 需要注意的是,使用SPI接口读写TF卡时,需要遵循TF卡的通信协议,包括时序、命令格式以及应答等。可以参考相关的TF卡规格文档来了解具体的通信细节,并根据需求进行相应的处理。 另外,STM32Cube库中提供了相关的SPI和MMC(多媒体卡)驱动程序,可以方便地进行TF卡的读写操作。使用这些库函数可以更加简化和加速开发过程。 ### 回答2: STM32F4是一款高性能的单片机系列,适用于各种应用领域。其中SPI是一种常见的串行通信协议,用于在微控制器和外部设备之间进行数据传输。TF卡(TransFlash卡,也称为MicroSD卡)是一种常见的存储媒体,通常用于嵌入式系统中的数据存储。 在STM32F4上实现SPI读写TF卡的过程如下: 1. 配置SPI外设:首先,要配置STM32F4的SPI外设以与TF卡进行通信。设置SPI的工作模式、数据位宽、波特率等参数。 2. 初始化GPIO引脚:为了与TF卡进行通信,需要将SPI相关的GPIO引脚配置为AF模式(即选择SPI功能)。 3. 初始化TF卡:通过发送特定的命令和数据序列,初始化TF卡。这些命令和数据序列可以在TF卡的规格文档中找到。 4. 数据传输:在读取或写入TF卡之前,需要发送特定的命令和地址序列,以确定读取/写入的位置和长度。然后,可以通过SPI接口进行数据传输。 5. 错误处理:在每次传输完成后,需要检查SPI的状态寄存器以确定传输是否成功。如果出现错误,则可以采取相应措施,例如重新尝试传输或发出错误提示。 通过以上步骤,可以实现STM32F4与TF卡之间的SPI读写。需要注意的是,在编程中要根据实际情况进行适当的延时,以确保TF卡的稳定操作。此外,还要注意SPI通信的时序和电气特性,以保证数据的正确传输。 总结起来,通过配置SPI外设、初始化GPIO引脚、初始化TF卡、数据传输和错误处理,可以在STM32F4上实现SPI读写TF卡的功能。 ### 回答3: STM32F4是一款强大的微控制器,它支持多种外设,包括SPI(串行外设接口)。要在STM32F4上实现SPI读写TF卡,我们需要按照以下步骤进行配置和操作。 首先,我们需要在STM32F4上启用SPI功能。在STM32CubeIDE开发环境中,我们可以使用CubeMX软件来设置SPI接口的引脚和速度。在设置引脚时,我们需要选择合适的引脚来连接TF卡的SDI、SDO、CLK和CS线。我们还需要选择适当的时钟分频值来设置SPI时钟速度。 配置完毕后,我们可以开始编写代码。首先,我们需要初始化SPI外设以及TF卡。我们可以使用STM32库函数来配置SPI的寄存器,设置传输模式(全双工或半双工)、数据位(8位或16位)、极性(高或低)等参数。我们还需要初始化TF卡的通讯协议,发送初始化命令并等待卡片完成初始化。 一旦SPI和TF卡初始化完成,我们就可以开始进行读写操作了。对于读操作,我们需要发送读命令以及所需的寄存器地址,然后等待TF卡返回数据。对于写操作,我们需要发送写命令以及所需的寄存器地址和数据,确保数据成功写入TF卡。我们可以使用SPI的发送和接收函数来实现数据传输。 在操作完成后,我们需要适当处理错误和超时情况。如果出现错误,我们可以中断传输并采取相应的纠正措施。如果超时,我们可以重传数据或尝试其他方法来解决问题。 在代码编写完成后,我们可以进行测试和调试。通过调试输出和跟踪代码执行,我们可以确保数据在SPI和TF卡之间正确传输,并且读写操作能够成功处理。 总结来说,要在STM32F4上实现SPI读写TF卡,我们需要按照一定的配置和操作步骤来设置SPI接口、初始化TF卡、进行读写操作,并及时处理错误和超时情况。这样我们就能够使用STM32F4来有效地读写TF卡的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值