硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6481|回复: 4
收起左侧

有时候STM32的USB库模拟U盘在电脑端识别不出来是SDIO中断和USB-FS中断优先级的问题

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2016-6-22 10:46:03 | 显示全部楼层 |阅读模式
ST官方的USB库2.2.0版本有这个问题:
例子: V5-349-FreeRTOS实验_FreeRTOS+STemWin+FatFS+USB Devicet综合.rar (11.73 MB, 下载次数: 558)
====================================

1. 设置SDIO中断的优先级要高于USB-FS的优先级,要不SD卡模拟U盘很容易失败。仅SDIO中断优先级高于即可。
    ------------------------------NVIC优先级分组已经设置为4-----------------------------------------
    bsp_sdio_sd.c文件
    void SDIO_Interrupts_Config(void)
    {
        NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;  ---------------------->>>>就是此中断的优先级
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        NVIC_InitStructure.NVIC_IRQChannel = SD_SDIO_DMA_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
    }

    ubs_bsp.c文件
    /* USB Device */
    if (pdev == &USB_OTG_dev)
    {
        NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  ---------------------->>>>高于此中断的优先级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        #ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED
            NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_EP1_OUT_IRQn;
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
            NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
            NVIC_Init(&NVIC_InitStructure);

            NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_EP1_IN_IRQn;
            NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
            NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
            NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
            NVIC_Init(&NVIC_InitStructure);
        #endif
    }
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2016-7-1 08:01:04 | 显示全部楼层
已经更新例子。
回复

使用道具 举报

6

主题

65

回帖

83

积分

初级会员

积分
83
发表于 2016-11-22 10:03:33 | 显示全部楼层
我也注意到这个问题了,请问楼主,能介绍一下其中原因吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
 楼主| 发表于 2016-11-23 02:31:48 | 显示全部楼层

回 drjloveyou 的帖子

drjloveyou:我也注意到这个问题了,请问楼主,能介绍一下其中原因吗? (2016-11-22 10:03) 
原因暂时不明。
回复

使用道具 举报

6

主题

65

回帖

83

积分

初级会员

积分
83
发表于 2016-11-23 22:04:37 | 显示全部楼层

回 eric2013 的帖子

eric2013:原因暂时不明。 (2016-11-23 02:31) 
好吧,Eric加油!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 12:53 , Processed in 0.302174 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表