stm32芯片使用STM32cube配置TFAST模式SPI读写SD卡
·
一、cube的相关配置
- 打开cube软件,选择
stm32f103c8tx芯片,点击Start....进入配置页面
- 首先展示一下接下来将要配置的硬件本次配置将要使用的引脚

- 点击
FATFS勾选User-defined
- 点击
SYS,DeBug改为Serial Wire
- 配置PA4引脚
- 在芯片上将
PA4引脚选为Output
- 在点击
GPIO,将User Label填入SD_CS,其他默认不变
- 点击
SPI1,mode选项改为Full....
6.配置USART1
- 配置NVIC

- 配置晶振

- 配置工程文件

注意:一定要改堆栈的大小,否则会死机
- 生成代码

到这儿基本工程就配置完毕
二、代码移植
1. 下载源代码
百度网盘链接:https://pan.baidu.com/s/1prOba0fkgXpcpn19wqpx0g
提取码:9467
2.移植文件
- 将源文件中的两个相关文件复制

- 粘贴到自己建的文件中

- 将刚刚复制的文件添加到工程中

3.代码修改
找到diskio.c文件
添加代码:
{
/* USER CODE BEGIN INIT */
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; //初始化成功
/* USER CODE END INIT */
}
- 添加头文件
代码:
#include "diskio.h" /* Declarations of disk functions */
#include "SDdriver.h"

- 修改
USER_status函数
switch (pdrv)
{
case 0 :
return RES_OK;
case 1 :
return RES_OK;
case 2 :
return RES_OK;
default:
return STA_NOINIT;
}

- USER_read函数的修改

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;
}
- USE_WRITE函数的修改

uint8_t res;
if( !count )
{
return RES_PARERR; /* count不能等于0,否则返回参数错误 */
}
switch (pdrv)
{
case 0:
res=SD_WriteDisk((uint8_t *)buff,sector,count);
if(res == 0){
return RES_OK;
}else{
return RES_ERROR;
}
default:return RES_ERROR;
}
- USER_ioctl函数的修改

DRESULT res;
switch(cmd)
{
case CTRL_SYNC:
SD_CS(1);
do{
HAL_Delay(20);
}while(spi_readwrite(0xFF)!=0xFF);
res=RES_OK;
SD_CS(0);
break;
case GET_SECTOR_SIZE:
*(WORD*)buff = 512;
res = RES_OK;
break;
case GET_BLOCK_SIZE:
*(WORD*)buff = 8;
res = RES_OK;
break;
case GET_SECTOR_COUNT:
*(DWORD*)buff = SD_GetSectorCount();
res = RES_OK;
break;
default:
res = RES_PARERR;
break;
}
return res;
建议直接对照源工程文件看
三、硬件连接
SD卡
| stm32f103c8t6 | SD |
|---|---|
| PA4 | CS |
| PA5 | SCK |
| PA6 | MISO |
| PA7 | MOSI |
串口
| stm32f103c8t6 | 串口 |
|---|---|
| 5v | 5v |
| TDX | PA10 |
| RDX | PA9 |
四、结果呈现
先把SD卡初始化
再打开串口助手
结果如图
文件写入成功后打开SD卡能看到在SD卡中有一个TXT文件
五、总结
整个实验本来是一个比较简单的实验,但是由于stm32的芯片性能太弱(简称弱鸡)导致这个实验很难做成功,成功的概率简直低的离谱,特别注意一下本实验stm32的电源需要用5V,很关键,3.3V电压带不动SD卡。
六、资料参考
https://blog.csdn.net/qq_39758638/article/details/103573843
完整工程代码
链接:https://pan.baidu.com/s/10Jmhxwd2rAG46Y7pBEfDxg
提取码:9467
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)