完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用启明欣欣STM32F407ZG芯片开发板设计SD卡,CubeMx中调用SDIO、USB_OTG_HS、FreeRTOS、USB_DEVICE和FATFS几个模块,并进行配置。固件包用STM32Cube FW_F4 V1.24.0,其中与FATFS文件系统相关的底层读写函数SD_read和SD_write在文件sd_diskio.c中,都是用DMA模式编写的,以读函数为例,核心代码为:uint8_t ret = BSP_SD_ReadBlocks_DMA((uint32_t*)buff, (uint32_t)(sector), count);
if (ret == MSD_OK) { event = osMessageGet(SDQueueID, SD_tiMEOUT); if (event.status == osEventMessage) { if (event.value.v == READ_CPLT_MSG) { res = RES_OK; } DMA传输完毕后会调用文件中定义的中断函数: void BSP_SD_ReadCpltCallback(void){ osMessagePut(SDQueueID, READ_CPLT_MSG, osWaitForever); } 读函数通过队列查询函数osMessageGet来判断DMA传输完成,程序运行良好。 但加入USB_DEVICE模块及其相关文件后,与其相关的底层函数位于u***d_storage_if.c文件中,代码是空的,需要用户自行编写。 问题: u***d_storage_if.c文件的读写函数是否也必须要使用DMA方式, 如果是,是否可以仿照sd_diskio.c里面的代码编写, 如果也调用队列事件,那么如何共用sd_diskio.c文件里面的BSP_SD_ReadCpltCallback? 或者另外创建一个中断或者事件,这一块完全不懂,请高手指导如何编写,跪谢! |
|
相关推荐
2个回答
|
|
cubemx 可以全部配好了,SDIO接口可以不用DMA,u***d_storage_if.c中就那几个函数初始化、读写函数、空间获取函数,补充好了就可以。
|
|
|
|
cubemx 可以全部配好了,SDIO接口可以不用DMA,u***d_storage_if.c中就那几个函数初始化、读写函数、空间获取函数,补充好了就可以。 FATFS模块调用的sd_diskio.c里面是用DMA方式访问的,u***d_storage_if.c不用,完全独立的两个版本当然是可以的,但二者不能共存啊? |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 21:00 , Processed in 0.579951 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号