目录
- 一、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卡 | STM32 |
---|---|
CS | PA4 |
SCK | PA5 |
MISO | PA6 |
MISI | PA7 |
VCC | 5V |
GUN | GUN |
五、编译并烧录
编译无误
烧录成功
六、实验验证
实验显示串口收到的数据,包括总内存、可使用内存以及已使用内存,SD卡初始化成功、挂载成功、文件写入成功等显示,若写入超过10次后,输出变为while。
使用读卡器打开SD卡可以看到里面生成了一个HELLO.TXT文件,里面的文件第一行正确,后面就会出现问题。
七、代码修改
对main函数进行修改如下,注释掉红框里面的代码:
八、结果显示
九、总结
实验并不难,但是需要细心,而且也需要有耐心,等待虽然很漫长,但是等来的结果会很让人快乐的。
十、参考
https://blog.csdn.net/m0_58414679/article/details/122036435?spm=1001.2014.3001.5501