STM32之完成对SD卡的数据读取

您所在的位置:网站首页 单片机读取sd卡中文件 STM32之完成对SD卡的数据读取

STM32之完成对SD卡的数据读取

2024-07-16 21:52| 来源: 网络整理| 查看: 265

目录 一、SD卡的简介二、SD卡引脚定义三、实验过程2.1 代码下载2.2 SD卡写入文件名和写入内容2.3 main函数2.4 SD卡写入函数 四、连线五、编译并烧录六、实验验证七、代码修改八、结果显示九、总结十、参考

一、SD卡的简介

SD存储卡是一种基于 半导体 快闪记忆器的新一代记忆设备,由于它体积小、 数据传输 速度快、可 热插拔 等优良的特性,被广泛地于便携式装置上使用,例如 数码相机 、 平板电脑 和 多媒体播放器 等。

二、SD卡引脚定义

在这里插入图片描述

三、实验过程 2.1 代码下载

链接:https://pan.baidu.com/s/1XTmLumQPlV6dUrWkSPc9pQ 提取码:i3qe

2.2 SD卡写入文件名和写入内容 char SD_FileName[] = "hello.txt"; uint8_t WriteBuffer[] = "马睿睿 631907030219 \r\n"; 2.3 main函数 int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_SPI1_Init(); MX_FATFS_Init(); MX_USART1_UART_Init(); HAL_UART_Receive_IT(&huart1,&aRxBuffer1,1); //enable uart printf(" mian \r\n"); Get_SDCard_Capacity(); //得到使用内存并选择格式化 while (1) { WritetoSD(WriteBuffer,sizeof(WriteBuffer)); //写入SD卡 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); } } } 2.4 SD卡写入函数 void WritetoSD(BYTE write_buff[],uint8_t bufSize) { FATFS fs; FIL file; uint8_t res=0; UINT Bw; res = SD_init(); //SD卡初始化 if(res == 1) { printf("SD卡初始化失败! \r\n"); } else { printf("SD卡初始化成功! \r\n"); } res=f_mount(&fs,"0:",1); //挂载 // if(test_sd == 0) //用于测试格式化 if(res == FR_NO_FILESYSTEM) //没有文件系统,格式化 { // test_sd =1; //用于测试格式化 printf("没有文件系统! \r\n"); res = f_mkfs("", 0, 0); //格式化sd卡 if(res == FR_OK) { printf("格式化成功! \r\n"); res = f_mount(NULL,"0:",1); //格式化后先取消挂载 res = f_mount(&fs,"0:",1); //重新挂载 if(res == FR_OK) { printf("SD卡已经成功挂载,可以进进行文件写入测试!\r\n"); } } else { printf("格式化失败! \r\n"); } } else if(res == FR_OK) { printf("挂载成功! \r\n"); } else { printf("挂载失败! \r\n"); } res = f_open(&file,SD_FileName,FA_OPEN_ALWAYS |FA_WRITE); if((res & FR_DENIED) == FR_DENIED) { printf("卡存储已满,写入失败!\r\n"); } f_lseek(&file, f_size(&file));//确保写词写入不会覆盖之前的数据 if(res == FR_OK) { printf("打开成功/创建文件成功! \r\n"); res = f_write(&file,write_buff,bufSize,&Bw); //写数据到SD卡 if(res == FR_OK) { printf("文件写入成功! \r\n"); } else { printf("文件写入失败! \r\n"); } } else { printf("打开文件失败!\r\n"); } f_close(&file); //关闭文件 f_mount(NULL,"0:",1); //取消挂载 } 四、连线 SD卡STM32CSPA4SCKPA5MISOPA6MISIPA7VCC5VGUNGUN

在这里插入图片描述

五、编译并烧录

编译无误 在这里插入图片描述 烧录成功 在这里插入图片描述

六、实验验证

在这里插入图片描述 在这里插入图片描述 实验显示串口收到的数据,包括总内存、可使用内存以及已使用内存,SD卡初始化成功、挂载成功、文件写入成功等显示,若写入超过10次后,输出变为while。 在这里插入图片描述 使用读卡器打开SD卡可以看到里面生成了一个HELLO.TXT文件,里面的文件第一行正确,后面就会出现问题。

七、代码修改

对main函数进行修改如下,注释掉红框里面的代码: 在这里插入图片描述

八、结果显示

在这里插入图片描述

九、总结

实验并不难,但是需要细心,而且也需要有耐心,等待虽然很漫长,但是等来的结果会很让人快乐的。

十、参考

https://blog.csdn.net/m0_58414679/article/details/122036435?spm=1001.2014.3001.5501



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3