ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SD卡数据读取

2021-12-25 12:34:29  阅读:189  来源: 互联网

标签:return 读取 RES 原理图 电路 res 数据 SD


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


1.下载与安装

 

 

2.文件配置

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

 

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


3.1绘制前目标

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

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

3.2创建工程

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

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

3.3元件库

将三个元件库加入到里面

3.4绘制开始

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

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

 选择下面的元件

3.5绘制结果

STM32芯片

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

stm32 去耦电路 

晶振电路

复位电路 

降压电路

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

 输入、输出电源

排针

4 SD卡原理图

5.最终原理图STM32C8T6+SD

 

  

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


sd卡协议

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

SD Memory Card Architecture

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

SD Memory Card Registers

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

1.stm32cube配置

我用的这个芯片

 sys配置

  配置PA4

SPI1

 USART1

 

时钟配置

最后一步 

  2.文件工程配置

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

  添加下面代码、

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

 
		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);
		}		

 

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

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

 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;
	}

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

3.效果展示

参考链接:

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

标签:return,读取,RES,原理图,电路,res,数据,SD
来源: https://blog.csdn.net/HILYX/article/details/122141399

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有