STM32關於USB控制端點4的問題

2021-08-19 06:03:43 字數 1205 閱讀 1341

解釋如下:

#define btable_address      (0x00)  //說明端點描述符表從0x00開始

每個端點描述符會占用4個uint32_t型,即16個位元組

如果使用到端點4,需要將

#define endp0_rxaddr        (0x18)

#define endp0_txaddr        (0x58)

改為#define endp0_rxaddr        (0x50)  端點0-4  占用16*5=80個位元組

#define endp0_txaddr        (0x90)  端點0緩衝區占用位元組device_property.maxpacketsize=0x40;

以下端點分配需從 endp0_txaddr + 0x40開始

ep1_rxbuf 等的大小根據需要自行定義,不貼出了。

#define         endp1_txaddr                ((uint16_t)(0xd0))

#define         endp1_rxaddr                ((uint16_t)((endp1_txaddr+ep1_txbuf+1)/2*2)) //按字對齊

#define         endp2_txaddr                ((uint16_t)((endp1_rxaddr+ep1_rxbuf+1)/2*2)) 

#define         endp2_rxaddr                ((uint16_t)((endp2_txaddr+ep2_txbuf+1)/2*2))

#define         endp3_txaddr                ((uint16_t)((endp2_rxaddr+ep2_rxbuf+1)/2*2))

#define         endp3_rxaddr                ((uint16_t)((endp3_txaddr+ep3_txbuf+1)/2*2))

#define         endp4_txaddr                ((uint16_t)((endp3_rxaddr+ep3_rxbuf+1)/2*2)) 

#define         endp4_rxaddr                ((uint16_t)((endp4_txaddr+ep4_txbuf+1)/2*2))

from:

stm32控制電機

使用埠gpioa來連線電機,所以給gpioa程式設計就可以控制電機。使用系統時鐘systick來週期性的給電機傳送脈衝。用四個按鈕來控制需要傳送脈衝的個數,每個按鈕被按下就設定給電機傳送脈衝的個數,如果上一次給電機傳送的脈衝沒有傳送完成,這次按鈕傳送的脈衝將不被響應。由於需要控制兩個電機,所以將gp...

USB裝置開發之STM32

根據專案的開發進度要求,接下來的主要階段是開發usb裝置和上位機pc的通訊。主要包括 usb硬體開發 驅動開發和軟體開發。1 硬體開發 由於時間緊迫,電子組的硬體還未完成,所以這部分先用手頭上的stm32的usb來除錯驅動程式和上位機應用程式。這部分主要完成韌體程式的編寫。2 驅動程式開發 usb藉...

STM32的USB初認知

尤其注意的是stm32的usb一次傳輸最高的位元組資料為64位元組 usb的通訊協議 尤其注意的是 狀態階段 用來表示整個傳輸的過程已完全結束。狀態階段傳輸的方向必須與資料階段的方向相反,即原來是in令牌封包,這個階段應為out令牌封包 反之,原來是out令牌封包,這個階段應為in令牌封包。對於 控...