有时候STM32的USB库模拟U盘在电脑端识别不出来是SDIO中断和USB-FS中断优先级的问题
ST官方的USB库2.2.0版本有这个问题:例子:
====================================
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
} 已经更新例子。 我也注意到这个问题了,请问楼主,能介绍一下其中原因吗?
回 drjloveyou 的帖子
drjloveyou:我也注意到这个问题了,请问楼主,能介绍一下其中原因吗? (2016-11-22 10:03) images/back.gif原因暂时不明。
回 eric2013 的帖子
eric2013:原因暂时不明。 (2016-11-23 02:31) images/back.gif好吧,Eric加油!
页:
[1]