![shequ.stmicroelectronics.cn](./template/st_v1/static/img/logo2.png)
本帖最后由 yukaigogogo 于 2016-8-1 15:30 编辑 第一次求助,大家多多包含。 在用stm32 cubemx 开发一个应用 ,就是可以用USB接口,SDIO来模拟一个U盘。相关的一些配置如图,有DMA的配置,SDIO的DMA配置,中断优先级的配置。 ![]() ![]() ![]() 生成工程后, usbd_storage_if.c 是自动生成的一个文件,但是你要填充一些函数。有两个关键的函数如下。 可以看到我使用了HAL_SD_ReadBlocks() HAL_SD_WriteBlocks()来读写SD卡。整个应用可以正常工作。模拟U盘是成功的。 但是一但我用上HAL_SD_ReadBlocks_DMA(),U盘功能无论如何都不能正常工作。 在反复的调试中,发现了一些端倪,只知道和中断有非常大的关系,还请这方向的大侠看看,出出点子。 官方的例程我看了,他使用的是DMA来读写SDIO的,是可以正常工作的。但是看不出其中的差别。 /******************************************************************************* * Function Name : STORAGE_Read_FS * Description : * Input : None. * Output : None. * Return : None. *******************************************************************************/ int8_t STORAGE_Read_FS (uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) { /* USER CODE BEGIN 6 */ HAL_SD_ReadBlocks(&hsd, (uint32_t*)buf, (uint64_t)(blk_addr * STORAGE_BLK_SIZ), STORAGE_BLK_SIZ, blk_len); return (USBD_OK); /* USER CODE END 6 */ } /******************************************************************************* * Function Name : STORAGE_Write_FS * Description : * Input : None. * Output : None. * Return : None. *******************************************************************************/ int8_t STORAGE_Write_FS (uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) { /* USER CODE BEGIN 7 */ HAL_SD_WriteBlocks(&hsd, (uint32_t*)buf, (uint64_t)(blk_addr * STORAGE_BLK_SIZ), STORAGE_BLK_SIZ, blk_len); return (USBD_OK); /* USER CODE END 7 */ } |
【官方例程】STM32F107以太网官方例程
stm32 USB的CDC类传输掉数据
【MCU实战经验】基于STM32F103C8T6的hart总线调试器设计
求教STM32F103进入STOP模式后用外部中断唤醒的问题
基于STM32F103RCT6的无源蜂鸣器音乐播放(生日快乐歌)
STM32F103c8t6有没有DAC 功能?
STM32F103x中文数据手册
新手求教,为何在我电脑上找不到STM32F1Xx.h文件
金龙107例程汇总(STM32F107)
万利STM32F107VC 原理图
但是在cube里面不能设置成双向DMA好奇怪啊
你的配置有问题:
1 SDIO得分别为Tx和RX配置DMA.
2 SDIO的中断最好不要设置为0,这个与SysTick抢,会影响到SysTick.
3 SDIO global interrup 的优先级最好小于或等于SDIO Tx和RX的DMA的中断优先级.
4 从图中并没有看到你为SDIO的Rx配置DMA,那当然不能使用DMA来接收数据了。
目前在F4上测试表示没有问题。