[STM32F1] 用STM32F103完成对SD卡数的读写

[复制链接]
3230|33
 楼主| 结合国际经验 发表于 2023-10-19 12:50 | 显示全部楼层
六、硬件准备
咱们用于读取SD卡的模块为
983136530b59324e8e.png
 楼主| 结合国际经验 发表于 2023-10-19 12:50 | 显示全部楼层
咱们可以去其店铺下载对应资料
由于采用SPI方式,所以我们的连线方式为

 楼主| 结合国际经验 发表于 2023-10-19 12:50 | 显示全部楼层
 楼主| 结合国际经验 发表于 2023-10-19 12:51 | 显示全部楼层
注:这里特别说明一下!!!大家一定要注意,我们在用USB转TTL为STM32供电的时候一定需要接到5V上面去,并且在用32给SD卡模块供电的时候一定一定要接到5V电源上,否则我们无法驱动该SD模块
 楼主| 结合国际经验 发表于 2023-10-19 12:51 | 显示全部楼层
在我第一次做这个实验的时候,我就将供电接的3V,发现除了能按一下复位键发送一个“main”以外并没有什么其他作用了,更别说对于SD卡的读取了。
经过长时间的探索后面才发现原来是3.3V的电压无法驱动我们的SD卡模块,也就无法进入到我们的SD卡初始化步骤了,咱们只需要将供电改成5V就可以得到正确结果了!
正确接线方式:
STM32上的5V引脚为SD卡模块供电
363156530b5e2a8df3.png
 楼主| 结合国际经验 发表于 2023-10-19 12:52 | 显示全部楼层
USB转TTL为整个系统提供5V电压
29596530b60ab764b.png
 楼主| 结合国际经验 发表于 2023-10-19 12:52 | 显示全部楼层
结果展示
948686530b6236dd44.png
 楼主| 结合国际经验 发表于 2023-10-19 12:53 | 显示全部楼层
可以看到咱们的程序一共写入了六次文件,写入完成之后将进入while循环一直循环输出while。
我们可以根据这段代码来分析一下: 52916530b656f0cdc.png
 楼主| 结合国际经验 发表于 2023-10-19 12:54 | 显示全部楼层
可以看出当我们的数据写入6次之后:write_cnt > 5就会进入一个死循环,每过0.5秒输出一个while。
接下来咱们再来验证一下,将SD卡拔出用读卡器插到我们的PC上看我们写入的文件 288216530b668d78cf.png
 楼主| 结合国际经验 发表于 2023-10-19 12:56 | 显示全部楼层
可以看到我们写入的文件为6行“01 write buff to sd”,这与我们的代码对应 113796530b70fbc496.png
 楼主| 结合国际经验 发表于 2023-10-19 12:57 | 显示全部楼层
但是大家可以看到我们打开的文件显示出来的结果是乱码的,我们要得到正确的结果就必须在main.c文件中修改一下我们写入数据的数组 899456530b7222898b.png
 楼主| 结合国际经验 发表于 2023-10-19 12:57 | 显示全部楼层
这里建议循环次数小于10次,因为要想改变我们序号的十位就必须加一个计数十次的标志位,多此一举

修改写入文件的数据 65296530b73413b4f.png
 楼主| 结合国际经验 发表于 2023-10-19 12:58 | 显示全部楼层
再次实验 357156530b7482bb3e.png 得到正确结果
723966530b75ac5721.png
 楼主| 结合国际经验 发表于 2023-10-19 12:58 | 显示全部楼层
、总结
在实验的过程中我遇到了不少难题,比如一开始的供电不足导致无法驱动SD卡模块,但是在大家的帮助下我终于还是解决了这个问题,另外就是咱们在移植代码的时候一定要仔细,稍微错一点可能就很麻烦会报很多错。最后,这篇博客是基于16G内存的SD卡的,小于16G内存的SD卡都可以用该工程来读取,大一些的SD卡就不得而知了,欢迎大家与我交流。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部