【STM32】SD卡读写(六)-CubeMX 生成STM32_SPI_SD_FATFS

【STM32】SD卡读写(六)-CubeMX 生成STM32_SPI_SD_FATFSnbsp nbsp nbsp nbsp nbsp nbsp f lseek 接着写不会擦除之前的数据 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp

欢迎大家来到IT世界,在知识的湖畔探索吧!

1.打开CubeMX新建文件,选好单片机芯片

2.设置系统频率:见下图

【STM32】SD卡读写(六)-CubeMX 生成STM32_SPI_SD_FATFS

【STM32】SD卡读写(六)-CubeMX 生成STM32_SPI_SD_FATFS

3.设置SPI3,选定设置为主机模式,其他默认就行。

【STM32】SD卡读写(六)-CubeMX 生成STM32_SPI_SD_FATFS

4.选定FATFS,勾选User-defined。其他默认设置就行,(注意分区最大、最小值都是512)。

【STM32】SD卡读写(六)-CubeMX 生成STM32_SPI_SD_FATFS

5.以上配置基本完成,现在生成工程的最后配置:

【STM32】SD卡读写(六)-CubeMX 生成STM32_SPI_SD_FATFS

【STM32】SD卡读写(六)-CubeMX 生成STM32_SPI_SD_FATFS

完成以上设置直接点击“GENERATE COOD”生成工程。

6.首先设置SD卡驱动,在spi.c文件中添加两个函数:(根据需要自己命名函数名即可)

注意:记得载spi.h文件中声明函数。spi配置和引脚初始化,已自动完成不必再次配置。

【STM32】SD卡读写(六)-CubeMX 生成STM32_SPI_SD_FATFS

7.新建一个SD_Driver.c 和SD_Driver.h文件(实现对SD卡的驱动)。

其中主要包括:

void SD_CS(uint8_t p)   //SPI3选用引脚控制 uint8_t SD_GETCID(uint8_t *cid_data)  //读取SD卡的CID信息 uint8_t SD_GETCSD(uint8_t *cid_data)  //读取SD卡的CID信息 uint32_t SD_GetSectorCount(void) //读取SD卡的扇区数 uint8_t SD_init(void)   //SD卡初始化函数 uint8_t SD_ReadDisk(uint8_t*buf,uint32_t sector,uint8_t cnt) //读取SD卡的数据 uint8_t SD_ReceiveData(uint8_t *data, uint16_t len) //读取SD卡中指定长度的数据 uint8_t SD_SendBlock(uint8_t*buf,uint8_t cmd) //向SD卡中写入一个512字节的数据 int SD_sendcmd(uint8_t cmd,uint32_t arg,uint8_t crc) //通过SPI向SD卡发送命令 uint8_t SD_WriteDisk(uint8_t*buf,uint32_t sector,uint8_t cnt)  //向SD卡中写入数据

欢迎大家来到IT世界,在知识的湖畔探索吧!

8.在”user_diskio.c”文件中填充如下五个函数,实现文件系统与SD的关联.

USER_initialize(); USER_ioctl(); USER_read(); USER_status(); USER_write();

如果有需要可在 fatfs.c 中填充get_fattime();函数设置日期

欢迎大家来到IT世界,在知识的湖畔探索吧!DWORD get_fattime (void) {     return ((2010UL-1980) << 25) /* Year = 2010 */     | (11UL << 21) /* Month = 11 */     | (2UL << 16) /* Day = 2 */     | (15U << 11) /* Hour = 15 */     | (0U << 5) /* Min = 0 */     | (0U >> 1) /* Sec = 0 */ ; }

9.这样基本上就配置完了!下面就是在main函数里实现SD卡的读写了;

//定义一些变量 FATFS fs; FIL file; uint8_t res=0; UINT Br,Bw; char path[4]="0:"; uint8_t testBuffer[]="SD¿¨Ð´ÈëÖÐÓ¢ÎIJâÊÔ,SD card Chinese and English reading and writing test!! \r\n"; uint8_t ReadBuffer[512]; char success[]="数据写入 Ok!\r\n"; char error[]="error!\r\n"; char mount[]="文件系统挂载成功! \r\n"; char open[]="Î文件已打开! \r\n"; int main() {     /*各种初始化就不再多写了*/     res=f_mount(&fs,"0:",0); //挂载文件系统     if(res!=FR_OK){         HAL_UART_Transmit(&huart2,(uint8_t *) &error,sizeof(error),100);     }else{         HAL_UART_Transmit(&huart2,(uint8_t *) &mount,sizeof(mount),100);     }     while(1)     {         if(f_open(&file,"hello.txt",FA_OPEN_ALWAYS|FA_WRITE)==FR_OK){                                    HAL_UART_Transmit(&huart2,(uint8_t *) &open,sizeof(open),100);             f_lseek(&file, f_size(&file)); //接着写不会擦除之前的数据                                                                          if(f_write(&file,testBuffer,sizeof(testBuffer),&Bw)==FR_OK){             HAL_UART_Transmit(&huart2,(uint8_t *) &success,sizeof(success),100);             f_close(&file); //一定要记得关闭文件 } } } }

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/101723.html

(0)
上一篇 6天前
下一篇 6天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信