STM32F407全速中断
2026-08-13
本文链接为:http://www.usbzh.com/article/detail-1785.html ,欢迎转载,转载请附上本文链接。
中断入口函数为OTG_FS_IRQHandler
//USB OTG中断服务函数,处理所有USB中断
extern USB_OTG_CORE_HANDLE USB_OTG_dev;
void OTG_FS_IRQHandler(void)
{
USBD_OTG_ISR_Handler(&USB_OTG_dev);
}
关键中断流程图
主机插入USB → VBUS上电
│
▼
sessreqintr → DevConnected()
│
▼
usbreset → Reset() ← 设备复位,EP0准备接收
│
▼
enumdone → ← 速度枚举完成,激活EP0
│
▼
outepintr(setup) → SetupStage() ← 收到SETUP包(获取描述符等)
│
▼
inepintr(xfercompl) → DataInStage() ← 发送数据完成
outepintr(xfercompl) → DataOutStage() ← 接收数据完成
│
▼
usbsuspend → Suspend() ← 总线空闲>3ms
│
▼
wkupintr → Resume() ← 主机唤醒
中断处理函数
| 中断标志位 | 处理函数 | 触发条件 | 做了什么 |
|---|---|---|---|
| outepintr | DCD_HandleOutEP_ISR | OUT 端点有事件 | 检查各 OUT 端点的 xfercompl(数据接收完成)→ 调 DataOutStage;setup(收到 SETUP 包)→ 调 SetupStage |
| inepint | DCD_HandleInEP_ISR | IN 端点有事件 | 检查各 IN 端点的 xfercompl(数据发送完成)→ 调 DataInStage;emptyintr(Tx FIFO 空)→ 填充下一包数据 |
| modemismatch | (内联处理) | 模式不匹配 | 直接清除中断标志,无回调 |
| wkupintr | DCD_HandleResume_ISR | 主机唤醒总线 | 恢复时钟 → 调 Resume 回调通知上层 |
| usbsuspend | DCD_HandleUSBSuspend_ISR | 总线进入挂起 | 调 Suspend 回调 → 可选低功耗关时钟 |
| sofintr | DCD_HandleSof_ISR | 每 1ms(FS) / 125μs(HS) 一帧 | 调 SOF 回调(帧同步) |
| rxstsqlvl | DCD_HandleRxStatusQueueLevel_ISR | Rx 状态队列非空 | 读 GRXSTSP 寄存器,根据 pktsts 状态码处理:收到 OUT 数据 → 从 FIFO 读包;收到 SETUP 包 → 存入 setup_packet 缓冲区 |
| usbreset | DCD_HandleUsbReset_ISR | 主机发起 USB 复位 | 清 FIFO、清中断、设备地址归零 → EP0 准备接收 SETUP → 调 Reset 回调 |
| enumdone | DCD_HandleEnumDone_ISR | 速度枚举完成 | 判断 FS/HS → 设置 mps 和 turn-around time → 激活 EP0 |
| incomplisoin | DCD_IsoINIncomplete_ISR | ISO IN 传输不完整 | 调 IsoINIncomplete 回调(仅 ISO 模式) |
| incomplisoout | DCD_IsoOUTIncomplete_ISR | ISO OUT 传输不完整 | 调 IsoOUTIncomplete 回调(仅 ISO 模式) |
| sessreqintr | DCD_SessionRequest_ISR | VBUS 检测到连接 | 调 DevConnected 回调(需 VBUS_SENSING_ENABLED) |
| otgintr | DCD_OTG_ISR | OTG 事件(如会话结束) | 检测 sesenddet → 调 DevDisconnected 回调 |
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936 USB技术交流3:1031974172
STM32-USB





