关于#stm32# sdio标准库初始化过程中clk不能产生时钟,cmd不能正常发送


void gpio_sdio_init()
{
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
    
    GPIOD->MODER|=(1<<5);
    GPIOD->OSPEEDR|=(3<<4);
    GPIOD->PUPDR|=(1<<4);
    GPIOD->AFR[0]|=(0XC<<8);
    
    GPIOC->MODER|=(0xa<<16);
    GPIOC->MODER|=(0xa<<20);
    GPIOC->MODER|=(1<<25);
    GPIOC->MODER|=(1<<21);
    GPIOC->OSPEEDR|=(0XFF<<16);
    GPIOC->OSPEEDR|=(3<<24);
    GPIOC->PUPDR|=(0X55<<16);
    GPIOC->AFR[1]|=(0Xccccc);
}
void sdio_init()
{
    SDIO_InitTypeDef *hsdio;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SDIO,ENABLE);
    gpio_sdio_init();
    /*最少要等待3个sdio——clk时钟周期以及两个apb2时钟周期,才可操作clkcr寄存器*/
    //SDIO->CLKCR|=0xd0;//DIVIDE 210    
    //SDIO->CLKCR|=(1<<9);
    //SDIO->POWER|=3;
//    SDIO->CLKCR|=(1<<8);//ENABLE
    
    hsdio->SDIO_BusWide=SDIO_BusWide_1b;
    hsdio->SDIO_ClockBypass=SDIO_ClockBypass_Disable;
    hsdio->SDIO_ClockDiv=210;
    hsdio->SDIO_ClockPowerSave=SDIO_ClockPowerSave_Disable;
    hsdio->SDIO_HardwareFlowControl=SDIO_HardwareFlowControl_Disable;
    hsdio->SDIO_ClockEdge=SDIO_ClockEdge_Rising;
    SDIO_Init(hsdio);
        SDIO_SetPowerState(SDIO_PowerState_ON);
    SDIO_ClockCmd(ENABLE);

}
int main()
{
    uint8_t a;
    SDIO_CmdInitTypeDef HSDIO;
    HSDIO.SDIO_Argument=0X0;
    HSDIO.SDIO_CmdIndex=0;
    HSDIO.SDIO_Response=SDIO_Response_No;
    HSDIO.SDIO_Wait=SDIO_Wait_No;
    HSDIO.SDIO_CPSM=SDIO_CPSM_Enable;
    usart_init();
    sdio_init();
    SDIO_SendCommand(&HSDIO);
    while(!(SDIO->STA >>7 &0X01));
    
    a=SDIO_GetCommandResponse();
    
    HSDIO.SDIO_Argument = 0X1AA;
  HSDIO.SDIO_CmdIndex = 8;
  HSDIO.SDIO_Response = SDIO_Response_Short;
  HSDIO.SDIO_Wait = SDIO_Wait_No;
  HSDIO.SDIO_CPSM = SDIO_CPSM_Enable;
  SDIO_SendCommand(&HSDIO);
    while(!(SDIO->STA >>7 &0X01));
    a=SDIO_GetCommandResponse();
    USART1->DR |=a;
    while(1)
    {
        //USART1->DR |=(0X02& (uint16_t)0x01FF);
        
    }
}

时钟配置错了,