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);
}
}
时钟配置错了,