这段代码是 STM32 HAL 库中处理 USB 设备模式下挂起中断(Suspend Interrupt) 的核心逻辑,主要功能是响应 USB 主机发出的挂起信号并执行相应的低功耗处理。
当 USB 主机需要让设备进入低功耗状态时,会发送挂起信号,此时 USB 控制器会触发USB_OTG_GINTSTS_USBSUSP中断标志。这段代码的作用是:
1、检测该中断标志是否置位(即是否收到挂起信号);
2、确认设备确实处于挂起状态后,调用挂起回调函数执行低功耗操作;
3、清除中断标志,避免重复响应。
分析一下这段代码:
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_USBSUSP))
通过 HAL 库宏__HAL_PCD_GET_FLAG检查全局中断状态寄存器(GINTSTS)中的USB_OTG_GINTSTS_USBSUSP标志位,判断是否发生了挂起中断。USB_OTG_GINTSTS_USBSUSP是 USB 控制器的全局中断标志之一,当主机发送挂起信号时,该位会被硬件置 1。
if ((USBx_DEVICE->DSTS & USB_OTG_DSTS_SUSPSTS) == USB_OTG_DSTS_SUSPSTS)