背景:不同的 USB 模塊和其對(duì)應(yīng)軟件包
STM32 MCU 根據(jù)系列不同,所集成的 USB IP 有所不同。本文是針對(duì)“USB FS IP”這個(gè) USB 模塊在其編號(hào)為 STSW-STM32121 的全速 USB 設(shè)備庫的一個(gè)介紹。
USB FS IP
1. 集成于 STM32F1(除 F105/107)、STM32L1、STM32F3
2. 只支持全速(FS)下的 USB 設(shè)備角色
3. 軟件包:STSW-STM32121 (v4.0.0)
USB 設(shè)備庫結(jié)構(gòu)分析
中斷處理響應(yīng)所有的 USB 事件,如下圖所示。
通過控制傳輸處理標(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í)枚舉過程的傳輸來看幾個(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ù)階段得到的幀格式來配置 USART
【本文摘于ST MCU官網(wǎng)。供分享交流】
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |