stm32 USB增加端点总结
生活随笔
收集整理的這篇文章主要介紹了
stm32 USB增加端点总结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
stm32 USB增加端點總結(端點用法)
?
在原有的端點1和端點2基礎上增加一個雙向端點3.
由于EP3端點緩沖區(qū)只有512-32-64*7=32字節(jié)大小,所以發(fā)送長度不能大于32,否則多余的數(shù)據(jù)會丟失
?
1. 修改usb_desc.c
?1)將端點數(shù)目改為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的倍數(shù),不能超過 bMaxPacketSize//EP1#define ENDP1_RXADDR??????? (0xa0)? //每個緩沖區(qū)大小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)注釋回調函數(shù)
//#define? EP3_IN_Callback?? NOP_Process//#define? EP3_OUT_Callback?? NOP_Process?
4. 修改usb_endp.c
1)在void EP3_OUT_Callback(void)中實現(xiàn)usb接收數(shù)據(jù)處理
2)void EP3_IN_Callback(void)可不用實現(xiàn)
?
5. 修改usbio.c
1)封裝上層接收與發(fā)送接口
?
總結
以上是生活随笔為你收集整理的stm32 USB增加端点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: libusb:libusb_bulk_t
- 下一篇: 老三板开通条件 股票老三板的开通有什么条