stm32f405调用DCD_EP_Tx数据还未发送完成被新数据覆盖

2019-07-14 15:30发布

Hi 各位大神,
项目上使用 STM32F405的芯片,并且通过虚拟串口, VCP与主机进行通讯。
开发上,直接基于stm32_f105-07_f2_f4_usb-host-device_lib进行修改。
ARM向主机发送数据的时候,直接调用的了DCD_EP_Tx。由于数据量比较大,经常发生上次数据还未发送完成,就被新数据覆盖的问题。

不知使用DCD_EP_Tx时候,有没有什么条件可以判断是否可以调用DCD_EP_Tx,以保证这次数据不会覆盖上次数据。

目前我的实现方式,但是不能满足要求。
void USB_send_packet(uint8_t * buf, uint16_t len)

{   
       int i = 0;
       while(DCD_GetTxFifoStatus(&USB_OTG_dev, CDC_IN_EP & 0x7F) < 128); // 判断EP1 剩余的FIFO长度大于512 byte
       while(g_tx_completed == 0); // EP1 TX FIFO EMPTY中断里面 设置为1

       __disable_irq;
       g_tx_completed = 0;
       __enable_irq;

        memset(ep_in_buf, 0, sizeof(ep_in_buf)); // ep_in_buf为长度固定为512的一个全局数组
        memcpy(ep_in_buf, buf, len);
        DCD_EP_Tx(&USB_OTG_dev, CDC_IN_EP, ep_in_buf, len); // len 固定为 512
}

非常感谢,
/Jaret
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。