OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4208|回复: 1

stm32H743 sd使用dma问题 HAL_SD_ReadBlocks_DMA()读到数据全是0

[复制链接]

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2019-10-29
在线时间
31 小时
发表于 2021-10-20 15:44:42 | 显示全部楼层 |阅读模式
10金钱
请教一个下个 我使用stm32h743 sd使用dma  使用cubemx 生成的代码 通过HAL_SD_WriteBlocks_DMA()和 HAL_SD_ReadBlocks_DMA()函数读写 sd卡 ,读到的数据是0.
__align(4) uint8_t  write_buf[512];
__align(4) uint8_t  read_buf[512];
void sd_test(void)
{
        u32 i = 0, status;
        HAL_SD_CardStateTypeDef State;
  HAL_SD_CardCIDTypeDef SD_CardCID;
        State = HAL_SD_GetCardState(&hsd1);
        if(State == HAL_SD_CARD_TRANSFER)
        {
                HAL_SD_GetCardCID(&hsd1,&SD_CardCID);
                printf("\r\n Initialize SD card successfully!\r\n\r\n");
                printf(" SD card information! \r\n");
                printf(" CardCapacity  : %llu \r\n",((unsigned long long)hsd1.SdCard.BlockSize*hsd1.SdCard.BlockNbr));
                printf(" CardBlockSize : %d \r\n",hsd1.SdCard.BlockSize);
                printf(" RCA           : %d \r\n",hsd1.SdCard.RelCardAdd);
                printf(" CardType      : %d \r\n",hsd1.SdCard.CardType);
                printf(" ManufacturerID: %d \r\n",SD_CardCID.ManufacturerID);
        }
        else
        {
                printf("SD卡初始化失败\n" );
                while(1); // 停机
        }
       
        for(i = 0; i < 512; i++)
        {
                write_buf[i] = i % 256;
        }
        printf("------------------- Write SD card block data Test ------------------\r\n");
//status = HAL_SD_WriteBlocks(&hsd1,(uint8_t *)write_buf,0,1,0xffff);
status = HAL_SD_WriteBlocks_DMA(&hsd1,(uint8_t *)write_buf,0,512);
//status = BSP_SD_WriteBlocks_DMA((uint32_t *)write_buf,0,100);
if(status == 0)
{
    printf("Write block data ok \r\n" );
}
else
{
    printf("Write block data fail!\r\n " );
}
delay_ms(2000);
       
printf("------------------- Read SD card block data after Write ------------------\r\n");
status = HAL_SD_ReadBlocks_DMA(&hsd1,(uint8_t *)read_buf,0,512);
//status = BSP_SD_ReadBlocks_DMA((uint32_t *)read_buf, 2 ,100);
if(status == 0)
{
    printf("Read block data ok \r\n" );
    for(i = 0; i < 512; i++)
    {
        printf("0x%02x ", read_buf[i]);
        if((i+1)%16 == 0)
        {
            printf("\r\n");
        }
    }
}else
{
  printf("read block data fail %d\r\n", status);
}

       
       
}










正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2020-8-19
在线时间
335 小时
发表于 2021-10-20 16:24:29 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 19:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表