初级会员 
  
	- 积分
 - 156
 
        - 金钱
 - 156 
 
       - 注册时间
 - 2023-2-14
 
      - 在线时间
 - 51 小时
 
 
 
 | 
 
 
 楼主 |
发表于 2023-4-14 09:52:18
|
显示全部楼层
 
 
 
 本帖最后由 wyp010123 于 2023-4-14 10:09 编辑  
 
SDIO的初始化 
 
u8 SD_Init(void) 
{ 
    u8 SD_Error; 
     
    //初始化时的时钟不能大于400KHZ  
    SDCARD_Handler.Instance=SDIO; 
    SDCARD_Handler.Init.ClockEdge=SDIO_CLOCK_EDGE_RISING;          //上升沿      
    SDCARD_Handler.Init.ClockBypass=SDIO_CLOCK_BYPASS_DISABLE;     //不使用bypass模式,直接用HCLK进行分频得到SDIO_CK 
    SDCARD_Handler.Init.ClockPowerSave=SDIO_CLOCK_POWER_SAVE_DISABLE;    //空闲时不关闭时钟电源 
    SDCARD_Handler.Init.BusWide=SDIO_BUS_WIDE_1B;                        //1位数据线 
    SDCARD_Handler.Init.HardwareFlowControl=SDIO_HARDWARE_FLOW_CONTROL_DISABLE;//关闭硬件流控 
    SDCARD_Handler.Init.ClockDiv=SDIO_TRANSFER_CLK_DIV;            //SD传输时钟频率最大25MHZ 
  
    SD_Error=HAL_SD_Init(&SDCARD_Handler,&SDCardInfo); 
    if(SD_Error!=SD_OK)  
        { 
                return 1; 
        } 
     
    SD_Error=HAL_SD_WideBusOperation_Config(&SDCARD_Handler,SDIO_BUS_WIDE_4B);//使能宽总线模式 
    if(SD_Error!=SD_OK) 
        {                 
                return 2; 
        } 
         
    return 0; 
} 
 
//SDMMC底层驱动,时钟使能,引脚配置,DMA配置 
//此函数会被HAL_SD_Init()调用 
//hsd:SD卡句柄 
void HAL_SD_MspInit(SD_HandleTypeDef *hsd) 
{ 
    DMA_HandleTypeDef TxDMAHandler,RxDMAHandler; 
    GPIO_InitTypeDef GPIO_Initure; 
     
    __HAL_RCC_SDIO_CLK_ENABLE();    //使能SDIO时钟 
    __HAL_RCC_DMA2_CLK_ENABLE();    //使能DMA2时钟  
    __HAL_RCC_GPIOC_CLK_ENABLE();   //使能GPIOC时钟 
    __HAL_RCC_GPIOD_CLK_ENABLE();   //使能GPIOD时钟 
     
    //PC8,9,10,11,12 
    GPIO_Initure.Pin=GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12; 
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;      //推挽复用 
    GPIO_Initure.Pull=GPIO_PULLUP;          //上拉 
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;     //高速 
    HAL_GPIO_Init(GPIOC,&GPIO_Initure);     //初始化 
     
    //PD2 
    GPIO_Initure.Pin=GPIO_PIN_2;             
    HAL_GPIO_Init(GPIOD,&GPIO_Initure);     //初始化 
} 
 |   
 
 
 
 |