你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
hpdell 提问时间:2015-12-6 16:51 /
本帖最后由 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);


  }
}

收藏 评论9 发布时间:2015-12-6 16:51

举报

9个回答
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的操作函数,是不是能进去。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版