微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STM32 USB的问题,中断设置出现问题

STM32 USB的问题,中断设置出现问题

时间:10-02 整理:3721RD 点击:
我的项目需要用到USB的虚拟串口,用的STM32L151和F103差不多的。我用官方的VisualComport_Loopback Demo改,官方的例子已经测试通过了,没有问题。但是我自己的程序里一旦进行中断的配置,就会出现枚举不成功的现象(也就是电脑上显示未识别的USB设备)。
关键代码如下:
int main(void)
{   
  sys_ini();        
  per_ini();        
  bsp_ini();      
  Set_System();
  Set_USBClock();
  USB_Interrupts_Config();
  USB_Init();   
while(1)

CDC_Send_DATA ((u8*)"test success\r\n",14);   

}
实验发现 USB_Interrupts_Config();和  sys_ini(); 存在冲突
经测试,是与sys_ini();中的 NVIC_Configuration();发生了冲突,只要注释掉 NVIC_Configuration();一切就正常了。
下面列出两个冲突的函数
void NVIC_Configuration()
{
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
   
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority =2;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority =1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
   
    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

void USB_Interrupts_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//使能USB的优先级中断
  NVIC_InitStructure.NVIC_IRQChannel = USB_LP_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
//使能USB唤醒中断
  NVIC_InitStructure.NVIC_IRQChannel = USB_FS_WKUP_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
请问是哪里冲突了?

谢谢谢谢谢谢谢xxxx

谢啥啊,我是在问问题啊,又没有说什么有价值的东西。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top