解釋如下:
#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令牌封包。對於 控...