在STM32上检测USB连接事件

时间:2014-07-11 19:01:35

标签: events embedded usb interrupt

我目前正在使用支持USB的低功耗设备,我遇到了一些麻烦。在正常操作期间,系统时钟被设置为明显更慢的速度(因为这是数据记录器仅每隔几分钟激活一次,这不是问题)。但是,当设备插入计算机上的USB端口时,它需要识别这一点,初始化USB堆栈(我可以这样做),并将系统时钟重置为全速(我也可以这样做)

我可能已经注意到,我的问题是" USB Connected"事件。我正在查看STM32评估材料,他们在IRQn表中有一个" USB_FS_WKUP_IRQn",STM32评估板也有USB-5V电源连接到引脚PE6,它也可以作为WKUP3

我是否需要为该引脚启用外部中断,或者是否有更好的方法来检测此类事件并根据需要设置/重置时钟?

提前致谢。

2 个答案:

答案 0 :(得分:0)

基于您提到的中断名称,我发现了this实现:

gdalwarp -of GTiff -co COMPRESS=DEFLATE -ts 20000 20000 -r cubic InputImage.tif OutputImage.tif

似乎您不需要更多。实现可能与您使用的STM32系列不同。

答案 1 :(得分:0)

我用的是stm32l4

我在Vbus引脚上设置了一个中断。 当不在USB模式下时,将该引脚配置为下拉引脚(这样它就不会悬空)。 您的插针和中断线会有所不同,但是

//Configure the pin

    GPIO_InitTypeDef GPIO_InitStruct = {0};
   __HAL_RCC_GPIOA_CLK_ENABLE();

    /*Configure GPIO pin : PA9 */
    GPIO_InitStruct.Pin = VBUS_Pin;
    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
    GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    HAL_GPIO_Init(VBUS_GPIO_Port, &GPIO_InitStruct);

    /* EXTI interrupt init*/
    HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);

//配置中断

      EXTI_ConfigTypeDef exti_conf;
      exti_conf.Line = EXTI_LINE_9;
      exti_conf.GPIOSel = EXTI_GPIOA;
      exti_conf.Mode = EXTI_MODE_INTERRUPT;
      exti_conf.Trigger = EXTI_TRIGGER_RISING; 
      HAL_EXTI_SetConfigLine(&hexti_vbus, &exti_conf);

并确保已处理了一个中断处理程序。在中断处理程序中设置进入USB的标志。而且您应该被设置。