gd32e103 usb库的不足

在GD32E103微控制器上使用虚拟串口(cdc_acm)时,遇到发送数据被回显的问题。原因在于发送和接收共用同一数据缓冲区。通过在`usb_cdc_handler`结构体中添加独立的发送缓冲区`tx_arr`解决了该问题,避免了数据冲突。此更改确保了发送和接收操作的正确隔离,从而修复了异常行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值