打印
[USB接口]

stm usb 数据流控

[复制链接]
1520|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一碗卤面|  楼主 | 2016-6-7 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我把USB配置成打印类,从主机接收数据,目前想实现数据流控:
1、系统从USB接口接收数据,存入到用户缓冲区,等待用户处理
2、当用户缓冲区满时,USB接口停止接收数据
3、当系统处理完用户数据时,即用户缓冲区空时,USB接口恢复接收数据

我的处理方法如下:

void EP1_OUT_Callback(void)
{
        uint8_t Receive_Buffer[64];
        uint8_t count_out;
        uint8_t i;
        count_out = GetEPRxCount(ENDP1);
        PMAToUserBufferCopy(Receive_Buffer, ENDP1_RXADDR,count_out);
        /* 数据转移到用户缓冲区 */
        for(i = 0; i < count_out ;i++)
        {
                usebuffer[index++] = Receive_Buffer[i];
  }
        if(index > 1024)
        {
                /* 用户缓冲区满 */
                SetEPRxStatus(ENDP1, EP_RX_VALID);
        }
        else
        {
                SetEPRxStatus(ENDP1, EP_RX_DIS);
        }
}

int main()
{
        ....
        for(;;)
       {
            getdata();        /* 从useBuffer中读取数据,index-- ,并处理数据 */
            if(index < 128)
            {
                SetEPRxStatus(ENDP1, EP_RX_VALID);
            }
        }       
        ....
}


系统跑起来后,接收一段数据后,就无法继续接收数据了,

哪位大侠帮忙看看?

相关帖子

沙发
一碗卤面|  楼主 | 2016-6-16 09:38 | 只看该作者
谢谢回复,已搞定

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝