目录
一、基本知识
1.1 SD卡
可查看上篇博客:Altium Designer 18绘制一个STM32+SD卡 的系统原理图设计_Laul Ken-Yi的博客-CSDN博客
1.2 SPI协议
可查看博客:
基于I2C的AHT20温度采集器以及基于SPI协议OLED显示_Laul Ken-Yi的博客-CSDN博客
本例中因为stm32F103C8T6没有SDIO协议,因此采用SPI模拟SDIO。
二、SD卡工程源码下载
github下载:GitHub - cdsgsjx/-
三、操作步骤
3.1 格式化
首先将SD卡插到电脑端,进行手动的格式化,格式化为FAT格式。
3.2 连接操作
STM32 | SD卡 |
---|---|
CS | PA4 |
SCK | PA5 |
MISO | PA6 |
MOSI | PA7 |
3.3代码修改
- main.c
while循环中
while (1)
{
WritetoSD(WriteBuffer,sizeof(WriteBuffer));
HAL_Delay(500);
/*WriteBuffer[0] = WriteBuffer[0] +10;
WriteBuffer[1] = WriteBuffer[1] +10;*/
write_cnt ++;
while(write_cnt > 0)
{
printf(" while \r\n");
HAL_Delay(500);
}
四,编译运行
五、烧录运行结果
- 串口回显
一共要回复两次初始化成功,第一次是在得到使用内存并选择格式化时,一次是在写SD卡时。
- 打开HELLO.txt
可以看到一共输出了22字节,\r\n表示回车换行。
\n 是换行,英文是New line,它将光标到行首
\r 是回车,英文是Carriage return,它将光标下移一格
\r\n 表示回车换行
六、常见错误分析
1、编译运行后无反应一直显示main,可能是由于我们的stm最小系统和SD卡需要更高的电压来驱动它,可将3.3V电压换成5V电压,SD卡与串口都要上5V电压。
2、如果问题依然存在,可能是因为一些杜邦线的接触不良或太长,可以试着移动SD卡,在某个角度可能会初始化成功。
3、SPI协议是高速运作的,需要尽可能的降低时钟速率。
4、耐心等待个一分钟,可能就成功了。
七、总结
此次实验确实很难成功,可能是因为最小版不太行,如果大一点的版本的话,可能成功率会上升,不过经过了一番波折在老师和同学们的帮助下,成功做出了结果。
参考链接: