完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、硬件及软件版本
1、配置RCC。使用的开发板外接了8MHz的晶振。 2、配置烧录。烧录使用J-link SWD的方式 3、配置SDIO。
5、配置时钟 6、生成程序。 三、修改生成的程序 1、修改SDIO_INIT_CLK_DIV的值为0xB2。
2、在main函数前增加变量。 /* USER CODE BEGIN PTD */ #define WRITE_READ_ADDR 0x00000000 #define NUMBER_OF_BLOCKS 1 #define BLOCK_SIZE 512 /* USER CODE END PTD */ /* USER CODE BEGIN 0 */ HAL_StatusTypeDef Return_Status; HAL_SD_CardStateTypeDef SD_Card_Status; HAL_DMA_StateTypeDef DMA_Status; uint8_t Buffer_Tx[512]; uint8_t Buffer_Rx[512]; /* USER CODE END 0 */ 3、在main.c函数增加测试读写程序。 /* USER CODE BEGIN 2 */ printf(" Warning: this program may erase all the TF card data. rn"); printf("rn Initialize SD card successfully!rnrn"); printf(" SD card information! rn"); printf(" CardCapacity : %llu rn",((unsigned long long)hsd.SdCard.BlockSize*hsd.SdCard.BlockNbr)); printf(" CardBlockSize : %d rn",hsd.SdCard.BlockSize); printf(" RCA : %d rn",hsd.SdCard.RelCardAdd); printf(" CardType : %d rn",hsd.SdCard.CardType); Return_Status = HAL_SD_Erase(&hsd,WRITE_READ_ADDR,WRITE_READ_ADDR+NUMBER_OF_BLOCKS*4); printf("erase status :%drn",Return_Status); Return_Status=SDIO_ReadBlocks_DMA(&hsd,Buffer_Rx, WRITE_READ_ADDR, NUMBER_OF_BLOCKS); printf("read status :%drn",Return_Status); for( temp = 0;temp < 512 ;temp++ ) { printf("%4d",Buffer_Rx[temp]); } memset(Buffer_Tx,55,sizeof(Buffer_Tx)-1); SDIO_WriteBlocks_DMA(&hsd,Buffer_Tx, WRITE_READ_ADDR, NUMBER_OF_BLOCKS); printf("write status :%drn",Return_Status); Return_Status=SDIO_ReadBlocks_DMA(&hsd,Buffer_Rx, WRITE_READ_ADDR, NUMBER_OF_BLOCKS); printf("read status :%drn",Return_Status); for( temp = 0;temp < 512 ;temp++ ) { printf("%4d",Buffer_Rx[temp]); } /* USER CODE END 2 */ 4、编写读写DMA程序。 HAL_StatusTypeDef SDIO_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks) { HAL_StatusTypeDef Return_Status; HAL_SD_CardStateTypeDef SD_Card_Status; do { SD_Card_Status = HAL_SD_GetCardState(hsd); }while(SD_Card_Status != HAL_SD_CARD_TRANSFER ); /* SDIO DMA DeInit */ /* SDIO DeInit */ HAL_DMA_DeInit(&hdma_sdio); /* SDIO DMA Init */ /* SDIO Init */ hdma_sdio.Instance = DMA2_Channel4; hdma_sdio.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_sdio.Init.PeriphInc = DMA_PINC_DISABLE; hdma_sdio.Init.MemInc = DMA_MINC_ENABLE; hdma_sdio.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_sdio.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_sdio.Init.Mode = DMA_NORMAL; hdma_sdio.Init.Priority = DMA_PRIORITY_LOW; if (HAL_DMA_Init(&hdma_sdio) != HAL_OK) { Error_Handler(); } __HAL_LINKDMA( hsd,hdmarx,hdma_sdio); Return_Status = HAL_SD_ReadBlocks_DMA( hsd,pData, BlockAdd, NumberOfBlocks); return Return_Status; } HAL_StatusTypeDef SDIO_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks) { HAL_StatusTypeDef Return_Status; HAL_SD_CardStateTypeDef SD_Card_Status; do { SD_Card_Status = HAL_SD_GetCardState(hsd); }while(SD_Card_Status != HAL_SD_CARD_TRANSFER ); /* SDIO DMA DeInit */ /* SDIO DeInit */ HAL_DMA_DeInit(&hdma_sdio); /* SDIO DMA Init */ /* SDIO Init */ hdma_sdio.Instance = DMA2_Channel4; hdma_sdio.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_sdio.Init.PeriphInc = DMA_PINC_DISABLE; hdma_sdio.Init.MemInc = DMA_MINC_ENABLE; hdma_sdio.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_sdio.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_sdio.Init.Mode = DMA_NORMAL; hdma_sdio.Init.Priority = DMA_PRIORITY_LOW; if (HAL_DMA_Init(&hdma_sdio) != HAL_OK) { Error_Handler(); } __HAL_LINKDMA(hsd,hdmatx,hdma_sdio); Return_Status = HAL_SD_WriteBlocks_DMA(hsd,pData, BlockAdd, NumberOfBlocks); return Return_Status; } 注意:STM32F103的SDIO DMA每次由读数据变为写数据或者由写数据变为读数据时,都需要重新初始化DMA(主要是为了更改数据传输的方向)。 注意:STM32F103的SDIO DMA每次由读数据变为写数据或者由写数据变为读数据时,都需要重新初始化DMA(主要是为了更改数据传输的方向)。 5、烧录测试。 6、源文件 https://download.csdn.net/download/Little520Stone/12605528 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:21 , Processed in 0.811850 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号