使用STM32CubeMX配置SPI-SD卡,并使用FATFS库;以下为使用STM32G030F6型号芯片;
1 准备
开发环境为STM32CubeMX 和Keil,因此需要先安装好这两个工具,并安装STM32G0对应的库组件;
2 CubeMX配置
打开STM32CubeMX,新建项目,MCU型号选择STM32G030F6Px;
2.1 时钟配置
在Clock Configuration中,选择HSI和PLLCLK,将系统时钟配置到64MHz;
2.2 配置调试和串口
在sys中选择serial wire,开启SWD模式仿真器接口;
将USART2打开,选择 Asynchronous Mode,并将PA2/PA3设置为USART2 RX和TX;
2.3 配置SPI
我们使用SPI2来连接SD卡,因此配置SPI2;
- 打开SPI2,模式选择 Full Duplex Master;
- 使用软件控制CS脚,因此 Hardware NSS 选择Disable;
- Data Size 设置为8bit;
- 时钟分频 Prescaler 选择256,之后会再次在代码中设置SPI速率;
将GPIOA4设置为输出,并设置一个标记为SD_CS;
2.4 配置Fatfs
切换到Middleware,选择FATFS后,Mode选择 user-defined;
2.5 生成工程
在ProjectManger中选择工程路径,然后选择toochain为MDK-ARM,然后生成Keil工程;
3 硬件连接
将SD卡模块与开发板按照如下引脚进行连接:
STM32G030开发板 | SD卡模块 |
---|---|
3V3 | 3V3 |
GND | GND |
PA5 | CS |
PA0 | CLK |
PB0 | MISO |
PA4 | MOSI |
4 编写用户程序
将生成的Keil工程打开,然后在FATFS下的Target目录添加SPI SD接口文件 user_diskio_spi.h .c ,并添加Keil的工程中:
这个文件是SPI接口与SD卡底层实现;
- 底层实现完成后,需要与SD卡的FATFS操作进行连接,直接在user_diskio.c 文件中调用 SPI diskio中的接口:
需要在 user_diskio.c 文件中 initialize、status、read、write、ioctrl 几个函数使用SPI接口进行操作;
- 编写测试程序:
printf("\n -------------- testing SD card -----------\n");
HAL_Delay(1000); // some delay for sd card ready
FRESULT fres; // Result after operations
// Mount fs
fres = f_mount(&FatFs, "", 1); // 1=mount now
if (fres != FR_OK)
{
printf("f_mount error (%i)\r\n", fres);
while (1)
;
}
else
{
printf("mound fs OK.\r\n");
}
// Write fs
fres = f_open(&fil, "write.txt", FA_WRITE | FA_OPEN_ALWAYS | FA_CREATE_ALWAYS);
if (fres == FR_OK)
{
printf("Open/Create file OK.\r\n");
}
else
{
printf("f_open error (%i)\r\n", fres);
}
// write text
char buff[] = "write testing for fs\r\n";
UINT bytesWrote;
fres = f_write(&fil, buff, sizeof(buff), &bytesWrote);
if (fres == FR_OK)
{
printf("write %i bytes OK.\r\n", bytesWrote);
}
else
{
printf("f_write error (%i)\r\n",fres);
}
// close fs
f_close(&fil);
printf(" close the fs\r\n");
// Unmound
f_mount(NULL, "", 0);
printf(" unmount fs\r\n");
烧写到开发板,连接好SD卡后测试:
可以看到串口打印显示成功写入文件,把卡拔下后在电脑上可以看到写入的文件成功;
完整工程代码:
飞书 Docs Link: https://ayje7x8zj1.feishu.cn/drive/folder/SSaNfII9xlC8MndCEsBcYQdun1c?from=from_copylink
评论