SD卡数据读取

一安装 Altium Designer18 并用其绘制 stm32 最小系统的电路原理图


1.下载与安装

SD卡数据读取

 SD卡数据读取

 SD卡数据读取

2.文件配置

SD卡数据读取

SD卡数据读取

 打开下载的 AltiumDesigner 软件,选择 license ,选择文件进行保存。

SD卡数据读取

 SD卡数据读取

 3.绘制 stm32 最小系统的电路原理图


3.1绘制前目标

使用 Altium Designer 绘制一个 stm32 最小系统的电路原理图。

何为stm32 最小系统的电路原理图
最小系统为单片机工作的最低要求,不含外设控制,原理简单,分析最小系统是嵌入式入门的基础。
stm32 最小系统的电路原理图如下,我们的目标就是绘制出下面的原理图。

SD卡数据读取

3.2创建工程

点击 File -> New -> Project -> PCD Project,新建一个 PCD 工程,得到如下界面:

SD卡数据读取

 右击 PCD_Project1.PrjPCB,选择 Add New to Project -> Schematic,新建一个原理图,等待加载完毕后,得到如下界面:

SD卡数据读取

3.3元件库

将三个元件库加入到里面

3.4绘制开始

 打开的元件库里找到 stm32f103c8t6 芯片,并双击打开,然后点击左将元件放在中间

SD卡数据读取

将所有引脚都延长,可以复制粘贴

SD卡数据读取

 选择下面的元件

SD卡数据读取

3.5绘制结果

STM32芯片

R:Miscellaneous Devices LC.IntLib 元件库中搜索 0805 10k 

SD卡数据读取

SD卡数据读取

stm32 去耦电路 

SD卡数据读取

晶振电路

SD卡数据读取

复位电路 

SD卡数据读取

降压电路

SD卡数据读取

下载方式选择及程序烧录接口

SD卡数据读取

 输入、输出电源

SD卡数据读取

排针

SD卡数据读取

4 SD卡原理图

SD卡数据读取

5.最终原理图STM32C8T6+SD

 SD卡数据读取

  

二、掌握SD卡协议原理,用STM32F103完成对SD卡的数据读取(fat文件模式)。


sd卡协议

下图是SD卡的体系架构,可以看到内部包含了一系列的寄存器:

SD卡数据读取

SD Memory Card Architecture

各个寄存器的详细信息如下:

SD Memory Card Registers

SD卡数据读取

 SD配置寄存器提供SD卡的特殊特性信息,其大小为64位。该寄存器由厂商编程,主机不能对它进行编程。

SD卡数据读取

1.stm32cube配置

我用的这个芯片

SD卡数据读取

 sys配置

SD卡数据读取

  配置PA4

SD卡数据读取

SPI1

SD卡数据读取

 USART1

SD卡数据读取 SD卡数据读取

时钟配置

SD卡数据读取

最后一步 

SD卡数据读取

  2.文件工程配置

 将这两个文件放在本目录下

SD卡数据读取

  添加下面代码、

HAL_UART_Receive_IT(&huart1,&aRxBuffer1,1); 	//enable uart	
 
	printf(" mian \r\n");
 
	Get_SDCard_Capacity();	//得到使用内存并选择格式化

SD卡数据读取

 
		WritetoSD(WriteBuffer,sizeof(WriteBuffer));		
 
		
		
		HAL_Delay(500);
		WriteBuffer[0] = WriteBuffer[0] +10;
		WriteBuffer[1] = WriteBuffer[1] +10;
		write_cnt ++;
		
		while(write_cnt > 10)
		{	
			printf(" while \r\n");
			HAL_Delay(500);
		}		

 SD卡数据读取

修改user_diskio.c文件

1.添加头文件 #include "diskio.h" /* Declarations of disk functions */

#include "SDdriver.h"

2.将下面代码放在指定位置,修改函数内容:USER_initialize、USER_status、USER_read、USER_write、USER_ioctl
 

 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; //初始化成功

SD卡数据读取

 switch (pdrv)
	{
		case 0 :
			return RES_OK;
		case 1 :
			return RES_OK;
		case 2 :
			return RES_OK;
		default:
			return STA_NOINIT;
	}

SD卡数据读取

 uint8_t res;
	if( !count )
	{    
		return RES_PARERR;  /* count不能等于0,否则返回参数错误 */
	}
	switch (pdrv)
	{
		case 0:
		    res=SD_ReadDisk(buff,sector,count);	 
				if(res == 0){
					return RES_OK;
				}else{
					return RES_ERROR;
				}                                               
		default:
			return RES_ERROR;
	}

SD卡数据读取

 可以直接下载我后面参考博客的代码。

3.效果展示

SD卡数据读取

参考链接:

(57条消息) SD卡数据读取_m0_61816657的博客-CSDN博客

上一篇:二.I.MX6U的启动方式及头部文件


下一篇:用STM32F103 对SD卡的数据读取(SPI协议、FAT文件模式)