ch32f103c8t6双缓冲区从缓冲区取出来的数据不对

stm32f103c8t6的代码移植到ch32f103c8t6,stm32端点2是正常工作的

ch32尝试了,端点2和端点3读出来的数据不对

ch32先使能了USB_HP_CAN1_TX_IRQ,要不然触发不了USB_HP_CAN1_TX_IRQ

企业微信截图_16359021156068.png

USB 高优先级中断(通道 19):仅能由同步和双缓冲批量传输的正确传输事件触发,目的是保证最 大的传输速率

触发中断后进入,EP3_OUT_CALLBACK

企业微信截图_16359024294644.png

g_blaster_rx_req = TRUE

开始缓冲区拷贝数据

企业微信截图_16359025541660.png

到s_recv_buffer这个64字节数组,

拷贝出来的数据前几次是和stm32一样,后面就和stm32拷贝的数据出来的数据不一样了

下面这里是配置描述符,和设置端点的操作

/* USB配置描述符 */
/*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
const uint8_t Blaster_ConfigDescriptor[BLASTER_SIZ_CONFIG_DESC] = {
    /* Configuration Descriptor */
    /* 00 */
    0x09,         /* bLength: Configuration Descriptor size */
    USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
    BLASTER_SIZ_CONFIG_DESC,  /* wTotalLength: Bytes returned */
    0x00,
    0x01,         /* bNumInterfaces: 1 interface */
    0x01,         /* bConfigurationValue: Configuration value */
    0x00,         /* iConfiguration: Index of string descriptor describing the configuration*/
    0x80,         /* bmAttributes: Bus powered(bit6=0) */
    0xE1,         /* MaxPower 450mA(225*2) */

    /* Interface Descriptor */
    /* 09 */
    0x09,         /* bLength: Interface Descriptor size */
    USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */
    0x00,         /* bInterfaceNumber: Number of Interface */
    0x00,         /* bAlternateSetting: Alternate setting */
    EP_NUM - 1,   /* bNumEndpoints */
    0xFF,         /* bInterfaceClass: NA */
    0xFF,         /* bInterfaceSubClass : NA */
    0xFF,         /* nInterfaceProtocol : NA */
    0,            /* iInterface: Index of string descriptor */
    
    /* Endpoint Descriptor */
    /* 18 */
    0x07,          /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint descriptor */
    EP1_IN,        /* bEndpointAddress: Endpoint 1 IN */
    0x02,          /* bmAttributes: Bulk endpoint */
    ENDP1_TXSIZE,  /* wMaxPacketSize: 64 Bytes max */
    0x00,
    0x01,          /* bInterval: Polling Interval (1 ms) */
    /* 25 */
    0x07,          /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint descriptor */
    EP3_OUT,       /*bEndpointAddress:端点2输出这里修改为EP3*/ 
    0x02,          /*bmAttributes:批量端点*/
    ENDP2_RXSIZE,  /*wMaxPacketSize:最大64字节*/
    0x00,
    0x01,          /*bInterval:轮询间隔(1毫秒)*/
    /* 32 */
};

ENDP3端点设置操作

企业微信截图_1635902821451.png

端点缓冲区设置,这里我不确定有没有设置正确

企业微信截图_16359030352197.png

ENDP0,ENDP1是正常的能识别驱动

各位大佬帮忙看看到底啥问题啊

你好,理论上端点1跟端点2的操作流程是一样的啊,实现上存在区别的话那主要看一下配置,比如端点地址的配置等.


是缓冲区地址吗,还是就是端点地址


只有登录才能回复,可以选择微信账号登录