hpdell 发表于 2015-12-6 16:51:31

使用cubeMX 自动产生的sd卡程序,屏蔽中断后也可以正常读...

本帖最后由 hpdell 于 2015-12-6 17:01 编辑

使用cubeMX 自动产生的sd卡程序,屏蔽中断函数后也可以正常读写,

请问这是何故啊 ??

在初始化时也是开始sd卡的中断


// 吧这个中断屏蔽后,sd卡也能够支持读写
void SDIO_IRQHandler(void)
{
HAL_SD_IRQHandler(&hsd);
}

// 初始化
void MX_SDIO_SD_Init(void)
{

hsd.Instance = SDIO;
hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
hsd.Init.ClockDiv = 0;

}

void HAL_SD_MspInit(SD_HandleTypeDef* hsd)
{

GPIO_InitTypeDef GPIO_InitStruct;
if(hsd->Instance==SDIO)
{


    __SDIO_CLK_ENABLE();

    /**SDIO GPIO Configuration   
    PC8   ------> SDIO_D0
    PC9   ------> SDIO_D1
    PC10   ------> SDIO_D2
    PC11   ------> SDIO_D3
    PC12   ------> SDIO_CK
    PD2   ------> SDIO_CMD
    */
    GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
                        |GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_2;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF12_SDIO;
    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

    /* Peripheral interrupt init*/
    HAL_NVIC_SetPriority(SDIO_IRQn, 0, 1);
    HAL_NVIC_EnableIRQ(SDIO_IRQn);


}
}

mark0668 发表于 2015-12-6 17:05:39

如果你没有用到中断读写数据,有没有中断都是一样的

hpdell 发表于 2015-12-7 10:43:12

mark0668 发表于 2015-12-6 17:05
如果你没有用到中断读写数据,有没有中断都是一样的

你好,我已经初始化里面 已经配置了中断啊

    /* Peripheral interrupt init*/
    HAL_NVIC_SetPriority(SDIO_IRQn, 0, 1);
    HAL_NVIC_EnableIRQ(SDIO_IRQn);

mark0668 发表于 2015-12-7 11:58:50

hpdell 发表于 2015-12-7 10:43
你好,我已经初始化里面 已经配置了中断啊

    /* Peripheral interrupt init*/


这是开内核中断,你SD 都没有中断触发(触发事件)是不会进中断的

hpdell 发表于 2015-12-7 16:49:19

mark0668 发表于 2015-12-7 11:58
这是开内核中断,你SD 都没有中断触发(触发事件)是不会进中断的

那开sd中断在哪里啊 ??

qwe775208732 发表于 2015-12-7 22:37:30

读SD不应该用中断吧,这样比较容易冲突。

hpdell 发表于 2015-12-8 10:44:28

qwe775208732 发表于 2015-12-7 22:37
读SD不应该用中断吧,这样比较容易冲突。

我现在读写貌似都没有使用中断,吧中断函数全部屏蔽后,读写也完全都正常啊 !! 但是初始化里面已经设置了中断,这点我就没有搞明白哦,还请指教指教 !!

发表于 2015-12-8 11:40:16

hsd->Instance,确定走的是SDIO模式吗?在SD操作的过程中加断点,测试一下。

hpdell 发表于 2015-12-8 14:43:00

安 发表于 2015-12-8 11:40
hsd->Instance,确定走的是SDIO模式吗?在SD操作的过程中加断点,测试一下。

void MX_SDIO_SD_Init(void)
{

hsd.Instance = SDIO;
hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
hsd.Init.BusWide = SDIO_BUS_WIDE_1B;
hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
hsd.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV;

}

发表于 2015-12-8 14:44:34

仿真一下,SD的操作函数,是不是能进去。
页: [1]
查看完整版本: 使用cubeMX 自动产生的sd卡程序,屏蔽中断后也可以正常读...