首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测STM32上的USB连接事件

检测STM32上的USB连接事件
EN

Stack Overflow用户
提问于 2014-07-12 03:01:35
回答 2查看 5.1K关注 0票数 8

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

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

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

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-06-20 22:03:46

根据您提到的中断名称,我找到了this实现:

代码语言:javascript
复制
// Enable the USB Wake-up interrupt
NVICInit.NVIC_IRQChannel = USB_FS_WKUP_IRQn;
NVICInit.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_Init(&NVICInit);

看起来你不需要更多了。其实现可以与您使用的STM32系列不同。

票数 0
EN

Stack Overflow用户

发布于 2020-05-15 19:20:18

我使用stm32l4

我在Vbus引脚上设置了一个中断。在不处于USB模式时,将引脚配置为下拉式(这样它就不会浮动)。你的pin和中断线是不同的,但是

代码语言:javascript
复制
//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);

//设置中断

代码语言:javascript
复制
      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的标志。你应该准备好了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24704714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档