STM32 USB CDC 驅動問題
阿新 • • 發佈:2018-11-07
問題:
STM32的 USB CDC 工程使用STM32Cube 生成,編譯下載後,插上USB發現如下圖問題:
在裝置管理器顯示黃色感嘆號,驅動不正常。
原因:
由於SMT32 USB 部分的程式碼用到了 malloc 和 free 這種標準庫(#include <stdlib.h>)中定義的記憶體管理介面 ,而使用這種函式的前提是在記憶體中開出大小確定的 Heap_Size(堆空間)。這個堆空間在startup_stm32fxxxxx.s 啟動檔案設定,預設堆空間為 0x200(512位元組),而STM32 USB 使用到的 堆空間 超過了 0x200 位元組,所以導致USB 工作不正常。
解決:
將STM32 工程中的startup_stm32fxxxxx.s 啟動檔案裡的 Heap_Size 改大點,我這裡設定Heap_Size為 0x400後,USB工作正常,收發資料OK。
這時PC裝置管理器中的 USB CDC裝置已經列舉成功,如下圖:
建議:
在微控制器這種不帶MMU的平臺上程式設計時,儘量少用 標準庫裡的 malloc 來動態分配記憶體,因為會帶來記憶體碎片,可能會導致程式崩潰,如果實在需要動態記憶體分配,可以自己寫個簡單的動態記憶體管理方法。參考我的另一篇blog:https://blog.csdn.net/qq_21475601/article/details/77579462
---------------------
作者:泡在妞裡的Feel
來源:CSDN
原文:https://blog.csdn.net/qq_21475601/article/details/81062132
版權宣告:本文為博主原創文章,轉載請附上博文連結!