STM32F401 SDIO HAL driver初始化SD卡

发布者:幸福之星最新更新时间:2018-07-19 来源: eefocus关键字:STM32F401  初始化SD卡 手机看文章 扫描二维码
随时随地手机看文章

STM32F4xx的HAL部分已经提供了SD的driver,初始化时的IO PIN等放在HAL_SD_MspInit。


void HAL_SD_MspInit(SD_HandleTypeDef *hsd)

{

GPIO_InitTypeDef  GPIO_InitStruct;

 

__HAL_RCC_GPIOC_CLK_ENABLE();

__HAL_RCC_GPIOD_CLK_ENABLE();

 

GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;

GPIO_InitStruct.Pull      = GPIO_PULLUP;

GPIO_InitStruct.Speed     = GPIO_SPEED_FAST;

GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;

 

/*SDIO GPIO Configuration   

PC8     ------> SDIO_D0

PC9     ------> SDIO_D1

PC10     ------> SDIO_D2

PC11     ------> SDIO_D3

PC12     ------> SDIO_CK

PD2     ------> SDIO_CMD

*/

GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12;    

HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_2;    

HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

 

__HAL_RCC_SDIO_CLK_ENABLE(); 

__SDIO_CLK_ENABLE();

 

hsd->Instance = SDIO;

hsd->Init.ClockEdge           = SDIO_CLOCK_EDGE_RISING;

hsd->Init.ClockBypass         = SDIO_CLOCK_BYPASS_DISABLE;

hsd->Init.ClockPowerSave      = SDIO_CLOCK_POWER_SAVE_DISABLE;

hsd->Init.BusWide             = SDIO_BUS_WIDE_1B;

hsd->Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;

hsd->Init.ClockDiv            = SDIO_TRANSFER_CLK_DIV;

}


定义两个变量

SD_HandleTypeDef hsd;

HAL_SD_CardInfoTypedef SDCardInfo;


main函数中初始化SD卡的相关代码:

__IO HAL_SD_ErrorTypedef errorstate = SD_OK;

errorstate = HAL_SD_Init(&hsd, &SDCardInfo);

if(SD_OK == errorstate)

{

errorstate = HAL_SD_WideBusOperation_Config(&hsd, SDIO_BUS_WIDE_4B);

if(SD_OK != errorstate)

{

while(1);

}

....

}

HAL_SD_Init()函数中会先调用HAL_SD_MspInit()初始化PIN和clk等。


需要注意的是初始化时bus width只能设置成1bit,然后通过


HAL_SD_WideBusOperation_Config(&hsd, SDIO_BUS_WIDE_4B)来切换成4位模式,在初始化时直接设置成4位是无效的。


完成以上工作后就可以通过HAL_SD_ReadBlocks()和HAL_SD_WriteBlocks()来完成block形式的读写操作了,需要FATFS的话可以参考其它例子。


关键字:STM32F401  初始化SD卡 引用地址:STM32F401 SDIO HAL driver初始化SD卡

上一篇:stm32CubeMX HAL库中延时的几种方式解析
下一篇:stm32f405 HAL库串口接收错误

推荐阅读最新更新时间:2024-03-16 16:09

STM32F401 ILI9235液晶屏屏 2.8寸 驱动心得
ILI9235液晶屏屏幕 ILI9325有一个16位的索引寄存器(IR),一个18位的写数据寄存器(WDR),和一个18位的读数据寄存器(RDR)。 GPIO初始化,看电路图也就知道了改初始化哪几组引脚,特别注意输入输出模式的选择。 在驱动前需要些三个函数,一个是写指令函数,一个写数据函数。 还有一个读取IC函数。在这三个函数的基础上,便可以促使化LCD了。 这一段代码就不用深入,从厂家给的程序复制就好。 Write_Cmd_Data(0x0001,0x0100); //0001,0100 Write_Cmd_Data(0x0002,0x0700); Write_Cmd_Data(0x0003,0x1030); delayms(
[单片机]
STM32F401 SDIO HAL driver初始化SD卡
STM32F4xx的HAL部分已经提供了SD的driver,初始化时的IO PIN等放在HAL_SD_MspInit。 void HAL_SD_MspInit(SD_HandleTypeDef *hsd) { GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GP
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved