STM32 CUbeIED SPI驱动SD卡
1、FatTFs简介
FATFS是面向小型嵌入式系统的一种通用FAT文件系统,由ANSI C语言编写,并且完全独立于底层的I/O介质。所以可以基本不做修改直接移植到任何处理器中,在STM32CUbeIDE中自带FATFS能够更加方便的使用。它支持FATl2、FATl6 和FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对8 位单片机和16 位单片机做了优化。
FATFS 的特点有:
• 兼容 Windows 的 FAT 文件系统。
• 极小的代码量和工作区
• 丰富的配置选项:
– 多卷 (物理驱动与分区)。
– 多个 ANSI/OEM 代码页,包括 DBCS。
– 以 ANSI/OEM 或 Unicode 支持长文件名。
– 支持 RTOS。
– 支持多种扇区大小。
– 只读、最小化的 API、 I/O 缓冲等等 ......
– FAT子类型:FAT12、 FAT16 和 FAT32。
– 打开的文件数量:无限制,取决于可用的内存。
– 卷的数量:多达 10 个。
– 文件大小:取决于 FAT 规范。(多达 4G-1 字节)
– 卷的大小:取决于 FAT 规范。(512 字节 / 扇区情况下,支持多达 2T 字节)
– 簇的大小:取决于 FAT 规范。(512 字节 / 扇区情况下,支持多达 64K 字节)
– 扇区的大小:取决于 FAT 规范。(多达 4K 字节)
最顶层是应用层,使用者无需理会FATFS 的内部结构和复杂的FAT 协议,只需要调用FATFS 模块提供给用户的一系列应用接口函数。底层磁盘 I/O 和 RTC 模块均与 FatFs 模块完全分离。它们必须由用户提供,这是将 FatFs 模块与其它平台相连的主要工作。
2、硬件电路
使用的是正点原子Mini开发板STM32F103RC,自带SD卡SPI接口。SD_CS片选是PA3。
3、创建工程
开启调试下载:
开启外部时钟:
配置时钟72M:
开启串口调试USART1:
开启硬件SPI:
开启FatFs文件系统:
最重要的一点片选 PA3:
选择开启PA2 PA4目的是为了不对SD卡干扰,开发板SPI接口上面还有Flash,为了不影响SD卡,所以开启PA2 PA4禁止片选。片选根据自己的开发板的电路选择,我自己使用的正点原子开发板。
解决中文乱码,选择GBK编码,默认没有GBK自己手动输入。
配置部分基本完成,修改编写代码。
4、代码修改
移植完成的工程文件目录:
4.1 、新建fafs_sd文件夹
保存所需要的fatfs.c fatfs.h文件代码,fatfs.c fatfs.h文件代码比较多,我就不在这个地方放了,最后我会附上我的工程文件,有需要自己下载。这里仅仅展示一部分。重要的一点,不要忘记添加文件路径。
4.2、需要修改部分
第1处需要修改地方:
volatile uint8_t FatFsCnt = 0;
volatile uint16_t Timer1, Timer2;
void SDTimer_Handler(void)
{
if(Timer1 > 0)
Timer1--;
if(Timer2 > 0)
Timer2--;
}
void SysTick_Handler(void)
{
/* USER CODE BEGIN SysTick_IRQn 0 */
FatFsCnt++;
if(FatFsCnt >= 10)
{
FatFsCnt = 0;
SDTimer_Handler();
}
/* USER CODE END SysTick_IRQn 0 */
HAL_IncTick();
/* USER CODE BE