zsb7739 发表于 2025-2-5 16:37:48

通过CDC口向上位机发数据发现一个问题(20250205)




以上代码已经调试通过了
具体过程: 下载程序后, 打开CDC助手, 向CDC助手发送数据, 随后CDC也就收到相应的数据, 没毛病


随后我添加以下语句, 目的是循环向CDC口发送数据, 1s一次


然后就出现了以下现象:
当关闭CDC口时, P2.1连接的指示灯不闪了;
当打开CDC口时, 程序运行正常;
我感觉是不是单片机向上位机发送数据, 只有有上位机接收了数据, 程序才继续运行, 如果没有上位机接收数据, 程序就不运行了.
这个现象正常吗?
请指教!!!

Ayb_ice 发表于 2025-2-5 17:08:39

看看USB_SendData里是什么搞 的

晓飛飛 发表于 2025-2-5 19:35:01

USB_SendData函数调用之后,再调用一下usb_OUT_done()试试

Ayb_ice 发表于 2025-2-6 08:50:13

Ayb_ice 发表于 2025-2-5 17:08
看看USB_SendData里是什么搞 的

你没有使能USb,调用USB_SendData可能导致死机,内部可能在判断某些标志,标志始终不能有效

zhp 发表于 2025-2-6 09:30:07

你这种现象不正常
单片机向上位机发送的数据,是由上位机的驱动程序负责处理的
与是否打开CDC串口没关系

下面的附件代码功能,每1秒钟发送一个数据包到上位机
无论CDC串口是否打开,P6口的指示灯都正常闪烁

zsb7739 发表于 2025-2-7 09:08:31

zhp 发表于 2025-2-6 09:30
你这种现象不正常
单片机向上位机发送的数据,是由上位机的驱动程序负责处理的
与是否打开CDC串口没关系



你这个程序我只是做了这一点修改, 应该不影响其它功能吧?


打开CDC串口后 P2.0口指示灯正常闪烁
关闭CDC串口后 P2.0口指示灯不再闪烁

你的程序, 官方下载软件, 我的电脑, 难道哪里有设置不对的地方?

zsb7739 发表于 2025-2-15 20:46:11

没办法 我想把这这个帖子顶上来 求版主帮忙

神农鼎 发表于 2025-2-16 08:41:27

zsb7739 发表于 2025-2-7 09:08
你这个程序我只是做了这一点修改, 应该不影响其它功能吧?



闪烁太快 ?肉眼观察不到闪烁 ?
1,用示波器观察;
2,用万用表观察平均值

zsb7739 发表于 2025-2-16 08:56:38

神农鼎 发表于 2025-2-16 08:41
闪烁太快 ?肉眼观察不到闪烁 ?
1,用示波器观察;
2,用万用表观察平均值


...
闪烁频率1s, 根本用不到示波器, 肉眼可见

王昱顺 发表于 2025-2-17 10:33:26

zsb7739 发表于 2025-2-7 09:08
你这个程序我只是做了这一点修改, 应该不影响其它功能吧?



上午好,已经测试通过了,原因是没有在发送前判断是否发送忙
这个是测试通过的程序:



以下是更改的过的程序片段

while (1)
{
    if (f1ms)
    {
      f1ms = 0;
      if (cnt++ >= 1000)
      {
            cnt = 0;
            buf++;
            if (buf > '9')
                buf = '0';
          if (bUsbInBusy == 0)
                USB_SendData(buf, 4); // 每1s向上位机发送一个数据包
            P20 = ~P20;               // I/O口闪烁指示
      }
    }
}
bUsbInBusy 的意思是以USB主机看,向主机方向的数据(input)的忙标志位
在发送忙的时候就不要继续发送了,这样会导致发送一直等待,进而导致程序卡在这个地方
页: [1] 2
查看完整版本: 通过CDC口向上位机发数据发现一个问题(20250205)