stm32 USB增加端點總結
stm32 USB增加端點總結(端點用法)
在原有的端點1和端點2基礎上增加一個雙向端點3.
由於EP3端點緩衝區只有512-32-64*7=32位元組大小,所以傳送長度不能大於32,否則多餘的資料會丟失
1. 修改usb_desc.c
1)將端點數目改為6
/************** Descriptor of Custom HID interface ****************/
/* 09 */
0x09, /* bLength: Interface Descriptor size */
USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */
0x00, /* bInterfaceNumber: Number of Interface */
0x00, /* bAlternateSetting: Alternate setting */
0x06, /* bNumEndpoints */
0xDC, /* bInterfaceClass: Class code = 0DCH */
0xA0, /* bInterfaceSubClass : Subclass code = 0A0H */
0xB0, /* nInterfaceProtocol : Protocol code = 0B0H */
0, /* iInterface: Index of string descriptor */
2)增加端點描述符
0x07, /* endpoint descriptor length = 07H */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* endpoint descriptor type = 05H */
0x83, /* endpoint 2 IN */
0x02, /* bulk transfer = 02H */
0x40,0x00, /* endpoint max packet size = 0040H */
0x0A, /* the value is invalid when bulk transfer */
0x07, /* endpoint descriptor length = 07H */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* endpoint descriptor type = 05H */
0x03, /* endpoint 2 OUT */
0x02, /* bulk transfer = 02H */
0x40,0x00, /* endpoint max packet size = 0040H */
0x0A, /* the value is invalid when bulk transfer */
2. 修改usb_prop.c
1)在void CustomHID_Reset(void)中初始化端點3
/* Initialize Endpoint 3 */
SetEPType(ENDP3, EP_BULK);
SetEPRxAddr(ENDP3, ENDP3_RXADDR);
SetEPTxAddr(ENDP3, ENDP3_TXADDR);
SetEPRxCount(ENDP3, EP_SIZE);
SetEPRxStatus(ENDP3, EP_RX_VALID);
SetEPTxStatus(ENDP3, EP_TX_NAK);
3. 修改usb_conf.h
1)將端點書改為4
#define EP_NUM (4)
2)修改端點緩衝地址
/* buffer table base address */
#define BTABLE_ADDRESS (0x00)
/* EP0 */
/* rx/tx buffer base address */
#define ENDP0_RXADDR (0x20) //4*8=0x20,參照有道筆記“STM32 USB端點修改”
#define ENDP0_TXADDR (0x60)
/* EP1 */
/* tx buffer base address */
//地址為32位對其,位4的倍數,不能超過 bMaxPacketSize
//EP1
#define ENDP1_RXADDR (0xa0) //每個緩衝區大小64
#define ENDP1_TXADDR (0xa0+64)
////EP2
#define ENDP2_RXADDR (0xa0+64+64)
#define ENDP2_TXADDR (0xa0+64+64+64)
////EP3
#define ENDP3_RXADDR (0xa0+64+64+64+64)
#define ENDP3_TXADDR (0xa0+64+64+64+64+64)
3)註釋回撥函式
//#define EP3_IN_Callback NOP_Process
//#define EP3_OUT_Callback NOP_Process
4. 修改usb_endp.c
1)在void EP3_OUT_Callback(void)中實現usb接收資料處理
2)void EP3_IN_Callback(void)可不用實現
5. 修改usbio.c
1)封裝上層接收與傳送介面
相關文章
- USB 端點與USB HUB的關係
- USB協議詳解第11講(USB描述符-總結)協議
- 「移動端」前端常見知識點總結前端
- STM32中斷相關知識總結
- STM32 外部中斷使用方法總結
- 總結PHP 7新增加的特性PHP
- USB裝置在端點4~7互動資料
- 後端知識點總結——NODE.JS(高階)後端Node.js
- 後端知識點總結——NODE.JS基礎後端Node.js
- 總結兩點
- 一點總結
- stm32筆記[16]-使用usb-cdc串列埠.md筆記串列埠
- 【web】springboot應用增加actuator管理端點WebSpring Boot
- 一點關於移動端頁面開發的總結
- 移動端bug總結
- 移動端總結(更新)
- Mustache要點總結
- HTML重點總結HTML
- 知識點總結
- 一點ASMM總結ASM
- 給ocr增加ocrmirror時遇到的問題總結
- Leetcode刷題之連結串列增加頭結點的字首節點LeetCode
- 移動端適配總結
- 胖客戶端程式總結客戶端
- 編譯器後端總結編譯後端
- HDFS知識點總結
- MongoDB知識點總結MongoDB
- Java 知識點總結Java
- 功能測試點總結
- django知識點總結Django
- jQuery 知識點總結jQuery
- MySQL知識點總結MySql
- HBase知識點總結
- Kafka知識點總結Kafka
- JavaScript知識點總結JavaScript
- TokuDB優缺點總結
- 感悟,七點心得總結
- Duplicate的一點總結