CH32V307 的 CDC USB输出大于64字节的数据如何处理?

专家您好,我在使用USB 的CDC,由于是全速设备,所以只能发送64字节到端口,因此我要分多次发送出去,但是我在分多次发送出去的时候,出现了错误。请专家指导。如何发送长数据?

我的函数如下

这个函数 任然只能发送64字节以下,超过64字节发送失败,我看了下上传函数,大概是 第一次发送后时忙状态,后面几次就直接返回 错误,没有发出去。

于是 增加了 这一句 ,目的是等待忙状态结束后再发

while(USBFS_Endp_Busy[ 3] !=0);

结果还是在这句话后面直接死机了,这下不知道该如何处理长数据发送了。

      void usb_puts(char * buffer)
      {
        int len=strlen(buffer);
        int cnt=(len/64);
        int last_len=len%64;
        for(int i=0;i<=cnt;i++)
        {
            //while(USBFS_Endp_Busy[ 3] !=0);//加上这一句直接死机,
            USBFS_Endp_DataUp(3,&buffer[i*64],(i==cnt)?last_len:63 ,1);
        }
      }


您好,正常应该不会卡死在该地方,可以检查一下中断中是否有对该位清零,如下图。若方便,可将工程发我邮箱(lzs@wch.cn)具体看一下。

image.png



我知道原因了,这个函数在USB中断中执行,USB中断没法修改这个忙标记,结果卡死了,这个等待USB忙标记的函数只能在中断外执行,谢谢。


只有登录才能回复,可以选择微信账号登录