新手上路
- 积分
- 28
- 金钱
- 28
- 注册时间
- 2017-7-16
- 在线时间
- 6 小时
|
1金钱
- 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));
复制代码
|
最佳答案
查看完整内容[请看2#楼]
已经解决,sdio时钟分频有问题,我理解错sdio时钟源了,导致分频系数太高而没有产生时钟,改为120后正常。并且我今天测了一天的时序,tmd,接错io口了,害我不断和官方程序比对一直cmd线上不产生信号,今晚换了一下逻辑分析仪的引脚,tmd产生了。
|