• 正文
  • 相关推荐
申请入驻 产业图谱

STM32的FS_USBD插拔识别

07/22 09:35
340
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

STM32的USB在作为DEVICE使用的时候经常需要识别到插拔状态。有个VBUS引脚可以检测电压识别。

检测到B-session有效电压,自动使能D+的上拉电阻;触发设备中断:SRQINT@GINTSTS

??检测到Vbus低于B-session有效电压,自动断开上拉电阻;触发设备中断:SEDET@GOTGINT?检测到有效电压会触发HAL_PCD_ConnectCallback回调函数,如下:

HAL_PCD_IRQHandler? ————>? HAL_PCD_ConnectCallback

检测到无效电压会触发HAL_PCD_DisconnectCallback回调函数,如下:

HAL_PCD_IRQHandler?————>? HAL_PCD_DisconnectCallback

还可以根据数据传输状态是否空闲检测连接状态。总线空闲3ms—>触发设备中断:ESUSP@GINTSTS 。3ms—>
触发设备中断:USBSUSP@GINTSTS 。检测到连接状态:

HAL_PCD_IRQHandler————>? PCD_EP_OutSetupPacket_int————>? ? HAL_PCD_SetupStageCallback————>? ? ? USBD_LL_SetupStage————>? ? ? ? USBD_StdDevReq————>? ? ? ? ? USBD_SetConfig————>? ? ? ? ? ? pdev->dev_state = USBD_STATE_CONFIGURED

检测到空闲(挂起)状态:

HAL_PCD_IRQHandler————>? HAL_PCD_SuspendCallback————>? ? USBD_LL_Suspend————>? ? pdev->dev_state == USBD_STATE_SUSPENDED

这两个都可以用于检测USB连接状态。如果都使能的话按照时间轴的顺序看连接:

VBUS检测到有效电压——>数据检测到连接状态。

断开的话,得看VBUS端有没有比较大的电容之类的,受放电时间影响,可能是先检测到空闲——>VBUS检测到无效电压。

相关推荐