1. 程式人生 > >STM32 USB CDC 驅動問題

STM32 USB CDC 驅動問題

問題:

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 
版權宣告:本文為博主原創文章,轉載請附上博文連結!