康辉55AA 发表于 2024-11-25 17:29:14

请问:USB-CDC可以由下位机主动向上位机发信息吗:

我发现示例代码中:

查询模式下:

while (1)
    {
      if (bUsbOutReady)
      {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            
            usb_OUT_done();
      }
    }


这个bUsbOutReady要为真才能发信息。

在中断模式下,也要先收到数据才能向上位机应答。

现在我想在下位机复位后,主动向上位机报告下位机的当前状态,不知道怎么设置代码,请求帮助!

Lkck8210 发表于 2024-11-25 17:58:44

主动向上位机报告下位机的当前状态
OutNumber = sprintf(UsbOutBuffer,"Hello World");
USB_SendData(UsbOutBuffer,OutNumber);            
usb_OUT_done();
while(1)
{
//your code
}

DebugLab 发表于 2024-11-25 17:59:14

USB协议不支持
所有的传输必须是主机发起
从机只能改变总线状态用于唤醒休眠的主机
唤醒只是改变总线状态而没有数据传输阶段

DebugLab 发表于 2024-11-25 18:01:38

下位机复位后也是通过改变总线状态通知上位机有设备接入

jwd 发表于 2024-11-25 20:28:01

下位机是被动的,不能主动发起信息

晓飛飛 发表于 2024-11-25 21:15:05

单片机上电后,计算机操作系统检测到端口变化发起枚举过程,只有枚举成功后,上位机才能打开端口进行通信,我估计上位机从检测到设备到打开端口的过程会比单片机初始化慢得多,何不使用上位机主动查询?

小坤 发表于 2024-11-25 22:03:20

USB HOST 现在STC应该还不支持

康辉55AA 发表于 2024-11-26 11:43:52

弄了一上午,也没有成功,lkck***先生的代码我也试了,编译不通过,我不知道sprintf()这个涵数在哪里。
谢谢各位解答。

Lkck8210 发表于 2024-11-26 14:02:15

康辉55AA 发表于 2024-11-26 11:43
弄了一上午,也没有成功,lkck***先生的代码我也试了,编译不通过,我不知道sprintf()这个涵数在哪里。
谢 ...

对不起,给错了资讯{:mad:}

康辉55AA 发表于 2024-11-27 17:00:56

再次通过模索,在STC公司提供的一箭双雕上面,采用USB-CDC示例代码查询方式,进行简单修改,实现了“采用USB-CDC的方式,使下位机复位后主动向上位机报告当前状态”的功能。

页: [1] 2
查看完整版本: 请问:USB-CDC可以由下位机主动向上位机发信息吗: