STM32F4xx USB開發的一些坑!

2021-10-06 09:00:49 字數 1100 閱讀 8909

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() 申請記憶體是失敗,導致資料無法接收。

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

另附:除錯usb裝置用到的軟體名稱:

bushound:可檢視usb裝置節點,可進行usb的通訊測試,監控usb收發資料。

usbtreeview:可檢視usb裝置節點,可檢視usb節點的具體資訊,如描述,路徑,id等。

ni-visa:可生成usb驅動檔案。

附:usb的上位機軟體和stm32的程式原始碼

usb通訊的上位機軟體(vs2010/mfc)

usb的stm32程式原始碼

20210810 更新:

stm32的usb驅動,包括其他的串列埠、定時器、adc、時鐘等,直接使用stm32cubemx生成,這個軟體比較好用,學個半天一天就會了,極大地提高開發效率。

stm32f4 開發相關記錄

inc資料夾裡放的是標頭檔案,一共六個,以後我們自己的標頭檔案也可以放到這裡來。stm32f4xx.h 包含了stm32f4的暫存器結構體的定義 類似於c51的reg52.h core cm4.h 核心功能的定義,比如nvic相關暫存器的結構體 core cminstr.h 包含一些核心核心專用指令...

STM32F4與STM32F1的區別

作為cortex m3市場的最大佔有者,st公司在2011年又推出基於cortex m4核心的stm32f4系列產品,相對與stm32f1 f2等cortex m3產品,stm32f4最大的優勢,就是新增了硬體fpu單元以及dsp指令,同時,stm32f4的主頻也提高了很多,達到168mhz 可獲得...

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...