本帖最后由 juky2008 于 2018-2-19 09:46 编辑 大家好: 我最近在使用的原子哥的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卡可以正常读写。我没有找到原因。
请大家多多指教,谢谢! |
软件为keil5,头文件未找到
通过FATFS文件系统读写SD卡创建文件可以了,但加入MSC,一直显示一个没有格式化的U盘盘符,也不能格式化,这是什么问题导致的
STM32双核H7核间通信的方法
STM32F103C8T6使用CubeIDE烧录运行报硬件错误,相同代码MDK烧录却可以正常运行
MCSDK5.4.4 FOC电流闭环运行电机偶发停转问题
MCSDK6.3.1使用SIXSTEP如何才能使用电流模式呢?我在配置了电流传感器后仍然无法使用电流模式。
STM32G473VET6同时使用6个片上放大器(OPAMP)的PGA加外部偏置模式,引脚位置让差分信号走线分离,信号有无较大影响?
STM32CubeMX 使用"FW_F1 V1.8.6"生成FreeRTOS代码缺少"freertos_mpool.h"?
CMAKE生成代码后问题。
各位大佬,比方说我用STM32CubeMX配置了单片机的管脚,然后用STM32CubeIDE编写代码,代码编写一半的过程中,我发现管脚配置中要添加新的外设设置,用CudeMX添加配置后重新生成代码,怎么保证我之前在CubeIDE中自己编写的代码部分不被覆盖掉?
仿真时发现 在stm32f4xx_hal_sd.c ,只要一执行SDIO_ConfigData(hsd->Instance, &config);后就出现错误。
大家有没有碰到过这个问题啊?
评分
查看全部评分
评分
查看全部评分
换一张SD卡再试试。
评分
查看全部评分
换过SD卡了,一样的问题。但都可以正常读写,用FATFS读写时间长后,sd卡的存储时间变长。
我主要想用STM32CubeMX生成,比较方便,SDIO的DMA配置上不能取消FIFO功能。如果不用DMA功能,SD卡响应会超时。
谢谢大家的回复。
希望有能力的大佬快来帮忙!
再退一步讲,你可以使用裸机试试能否成功,有没有错误消息,一步一步来。
评分
查看全部评分
同意!当初求种像条狗,如今撸完嫌人丑!
原谅我笑了。第一次看到这句。
当初求种像条狗,如今撸完嫌人丑!