SDIO卡stm32CubeMX设置

SDIO卡stm32CubeMX设置
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

要设置流控制,才可用。

//判断SD卡是否可以传输(读写)数据
//返回值:SD_TRANSFER_OK 传输完成,可以继续下一次传输
// SD_TRANSFER_BUSY SD卡正忙,不可以进行下一次传输
uint8_t SD_GetCardState(void)
{
return((HAL_SD_GetCardState(&hsd)==HAL_SD_CARD_TRANSFER )?SD_TRANSFER_OK:SD_TRANSFER_BUSY);
}

//读SD卡
//buf:读数据缓存区
//sector:扇区地址
//cnt:扇区个数
//返回值:错误状态;0,正常;其他,错误代码;
uint8_t SD_ReadDisk(uint8_t* buf,uint32_t sector,uint32_t cnt)
{
uint8_t sta=HAL_OK;
uint32_t timeout=SD_TIMEOUT;
long long lsector=sector;
//INTX_DISABLE();//关闭总中断(POLLING模式,严禁中断打断SDIO读写操作!!!)
__ASM volatile(“cpsid i”);
sta=HAL_SD_ReadBlocks(&hsd, (uint8_t*)buf,lsector,cnt,SD_TIMEOUT);//多个sector的读操作

//等待SD卡读完
while(SD_GetCardState()!=SD_TRANSFER_OK)
{
	if(timeout-- == 0)
	{	
		sta=SD_TRANSFER_BUSY;
	}
}
//INTX_ENABLE();//开启总中断
__ASM volatile("cpsie i");
return sta;

}

//写SD卡
//buf:写数据缓存区
//sector:扇区地址
//cnt:扇区个数
//返回值:错误状态;0,正常;其他,错误代码;
uint8_t SD_WriteDisk(uint8_t buf,uint32_t sector,uint32_t cnt)
{
uint8_t sta=HAL_OK;
uint32_t timeout=SD_TIMEOUT;
long long lsector=sector;
//INTX_DISABLE();//关闭总中断(POLLING模式,严禁中断打断SDIO读写操作!!!)
__ASM volatile(“cpsid i”);
sta=HAL_SD_WriteBlocks(&hsd,(uint8_t
)buf,lsector,cnt,SD_TIMEOUT);//多个sector的写操作

//等待SD卡写完
while(SD_GetCardState()!=SD_TRANSFER_OK)
{
	if(timeout-- == 0)
	{	
		sta=SD_TRANSFER_BUSY;
	}
}    
//INTX_ENABLE();//开启总中断
__ASM volatile("cpsie i");
return sta;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值