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

使用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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版