1、STM32F10xSDIOSDIO库函数入下表:No库函数名作用操作对象1SDIO_DeInit初始化SDIO外设寄存器8个寄存器的的初始值2SDIO_Init初始化SDIO_InitStruct结构体SDIO-CLKCR配置CLKCR3SDIO_StructInit初始化SDIO_InitStruct内的结构成员配置CLKCR寄存所需要的参数缺省值4SDIO_ClockCmd开启/关闭SDIO时钟*(vu32 *) CLKCR_CLKEN_BB配置CLKCR5SDIO_SetPowerState设置电源控制状态SDIO-POWERPOWER操作6SDIO_GetPowerState读取电源控
2、制状态SDIO-POWER7SDIO_ITConfig开启或关闭中断SDIO-MASK8SDIO_DMACmd开启或关闭 DMA *(vu32 *) DCTRL_DMAEN_BB9SDIO_SendCommand初始化SDIO_CmdInitStruct并发送配置命令SDIO-ARG/ CMD10SDIO_CmdStructInit为SDIO_CmdInitStruct结构体填充缺省值11SDIO_GetCommandResponse返回命令反馈信息(命令索引值)SDIO-RESPCMD12SDIO_GetResponse返回上次从SD卡传回的命令响应*(vu32 *)(SDIO_RESP_A
3、DDR + SDIO_RESP)13SDIO_DataConfig初始化SDIO_DataInitStruct以设置数据路径SDIO-DTIMER/ DLEN/ DCTRL14SDIO_DataStructInit初始化SDIO_DataInitStruct结构体的成员15SDIO_GetDataCounter返回待传输的数据字节数SDIO-DCOUNT16SDIO_ReadData从Rx FIFO读出已收到的数据SDIO-FIFO17SDIO_WriteData向Tx FIFO写入待发送的数据SDIO-FIFO18SDIO_GetFIFOCount返回FIFO内的(发送或接受的)数据字数SD
4、IO-FIFOCNT19SDIO_StartSDIOReadWait开启读等待操作*(vu32 *) DCTRL_RWSTART_BBDCTRL的读位操作20SDIO_StopSDIOReadWait关闭读等待操作*(vu32 *) DCTRL_RWSTOP_BB21SDIO_SetSDIOReadWaitMode设置两个插入读等待间隔之一的选项*(vu32 *) DCTRL_RWMOD_BB22SDIO_SetSDIOOperation使能或失能SDIO模式*(vu32 *) DCTRL_SDIOEN_BBDCTRL23SDIO_SendSDIOSuspendCmd使能或失能SDIO模式暂停
5、命令(正发送)*(vu32 *) CMD_SDIOSUSPEND_BB24SDIO_CommandCompletionCmd使能或失能命令完成信号*(vu32 *) CMD_ENCMDCOMPL_BB25SDIO_CEATAITCmd使能或失能CE-ATA中断*(vu32 *) CMD_NIEN_BB26SDIO_SendCEATACmd发送CE-ATA命令(CMD61)*(vu32 *) CMD_ATACMD_BB27SDIO_GetFlagStatus检查SDIO的标志位是否已被设置SDIO-STA28SDIO_ClearFlag清除SDIO挂起标志位SDIO-ICR29SDIO_GetI
6、TStatus检查SDIO中断是已否发生SDIO-STA30SDIO_ClearITPendingBit清除SDIO中断挂起位SDIO-ICR/*【01】函数SDIO_DeInit * Function Name : SDIO_DeInit* Description : Deinitializes the SDIO peripheral registers to their default reset values.* Input : None* Output : None* Return : None*/void SDIO_DeInit(void) SDIO-POWER = 0x000000
7、00; SDIO-CLKCR = 0x00000000; SDIO-ARG = 0x00000000; SDIO-CMD = 0x00000000; SDIO-DTIMER = 0x00000000; SDIO-DLEN = 0x00000000; SDIO-DCTRL = 0x00000000; SDIO-ICR = 0x00C007FF;/清除所有中断标志 SDIO-MASK = 0x00000000;/*【02】函数SDIO_Init* Function Name : SDIO_Init* Description : Initializes the SDIO peripheral acc
8、ording to the specified parameters in the SDIO_InitStruct.* Input : SDIO_InitStruct : pointer to a SDIO_InitTypeDef structure that contains the configuration information for the SDIO peripheral.* Output : None* Return : None*/SDIO_Init的结构体如下:typedef struct u8 SDIO_ClockDiv;/8bit分频系数 u32 SDIO_ClockEd
9、ge; u32 SDIO_ClockBypass; u32 SDIO_ClockPowerSave; u32 SDIO_BusWide; u32 SDIO_HardwareFlowControl; SDIO_InitTypeDef;上述结构体的参数设置如下: Table.2-1 SD时钟相位选择参数SDIO_ClockEdge的值描述/SDIO_CLKCR.NEGEDGE/bit13#defineSDIO_ClockEdge_RisingSDIOCLK的上升沿产生SDIO_CK0x00000000SDIO_ClockEdge_FallingSDIOCLK的下降沿产生SDIO_CK0x00002
10、000 Table.2-2 SD时钟旁路选择参数SDIO_ClockBypass的值描述/SDIO_CLKCR. Bypass/bit10#defineSDIO_ClockBypass_DisableSDIOCLK分频驱动SDIO_CK输出0x00000000根据CLKDIV7:0分频SDIO_ClockBypass_EnableSDIOCLK直接驱动SDIO_CK输出0x00000400 Table.2-3 SD省电配置参数SDIO_ClockPowerSave的值描述/SDIO_CLKCR. Bypass/bit9#defineSDIO_ClockPowerSave_Disable始终输出
11、SDIO_CK0x00000000SDIO_ClockPowerSave_Enable仅在总线活动时才输出SDIO_CK0x00000200 Table.2-4 SD宽总线模式使能参数SDIO_BusWide的值描述/SDIO_CLKCR.WIDBUS1:0#definebit12-11SDIO_BusWide_1b1位总线模式,使用SDIO_D00x00000000默认SDIO_BusWide_4b4位总线模式,使用SDIO_D3:00x00000800SDIO_BusWide_8b8位总线模式,使用SDIO_D7:00x00001000 Table.2-5 SD宽总线模式使能参数SDIO_
12、 HardwareFlowControl的值描述/SDIO_CLKCR. HWFC_EN/bit14#defineSDIO_HardwareFlowControl_Disable关闭硬件流控制0x00000000SDIO_HardwareFlowControl_Enable开启硬件流控制0x00004000 【注】函数在被调用之前,必须对结构体进行具体数值初始化。函数原型如下:void SDIO_Init(SDIO_InitTypeDef* SDIO_InitStruct) u32 tmpreg = 0; /* Check the parameters */ assert_param(IS_S
13、DIO_CLOCK_EDGE(SDIO_InitStruct-SDIO_ClockEdge); assert_param(IS_SDIO_CLOCK_BYPASS(SDIO_InitStruct-SDIO_ClockBypass); assert_param(IS_SDIO_CLOCK_POWER_SAVE(SDIO_InitStruct-SDIO_ClockPowerSave); assert_param(IS_SDIO_BUS_WIDE(SDIO_InitStruct-SDIO_BusWide); assert_param(IS_SDIO_HARDWARE_FLOW_CONTROL(SDI
14、O_InitStruct-SDIO_HardwareFlowControl); /*- SDIO CLKCR Configuration -*/ /* Get the SDIO CLKCR value */ tmpreg = SDIO-CLKCR; /* Clear CLKDIV, PWRSAV, BYPASS, WIDBUS, NEGEDGE, HWFC_EN bits */ tmpreg &= CLKCR_CLEAR_MASK;/ CLKCR_CLEAR_MASK = 0xFFFF8100,其中CLKEN位保持不变更。 /* Set CLKDIV bits according to SDI
15、O_ClockDiv value */ /* Set PWRSAV bit according to SDIO_ClockPowerSave value */ /* Set BYPASS bit according to SDIO_ClockBypass value */ /* Set WIDBUS bits according to SDIO_BusWide value */ /* Set NEGEDGE bits according to SDIO_ClockEdge value */ /* Set HWFC_EN bits according to SDIO_HardwareFlowCo
16、ntrol value */ tmpreg |= (SDIO_InitStruct-SDIO_ClockDiv | SDIO_InitStruct-SDIO_ClockPowerSave | SDIO_InitStruct-SDIO_ClockBypass | SDIO_InitStruct-SDIO_BusWide | SDIO_InitStruct-SDIO_ClockEdge | SDIO_InitStruct-SDIO_HardwareFlowControl); /* Write to SDIO CLKCR */ SDIO-CLKCR = tmpreg;/*【03】函数SDIO_Str
17、uctInit * Function Name : SDIO_StructInit* Description : Fills each SDIO_InitStruct member with its default value.* Input : SDIO_InitStruct: pointer to an SDIO_InitTypeDef structure which will be initialized.* Output : None* Return : None*/对SDIO-CLKCR涉及到的参数结构体(SDIO_InitTypeDef)进行缺省值注入。函数原型如下:void SD
18、IO_StructInit(SDIO_InitTypeDef* SDIO_InitStruct) /* SDIO_InitStruct members default value */ SDIO_InitStruct-SDIO_ClockDiv = 0x00;/不分频 SDIO_InitStruct-SDIO_ClockEdge = SDIO_ClockEdge_Rising;/上升沿触发产生SDIO_CK SDIO_InitStruct-SDIO_ClockBypass = SDIO_ClockBypass_Disable;/关闭旁路,直接用SDIOCLK驱动SDIO_CK输出 SDIO_I
19、nitStruct-SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;/关闭节能功能,时钟输出SDIO_CK SDIO_InitStruct-SDIO_BusWide = SDIO_BusWide_1b;/默认状态下,总线宽度只占1位。 SDIO_InitStruct-SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;/关闭硬件流控制/*【04】函数SDIO_ClockCmd * Function Name : SDIO_ClockCmd* Description : Ena
20、bles or disables the SDIO Clock.* Input : NewState: new state of the SDIO Clock. This parameter can be: ENABLE or DISABLE.* Output : None* Return : None*/void SDIO_ClockCmd(FunctionalState NewState) /* Check the parameters */ assert_param(IS_FUNCTIONAL_STATE(NewState); *(vu32 *) CLKCR_CLKEN_BB = (u3
21、2)NewState;SDIO-CLKCR的CLKEN位地址定义如下:/* Alias word address of CLKEN bit */#define CLKCR_OFFSET (SDIO_OFFSET + 0x04)#define CLKEN_BitNumber 0x08#define CLKCR_CLKEN_BB (PERIPH_BB_BASE + (CLKCR_OFFSET * 32) + (CLKEN_BitNumber * 4)其中:【1】#define PERIPH_BB_BASE (u32)0x42000000)【2】#define SDIO_OFFSET (SDIO_B
22、ASE - PERIPH_BASE) #define SDIO_BASE (PERIPH_BASE + 0x18000)/即SDIO_OFFSET = 0x18000最终结果是:&CLKCR_CLKEN_BB = 0x424B 00E8/*【05】函数SDIO_SetPowerState * Function Name : SDIO_SetPowerState* Description : Sets the power status of the controller.* Input : SDIO_PowerState: new state of the Power state. * This
23、 parameter can be one of the following values:* - SDIO_PowerState_OFF* - SDIO_PowerState_ON* Output : None* Return : None*/POWER寄存器的参数设置如下: Table5-1 SDIO的电源状态配置参数SDIO_PowerState值描述/SDIO-POWER.bit1-0#define备注SDIO_PowerState_OFF电源关闭,卡的时钟停止0x00000000PWRCTRL1:0。另:0x1保留SDIO_PowerState_ON上电状态,卡的时钟开启0x0000
24、0003SDIO_PowerState_UP保留的上电状态0x00000002本函数没有用到其函数原型如下:void SDIO_SetPowerState(u32 SDIO_PowerState) /* Check the parameters */ assert_param(IS_SDIO_POWER_STATE(SDIO_PowerState);/只能输入On和Off两个状态,Up状态不配置 SDIO-POWER &= PWR_PWRCTRL_MASK;/ 0xFFFFFFFC,清除PWRCTRL1:0控制位 SDIO-POWER |= SDIO_PowerState; /写入新控制方式/
25、*【06】函数SDIO_GetPowerState * Function Name : SDIO_GetPowerState* Description : Gets the power status of the controller.* Input : None* Output : None* Return : Power status of the controller. The returned value can* be one of the following:* - 0x00: Power OFF* - 0x02: Power UP* - 0x03: Power ON */u32
26、SDIO_GetPowerState(void) return (SDIO-POWER & (PWR_PWRCTRL_MASK); / 0xFFFFFFFC,读出PWRCTRL1:0控制位配置:0b00、0b10、0b11/*【07】函数SDIO_ITConfig * Function Name : SDIO_ITConfig* Description : Enables or disables the SDIO interrupts.* Input : - SDIO_IT: specifies the SDIO interrupt sources to be enabled or disabled.* This parameter can be one or a combination of the following values:* - SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt* - SDIO_IT_DCRCFAIL: Data block sent/received (CR
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1