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
一周热门 更多>