日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]以下資料由網(wǎng)上收集usb的傳輸字節(jié)問題(來自computer00)STM32的USB端點緩沖不是固定的,由寄存器設置。而我的程序中,是如下定義的,端點大小為0x40,端點2做為輸出端點,0xD8+0x40=0x118,也就是說,端點1緩沖前2

以下資料由網(wǎng)上收集
usb的傳輸字節(jié)問題(來自computer00)
STM32的USB端點緩沖不是固定的,由寄存器設置。
而我的程序中,是如下定義的,端點大小為0x40,端點2做為輸出端點,
0xD8+0x40=0x118,也就是說,端點1緩沖前24個字節(jié)重疊,被輸出數(shù)據(jù)覆蓋了。
/* EP1 */
/* tx buffer base address */
#define ENDP1_TXADDR (0x100)
/* EP2 */
/* Rx buffer base address */
#define ENDP2_RXADDR (0xD8)

將端點1的發(fā)送地址設置為0x98即可解決此問題。
/* EP1 */
/* tx buffer base address */
#define ENDP1_TXADDR (0x98)


至于端點1,的確也是可以做為輸出的,程序做如下修改:
端點2接收地址改成端點1接收:
/* EP1 */
/* Rx buffer base address */
#define ENDP1_RXADDR (0xD8)

然后在端點描述符中,將原來的端點輸出2,改為端點輸出1:
0x01, /*bEndpointAddress: Endpoint Address (OUT endp 1)*/

原來的端點2初始化改為初始化端點1:
/* Initialize Endpoint 1 */
// SetEPType(ENDP1, EP_INTERRUPT);
SetEPRxAddr(ENDP1, ENDP1_RXADDR);
SetEPRxCount(ENDP1, 64);
// SetEPTxStatus(ENDP1, EP_TX_DIS);
SetEPRxStatus(ENDP1, EP_RX_VALID);

將原來的端點2回調(diào)函數(shù)改成端點1回調(diào):
/*******************************************************************************
* Function Name : EP1_OUT_Callback.
* Description : EP1 OUT Callback Routine.
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void EP1_OUT_Callback(void)
{
u8 DataLen;
DataLen = GetEPRxCount(ENDP1);
PMAToUserBufferCopy(OutBuffer, ENDP1_RXADDR, DataLen);
SetEPRxValid(ENDP1);
}

頭文件usb_conf.h中修改:
//#define EP1_OUT_Callback NOP_Process
void EP1_OUT_Callback(void);
#define EP2_OUT_Callback NOP_Process

然后重新編譯之,就可以用端點1啦。


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉