STM32F107 USB作為device的插拔檢測
在USB的協(xié)議里,只有主機和HUB具有設備移出檢測功能,作為從設備(device)往往不具有設備斷開連接的檢測,需要自己設計一種檢測機制,判斷USB主設備是否與之斷開。STM32的USB是OTG設備,既可以作為主機也可以作為設備,當其作為設備通過USB與PC通信時,可能會需要STM32檢測是否與PC斷開連接,這時候不可以向PC發(fā)數據,在PC連接上時,可以繼續(xù)USB通信。
檢測USB斷開連接的方法有多種,USB在斷開時會有SUSPEND中斷,但是USB總線上沒有數據時,主機也可以將其掛起,產生SUSPEND中斷,所以這種方法不可靠,另外就是PC定時向USB device發(fā)送數據,當USB device沒有收到數據時即可認為USB斷開連接,但是這種方法要想提高實時性,就需要傳輸大量的握手數據,占用USB總線,不利于USB數據的高效率、高速度的傳輸。最好的方法是通過硬件實現,在USB的VBUS上做文章,USB主機會像device供電,STM32可以檢測該電源引腳,在USB連接時產生上升沿,斷開時產生下降沿,據此可以快速判斷是否與USB主機斷開連接。
在方案設計中遇到的問題是USB斷開沒問題,STM32可以檢測的到,并且CPU正常工作,但是USB連接上時,STM32立馬假死,即CPU仍在工作,只是USB的中斷太頻繁了,程序無法執(zhí)行,產生這種原因不是很清楚,但是可以將中斷關閉后過段時間再打開來解決