在使用gd32e103 usbd_cdc_acm(虚拟串口)时,发现调用cdc_acm_data_receive和cdc_acm_data_send时,cdc_acm_data_send经常回复cdc_acm_data_receive接收到的数据,查看了cdc_acm_core.h头文件,可以发现数据结构usb_cdc_handler只有一个数据缓冲区,也就是说接收和发送共用一个数据缓冲区,如果是这样,在发送之前memset应该也是可以解决发什么回什么的,但程序运行的时候,还是会出现发什么回什么,解决这个问题,也很简单,在usb_cdc_handler中再添加一个数据缓冲区即可。
#define USB_CDC_RX_LEN 64
typedef struct {
uint8_t packet_sent;
uint8_t packet_receive;
uint8_t data[USB_CDC_RX_LEN];
uint8_t cmd[USB_CDC_CMD_PACKET_SIZE];
uint8_t tx_arr[USB_CDC_RX_LEN]; // user added
uint32_t receive_length;
acm_line line_coding;
} usb_cdc_handler;
|