2021-09-12 16:47:25 索煒達電子 700
項目編號:E1122
文件大小:29M
源碼說明:帶中文注釋
開發(fā)環(huán)境:C編譯器
簡要概述:
下面幾條是我在學習過程中記錄下來的問題的解決辦法,或者是小知識點,有不對的地方懇請大牛糾正:
安裝USB虛擬COM口驅動時出現(xiàn)“INF中的服務段落無效”,解決方法如下:fficeffice" />
(1)下載mdmcpq.inf和usbser.sys
(2)將mdmcpq.inf復制到c:\windows\inf
(3)將usbser.sys復制到c:\windows\system32\drivers
小技巧:比如要打開c:\windows\inf,只要在地址欄(IE輸入網址的地址欄和我的電腦里的地址欄都一樣),輸入c:\windows\inf即可打開。
STM32的USB模塊可以產生三種中斷:USB喚醒中斷、USB高優(yōu)先級中斷和USB低優(yōu)先級中斷,在STM32的參考手冊中沒有詳細說明這三種中斷對應哪些事件,現(xiàn)說明如下:
1)USB喚醒中斷:在中斷向量表中的位置是42。這個中斷在USB設備從暫停模式喚醒時產生,喚醒事件由USB_ISTR寄存器的WKUP位標識。
2)USB高優(yōu)先級中斷:在中斷向量表中的位置是19。這個中斷僅由USB同步(Isochronous)模式傳輸或雙緩沖塊(Bulk)傳輸模式下的正確傳輸事件產生,正確傳輸事件由USB_ISTR寄存器的CTR位標識。
3)USB低優(yōu)先級中斷:在中斷向量表中的位置是20。這個中斷由所有其它的USB事件產生,例如正確傳輸(不包括同步模式和雙緩沖塊模式)、USB復位等,事件標志位在USB_ISTR寄存器中。
在STM32的USB開發(fā)包的例子中包含了上述中斷的處理,例如在USB揚聲器的例子中,CTR_HP函數處理USB高優(yōu)先級中斷;在所有例子中都有USB_Istr()函數處理USB低優(yōu)先級中斷。
USB如何區(qū)分低速、全速和高速設備:對于全速和高速設備,上拉電阻是接在D+上;而低速設備則是上拉電阻接在D-上。
USB枚舉過程:
(1) USB主機檢測到USB設備插入后,對設備復位。
(2) USB主機對設備發(fā)送獲取設備描述符的標準請求。
(3) 設備收到該請求后,在數據過程將設備描述符返回給主機。
(4) 主機在成功獲取到一個數據包的設備描述符后并且確認無錯誤后,返回一個0長度的狀態(tài)數據包給設備。
(5) 主機再對設備復位一下,接下來進入到設置地址階段。
(6) USB主機發(fā)出一個設置地址的請求,地址包含在建立包中。
(7) USB設備在收到地址后,返回0長度的狀態(tài)包。
(8) 主機收到0長度的狀態(tài)包之后,返回一個ACK。
(9) 設備在收到這個ACK之后,就可以啟用新的地址了。
USB一直進中斷的原因:主機每1ms就給設備發(fā)送一個sof,3ms沒反應主機就掛起。所以一直進中斷屬于正?,F(xiàn)象。
USB虛擬串口使用時應注意:
(1) 用于上拉的控制位使能時,主機能檢測到USB設備。
(2) 設備插入時,地址為0,后由主機分配地址。
(3) 枚舉結束前(即設備被識別前),不能中斷程序,否則設備不能被識別。
(4) 設備發(fā)送usb_SendDataToHost("\r\n$ERRCMD#\r\n", 10)注意數據長度為10,而不為16.(不知道是不是“\$#這樣的符號不算,求大神賜教”)
主機發(fā)送“WHO’S DEMO”這類有空格的字符串時,空格會被省略,在設備里計算長度時應為9,而不為10.
目錄│文件列表:
│ Ex023-USB虛擬串口通信例程(V2.0_2011-10-16).rar
│ mdmcpq.inf_usbser.sys.rar
│ STM32虛擬串口PC機驅動(配合USB虛擬串口例程使用).rar
│ 圈圈教你玩USB.pdf
└ 基于STM32的USB程序開發(fā)筆記.pdf