HAL库读写SD卡(DMA方式)

阅读: 评论:0

HAL库读写SD卡(DMA方式)

HAL库读写SD卡(DMA方式)

stm32cube配置

lock transition on which the bit capture is made //指定位捕捉的时钟边沿
sdmmc clock divider bypass //不使用bypass模式,直接用HCLK进行分频得到SDIO_CK
sdmmc Clock output is enabled when the bus is idle // 空闲时不关闭时钟电源
sdmmc hardware flow control //关闭硬件流控制
sdmmcclk clock divider factor //时钟分频

SDMMC 时钟分频,当MCU主频低时,SDMMC时钟也得降低,否则不能读写


DMA中断优先级要低于SDMMC中断优先级




RX和TX设置为轮询模式

#define BLOCK_SIZE            512        			             // SD卡块大小     
#define NUMBER_OF_BLOCKS      1                         // 测试块数量(小于15)
#define WRITE_READ_ADDRESS    0x00001000     // 测试读写地址__align(4) uint32_t Buffer_Block_Tx[BLOCK_SIZE*NUMBER_OF_BLOCKS]; // 写数据缓存
__align(4) uint32_t Buffer_Block_Rx[BLOCK_SIZE*NUMBER_OF_BLOCKS]; // 读数据缓存HAL_StatusTypeDef sd_status;    // HAL库函数操作SD卡函数返回值:操作结果//填充缓冲区数组
void Fill_Buffer(uint32_t *pBuffer, uint32_t BufferLength, uint32_t Offset)
{uint32_t index = 0;/* 填充数据 */for (index = 0; index < BufferLength; index++ ){pBuffer[index] = index + Offset;}
}Fill_Buffer(Buffer_Block_Tx,BLOCK_SIZE*NUMBER_OF_BLOCKS, 0x6666);HAL_SD_Erase(&hsd1,0x00000000,WRITE_READ_ADDRESS+1000);HAL_Delay(100);
sd_status=HAL_SD_ReadBlocks_DMA(&hsd1,(uint8_t *)Buffer_Block_Rx,WRITE_READ_ADDRESS,NUMBER_OF_BLOCKS);HAL_Delay(100);
sd_status= HAL_SD_WriteBlocks_DMA(&hsd1,(uint8_t *)Buffer_Block_Tx,WRITE_READ_ADDRESS,NUMBER_OF_BLOCKS);HAL_Delay(100);
sd_status=HAL_SD_ReadBlocks_DMA(&hsd1,(uint8_t *)Buffer_Block_Rx,WRITE_READ_ADDRESS,NUMBER_OF_BLOCKS);

在线调试时可在watch窗口查看写入读取数值

本文发布于:2024-02-04 08:18:25,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170702915353884.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:方式   HAL   SD   DMA
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23