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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
好学的东东
1楼-- · 2019-07-15 17:57
你好楼主!我在这个帖子(http://www.stmcu.org/module/forum/thread-603430-1-1.html)看到你的问题。觉得和我现在遇到的问题有点相似。我现在是在校学生。目前做的项目是在stm32f405rgt6上做一个usb虚拟串口。我想请问您是怎么根据stm32_f105-07_f2_f4_usb-host-device_lib进行修改的……我是stm32的新手。。您介意给我看看您的代码吗?万分感谢!
magicme
2楼-- · 2019-07-15 19:45
帮顶~~~~~~~~~~ ~~~~~~

一周热门 更多>