完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1.Fatfs系统
1.1Fatfs文件系统简介 Fatfs是一个免费的FAT文件模块,专门为小型嵌入式系统系统设计。他完全用标准c语言写成,具有良好的平***立性。它支持FAT12、FAT16、 FAT32和exFAT的(R0.12及以后版本),支持多个存储媒介,有独立的缓冲区,可以对对个文件进行读/写,并针对8位单片机和16位单片机做了优化。 FATFS的特点: Windows 精简的FAT文件系统(FAT12、FAT32和exFAT) 2.与平台工具,移植简单 3.代码量,高 4.多种配置: (1)支持多卷(物理驱动)或缩小,最多支持10个) (2)多个ANSI/OEM代码页包括DBCS (3)长文件名、ANSI/OEM或Unicode (4)支持RTOS (5)支持多种卷大小 (6)只读,最小化的API和I / O缓冲区 FATFS的层次结构如下图所示: 2.移植步骤 2.1配置SDMMC stm32CubeMx配置SDMMC如下图所示: 根据硬件需求,这里将SDMMC1的模式配置成4位。宽总线模式 2.2配置时钟 stm32CubeMx时钟树如下所示: 2.3添加并配置FATFS文件系统 1.由于选择的存储媒介是SD卡,所以FATFS选项勾选SD卡。 2.SDMMC的参数设置使用默认状态,使能SDMMC的收发选择DMA方式。 3.配置FATFS系统-文件 配置完成后生成代码。 3.修改代码调试 需要修改的文件如下: sd_diskio.h stm32f7xx_it.c 。主程序C 在sd_diskio.h添加中一个两个函数声明 // 高亮块 void BSP_SD_WriteCpltCallback(void); void BSP_SD_ReadCpltCallback(void); 在stm32f7xx_it.c中添加一下代码 // 高亮块 #include "ff_gen_drv.h" #include "sd_diskio.h" 无效DMA2_Stream3_IRQHandler(无效) { /* 用户代码开始 DMA2_Stream3_IRQn 0 */ /* 用户代码结束 DMA2_Stream3_IRQn 0 */ HAL_DMA_IRQHandler(&hdma_sdmmc1_rx); /* 用户代码开始 DMA2_Stream3_IRQn 1 */ BSP_SD_ReadCpltCallback(); /* 用户代码结束 DMA2_Stream3_IRQn 1 */ } /** * @brief 此函数处理 DMA2 stream6 全局中断。 */ 无效DMA2_Stream6_IRQHandler(无效) { /* 用户代码开始 DMA2_Stream6_IRQn 0 */ /* 用户代码结束 DMA2_Stream6_IRQn 0 */ HAL_DMA_IRQHandler(&hdma_sdmmc1_tx); /* 用户代码开始 DMA2_Stream6_IRQn 1 */ BSP_SD_WriteCpltCallback(); /* 用户代码结束 DMA2_Stream6_IRQn 1 */ } 主要函数如下: int main(void) { /* 用户代码开始 1 */ 静态 uint32_t 滴答声 = 0; /* 用户代码结束 1 */ /* MCU配置---------------------------------------------- ------------*/ /* 重置所有外设,初始化 Flash 接口和 Systick。*/ HAL_Init(); /* 用户代码开始初始化 */ /* 用户代码结束初始化 */ /* 配置系统时钟 */ SystemClock_Config(); /* 用户代码开始 SysInit */ /* 用户代码结束系统初始化 */ /* 初始化所有配置的外设 */ MX_GPIO_Init(); MX_DMA_Init(); MX_SDMMC1_SD_Init(); MX_FATFS_Init(); MX_USART1_UART_Init(); /* 用户代码开始 2 */ printf("rn********sdio test!********rn"); ret = f_mount(&sd_fatfs, "0:", 1); printf("rnf_mount:%drn", ret); // // BSP_SD_ReadBlocks((uint32_t *)buf, 0, 1, 10); // // ret = f_open(&sd_file, "0:/test.txt", FA_READ | FA_WRITE | FA_OPEN_ALWAYS); printf("rnf_open:%drn", ret); ret = f_write(&sd_file, w_buf, sizeof(w_buf), &num); printf("rnf_write:%d, br:%drn", ret, num); ret = f_lseek(&sd_file, 0); printf("rnf_lseek:%drn", ret); ret = f_read(&sd_file, buf, sizeof(buf), &num); printf("rn"); printf("%s", buf); printf("rn"); printf("rnf_open:%d, br:%drn", ret, num); ret = f_close(&sd_file); /* 用户代码结束 2 */ /* 无限循环 */ /* 用户代码开始时 */ 而 (1) { /* 用户代码结束时 */ /* 用户代码开始 3 */ if (HAL_GetTick() - 滴答数 > 200) { // HAL_UART_Transmit_DMA(&huart1, "hellorn", 7); 滴答 = HAL_GetTick(); HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin); HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); } } /* 用户代码结束 3 */ } 编译之后,现在到加速中,Fatfs 文件系统移植! 需要的是,一定要开启 SDMMC 的中断,才能出现设备一直链接,导致一些问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:09 , Processed in 0.781398 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号