最近乙個專案需要用f207的usb做乙個復合裝置,目標是將msc和vcp裝置復合,msc裝置使用的是spiflash。
根據其他人的經驗,做usb復合裝置的過程,大致上就是將兩個裝置的描述符和**融合在一起。不過做起來可是沒有這麼簡單,我剛開始把兩部分**一下子融合在一起,各種問題和錯誤,什麼描述符問題,usb響應問題,端點傳輸出錯,調到最後結果不是認不到串列埠就是認不到u盤。想放棄的時候,就嘗試了合併hid和msc裝置,沒想到很容易就成功了,但最終需求還是要符合msc和vcp,那就重新再來一次吧。一步一步來,修改乙個地方就除錯一下,這樣很容易找到出錯的地方。
第一步先從描述符開始。由於vcp用了兩個inte***ce,msc用乙個inte***ce,在開發中嘗試了三種描述符的寫法,分別是:
1.不使用iad描述符。
2.使用iad描述符。
3.將vcp的inte***ce改為乙個再合併msc的描述符。
最終還是採用了第三種描述符成功了。
第二步開始合併vcp和msc的**,主要的修改集中在usbd_msc_core.c檔案(我是拿msc的例程做的修改)。修改的函式包括:
usbd_msc_deinit():新增usbd_cdc_deinit()的**。
usbd_msc_setup():新增usbd_cdc_setup()的**,注意根據windex區分不同的class響應。
usbd_msc_datain():新增usbd_cdc_datain ()的**,注意根據
epnum區分不同裝置的資料。
usbd_msc_dataout():新增usbd_cdc_dataout ()的**,注意根據epnum區分不同裝置的資料。
將vcp特有的函式新增進來。包括usbd_cdc_ep0_rxready, usbd_cdc_sof。
最後,其他檔案的修改包括,usbd_conf.h中新增vcp裝置的巨集定義,usb_conf.h中修改每個fifo size(st關於fifo size的注釋還是不太明白)。
vcp的驅動用inf檔案安裝。
最後,看下效果。
如圖, 左上是認出來的16mb的u盤。右上是vcp串列埠,自發自收模擬的gga資料。下方式bus hound抓的device資訊,注意看紅框處。
STM32F207外部中斷實驗
stm32的每個io口都可以作為外部中斷輸入。gpiox.0對映到exti0,gpiox.1對映到exti1,同乙個時間只能有乙個io口對映到中斷線。對於每乙個中斷線,可以設定相應的觸發方式 上公升沿觸發 下降沿觸發 邊沿觸發 和使能。io外部中斷在中斷向量表中只分配了7個中斷向量,也就是只能使用7...
STM32 USB 復合裝置實現
可實現用乙個usb介面實現多個usb裝置,如 hid msc hid cdc hid cdc msc等等 使用hal庫,以hid msc為例 具體步驟 目錄四 初始化使用 增加端點,同時修改fifo配置大小,stm32 usb fs fifo總大小為1.25kb,設定是使用的單位是32bit 原始碼...
STM32F207 uCOS II 任務排程的問題
是的,這個問題糾纏了我乙個多月,我都要崩潰了放棄了。今天還是在網際網路上找到了答案,太感謝發帖的人了。抑鬱的情懷終於得到釋放,啦啦啦 平台 stm32f207 ucos ii v2.85 lwip 問題 網口接收到資料來中斷時,通過ossempost告知任務進行處理。只要接網口,有網口資料接收,不管...