打印

使用USB虚拟串口时出现问题

[复制链接]
1971|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
鹤舞九天|  楼主 | 2014-5-10 20:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的项目需要用到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);
}

请问是哪里冲突了???


沙发
icecut| | 2014-5-10 22:14 | 只看该作者
NVIC是非向量中断控制器.
那么你可以在这一章找到配置方法,
然后给后面的这两个函数加上注释.看看有没有和手册要求的东西冲突?
比如优先级组是不是冲突啊,中断配置是不是有影响?

使用特权

评论回复
板凳
mmuuss586| | 2014-5-10 22:43 | 只看该作者
你usb部分已经设置最高优先级了,肯定可以响应。可能中断程序或外部中断,定时器中断初始化有问题。你把上面的中断初始化程序,一段段屏蔽看看,主要谁引起的。

使用特权

评论回复
地板
江陵龙少| | 2014-5-11 22:43 | 只看该作者
优先级分组函数调用一次就可以了,

使用特权

评论回复
5
鹤舞九天|  楼主 | 2014-5-21 21:00 | 只看该作者
icecut 发表于 2014-5-10 22:14
NVIC是非向量中断控制器.
那么你可以在这一章找到配置方法,
然后给后面的这两个函数加上注释.看看有没有和 ...

谢谢啊,最近突然又要赶其他事情,这个就暂时搁置了,以后试验看看。

使用特权

评论回复
6
鹤舞九天|  楼主 | 2014-5-21 21:02 | 只看该作者
江陵龙少 发表于 2014-5-11 22:43
优先级分组函数调用一次就可以了,

这个试过的,没用。以前已有调用两次成功的例子。

使用特权

评论回复
7
鹤舞九天|  楼主 | 2014-5-21 21:03 | 只看该作者
mmuuss586 发表于 2014-5-10 22:43
你usb部分已经设置最高优先级了,肯定可以响应。可能中断程序或外部中断,定时器中断初始化有问题。你把上 ...

嗯,最近突然又要赶其他事情,这个就暂时搁置了,以后一条条试验看看。

使用特权

评论回复
8
香水城| | 2014-5-23 17:36 | 只看该作者
关注:dizzy:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

11

帖子

0

粉丝