本篇 LAT 從控制傳輸的角度解析了運行在“USB FS IP”這款 USB 模塊上的全速 USB 設備庫的結構和用法。 背景:不同的 USB 模塊和其對應軟件包 STM32 MCU 根據系列不同,所集成的 USB IP 有所不同。本文是針對“USB FS IP”這個 USB 模塊在其編號為 STSW-STM32121 的全速 USB 設備庫的一個介紹。 USB FS IP 1. 集成于 STM32F1(除 F105/107)、STM32L1、STM32F3 2. 只支持全速(FS)下的 USB 設備角色 3. 軟件包:STSW-STM32121 (v4.0.0) USB 設備庫結構分析 中斷處理響應所有的 USB 事件,如下圖所示。 
通過控制傳輸處理標準枚舉+類相關枚舉 控制傳輸由三個 stage 組成,如下圖所示: 
在控制傳輸的第一階段(Setup stage)完成后,分析 Setup 數據包 8 字節命令,提供用戶回調函數處理和應用所使用的類相關的控制命令 。 
在控制傳輸的第二階段(IN 方向的 Data stage),處理第一階段準備好(確定了數據長度和數據起始地址)的待發送的數據; 或者在控制傳輸的最后階段(IN 方向的 Status stage)完成后,提供用戶接口做應用相關任務 。 

在控制傳輸的第二階段(OUT 方向的 Data stage),接收數據;或者 在控制傳輸的最后階段(OUT 方向的 Status stage)完成后,提供用戶接口做應用相關任務 。 

結合真實枚舉過程的傳輸來看幾個實際的例子 舉例 1: MSC 類的 Get_Max_Lun() 
觸發 CTR 中斷 
Setup0_Proecess –>MSC_Data_setup --> DataStageIn 即 UserToPMABufferCopy 觸發 CTR 中斷 
In0_Process --> DataStageIn --> 數據已經發完 CS = WAIT_STATUS_OUT 觸發 CTR 中斷 Out0_Process -->XXX_Status_Out,這里是空函數 舉例 2: VCP 類的 Set_LineCoding() Setup transaction(命令) 觸發 CTR 中斷 Setup0_Proecess –>VCP_Data_setup --> CS = OUT_DATA Out transaction (設置串口數據幀格式) 觸發 CTR 中斷 Out0_Process --> DataStageOut --> 數據全部讀完 CS = WAIT_STATU_IN In transaction (取走 0 長度數據包) 觸發 CTR 中斷 In0_Process –>VCP_Status_IN,即根據數據階段得到的幀格式來配置 USART 【本文摘于ST MCU官網。供分享交流】 |