完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我最近在使用的原子哥的STM32F407的开发板,芯片是STM32F407ZET6,原先我使用CubeMX4.21和F4库 1.16.0 调试SD卡驱动,用CubeMX配置收发DMA传输,但是生成的sd_disk.c中SD_read,SD_write函数并没有调用BSP_SD_ReadBlocks_DMA,BSP_SD_WriteBlocks_DMA函数。生成代码可以读取SD卡的信息,fatfs也可以挂载,但是多次新建文件打开和关闭后,fatfs返回FR_DISK_ERR;可能是由于SD卡无响应后超时导致。
然后我下载STM32CubeMX4.24和1.19.0库文件,配置好后,生成的sd_disk.c中SD_read,SD_write函数使用了BSP_SD_ReadBlocks_DMA,BSP_SD_WriteBlocks_DMA函数和信号量(队列),进行了线程保护,但是生成的代码并不能使用。读写函数都卡在了 event = osMessageGet(SDQueueID, SD_tiMEOUT);分析后发现程序中并没有释放信号量,于是我在sd_disk.c文件最后添加了
void DMA2_Stream6_IRQHandler(void)中断调用了HAL_SD_TxCpltCallback回调函数,但是HAL_SD_RxCpltCallback()回调函数并没有被调用。FatFs不能正常读写SD卡。 最后我在CubeMX中开启了SDIO global interrupt 中断后SD卡后,HAL_SD_RxCpltCallback()才被调用。现在Fatfs可以正常读写SD卡(8GB)了。 间隔200ms给Fatfs测试任务发送通知,Fatfs测试任务完成创建文件(文件名不重复),写入数据(8192字节),关闭文件的功能,25000次(大概3小时)都没有问题,但是任务的完成时间由原来的200ms间隔(每次给任务发送通知),逐渐增加到1.2秒(每次任务完成后,会通过串口打印将信息发给电脑,串口助手有时间戳)。这个原因我现在不清楚。 通过仿真发现在中断函数中一直进入FIFO Error错误。但是SD卡可以正常读写。我没有找到原因。
|
|
相关推荐
1个回答
|
|
在解决STM32CubeMX+FreeRTOS+SD+FATFS碰到DMA FIFO溢出问题时,可以尝试以下步骤:
1. 确保DMA配置正确:检查STM32CubeMX中的DMA配置,确保DMA通道、数据宽度、源地址增量、目标地址增量等参数设置正确。同时,确保DMA的优先级设置得当,以避免与其他DMA通道发生冲突。 2. 检查SD卡初始化和配置:确保SD卡初始化过程中的时钟、电源和接口设置正确。此外,检查SD卡的配置,如块大小、传输速度等,以确保与STM32F407ZET6兼容。 3. 使用BSP_SD_ReadBlocks_DMA和BSP_SD_WriteBlocks_DMA函数:在STM32CubeMX4.24和1.19.0库文件中,确保SD_read和SD_write函数调用了BSP_SD_ReadBlocks_DMA和BSP_SD_WriteBlocks_DMA函数。这将确保使用DMA进行数据传输。 4. 检查FATFS配置:确保FATFS的配置正确,如文件系统类型、缓冲区大小等。此外,检查FATFS的挂载和卸载过程,确保在文件操作完成后正确卸载FATFS。 5. 优化文件操作:在多次新建文件、打开和关闭文件时,可能导致SD卡无响应。尝试优化文件操作,减少文件操作的频率,或者在文件操作之间添加适当的延时。 6. 检查中断和回调函数:确保SD卡的中断和回调函数正确实现,以便在DMA传输过程中处理错误和状态更新。 7. 使用调试工具:使用STM32的调试工具(如ST-LINK)来监视DMA传输和SD卡操作。这有助于识别潜在的问题,如DMA溢出、SD卡错误等。 8. 更新软件和固件:确保使用的STM32CubeMX、FATFS和HAL库是最新版本,以获得最佳的性能和稳定性。 9. 考虑使用其他文件系统:如果问题仍然存在,可以考虑使用其他文件系统,如LittleFS或SPIFFS,这些文件系统可能更适合SD卡操作。 通过以上步骤,应该能够解决STM32CubeMX+FreeRTOS+SD+FATFS碰到的DMA FIFO溢出问题。如果问题仍然存在,建议查阅相关文档和论坛,寻求更专业的帮助。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1364 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1359 浏览 1 评论
780 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
562 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1394 浏览 2 评论
1758浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
484浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
420浏览 3评论
414浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
389浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 05:20 , Processed in 0.918771 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号