本篇 LAT 從控制傳輸?shù)慕嵌冉馕隽诉\(yùn)行在“USB FS IP”這款 USB 模塊上的全速 USB 設(shè)備庫(kù)的結(jié)構(gòu)和用法。 背景:不同的 USB 模塊和其對(duì)應(yīng)軟件包 STM32 MCU 根據(jù)系列不同,所集成的 USB IP 有所不同。本文是針對(duì)“USB FS IP”這個(gè) USB 模塊在其編號(hào)為 STSW-STM32121 的全速 USB 設(shè)備庫(kù)的一個(gè)介紹。 USB FS IP 1. 集成于 STM32F1(除 F105/107)、STM32L1、STM32F3 2. 只支持全速(FS)下的 USB 設(shè)備角色 3. 軟件包:STSW-STM32121 (v4.0.0) USB 設(shè)備庫(kù)結(jié)構(gòu)分析 中斷處理響應(yīng)所有的 USB 事件,如下圖所示。 
通過(guò)控制傳輸處理標(biāo)準(zhǔn)枚舉+類相關(guān)枚舉 控制傳輸由三個(gè) stage 組成,如下圖所示: 
在控制傳輸?shù)牡谝浑A段(Setup stage)完成后,分析 Setup 數(shù)據(jù)包 8 字節(jié)命令,提供用戶回調(diào)函數(shù)處理和應(yīng)用所使用的類相關(guān)的控制命令 。 
在控制傳輸?shù)牡诙A段(IN 方向的 Data stage),處理第一階段準(zhǔn)備好(確定了數(shù)據(jù)長(zhǎng)度和數(shù)據(jù)起始地址)的待發(fā)送的數(shù)據(jù); 或者在控制傳輸?shù)淖詈箅A段(IN 方向的 Status stage)完成后,提供用戶接口做應(yīng)用相關(guān)任務(wù) 。 

在控制傳輸?shù)牡诙A段(OUT 方向的 Data stage),接收數(shù)據(jù);或者 在控制傳輸?shù)淖詈箅A段(OUT 方向的 Status stage)完成后,提供用戶接口做應(yīng)用相關(guān)任務(wù) 。 

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