【STM32F4xx】USB開發的一些坑!

        因爲某些需求,需要在STM32上開發USB驅動,從網上找了個CDC的例子,又找了VC的上位機進行通信測試,把我兩百多的下載積分都用光了,哎真是坑啊,有些下載了基本不能用,不是endpoint的通信。

        第一個坑:USB開發時,其系統頻率必須使用168MHz,具體我就不細說了,可以參考下面的帖子:

        https://blog.csdn.net/zhengnianli/article/details/102946950

        USB的系統頻率配置如下:

        

        

        由於板子外接晶振頻率爲8MHz,所以PPL_M爲8,PPL_N爲336,PPL_P爲2,PPL_Q爲7,SystemCoreClock爲168MHz,計算公式如下:

        SystemCoreClock = ExtFreq/PPL_M*PPL_N/PPL_P = 8MHz/8*336/2 = 168MHz

        USB的時鐘爲 ExtFreq/PPL_M*PPL_N/PPL_Q = 8MHz/8*336/7 = 48MHz

        由於USB的始終必須爲48MHz,因此係統時鐘需要用168MHz,詳細原因參考上述連接。

 

        第二個需要注意的地方:我把所有的USB驅動移植到工程文件裏後,系統啓動不了,經過排查,原來是忘了添加USB的中斷處理程序:

        

 

        第三個需要注意的地方:USB移植完成後,使用USBTreeView查看USB節點,USB節點上有一個黃色的感嘆號,使用上位機軟件可以打開USB設備,但是在數據傳輸時失敗。

        查找問題,原來是USB在調用USBD_malloc() 申請內存是失敗,導致數據無法接收。

        

        網上查找,找到解決方法如下,修改startup_stm32f429_439xx.s文件中的Heap_Size爲0x400或者0x800,具體原因參考以下鏈接:

        https://blog.csdn.net/qcopter/article/details/52510923

        

        修改後,可以正常通信了。

        

 

        另附:調試USB設備用到的軟件名稱:

        BusHound:可查看USB設備節點,可進行USB的通信測試,監控USB收發數據。

        USBTreeView:可查看USB設備節點,可查看USB節點的具體信息,如描述,路徑,ID等。

        NI-VISA:可生成USB驅動文件。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章