使用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
如果你没有用到中断读写数据,有没有中断都是一样的
你好,我已经初始化里面 已经配置了中断啊
/* Peripheral interrupt init*/
HAL_NVIC_SetPriority(SDIO_IRQn, 0, 1);
HAL_NVIC_EnableIRQ(SDIO_IRQn); hpdell 发表于 2015-12-7 10:43
你好,我已经初始化里面 已经配置了中断啊
/* Peripheral interrupt init*/
这是开内核中断,你SD 都没有中断触发(触发事件)是不会进中断的 mark0668 发表于 2015-12-7 11:58
这是开内核中断,你SD 都没有中断触发(触发事件)是不会进中断的
那开sd中断在哪里啊 ?? 读SD不应该用中断吧,这样比较容易冲突。 qwe775208732 发表于 2015-12-7 22:37
读SD不应该用中断吧,这样比较容易冲突。
我现在读写貌似都没有使用中断,吧中断函数全部屏蔽后,读写也完全都正常啊 !! 但是初始化里面已经设置了中断,这点我就没有搞明白哦,还请指教指教 !! hsd->Instance,确定走的是SDIO模式吗?在SD操作的过程中加断点,测试一下。 安 发表于 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;
} 仿真一下,SD的操作函数,是不是能进去。
页:
[1]