找回密码
 立即注册
查看: 1516|回复: 15

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

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-12-10 08:44:59

10

主题

24

回帖

207

积分

中级会员

积分
207
发表于 2025-2-5 16:37:48 | 显示全部楼层 |阅读模式

截图202502051628483026.jpg

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


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

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:187
  • 最近打卡:2025-12-12 08:26:06
已绑定手机

19

主题

537

回帖

1903

积分

金牌会员

积分
1903
发表于 2025-2-5 17:08:39 | 显示全部楼层
看看USB_SendData里是什么搞 的

点评

封装的, 看不到  发表于 2025-2-5 18:24
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:617
  • 最近打卡:2025-12-14 00:26:50
已绑定手机

42

主题

2570

回帖

2656

积分

荣誉版主

积分
2656
发表于 2025-2-5 19:35:01 | 显示全部楼层
USB_SendData函数调用之后,再调用一下usb_OUT_done()试试

点评

试了 没什么改善  发表于 2025-2-5 21:01
睁开眼睛做场梦~~~
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:187
  • 最近打卡:2025-12-12 08:26:06
已绑定手机

19

主题

537

回帖

1903

积分

金牌会员

积分
1903
发表于 2025-2-6 08:50:13 | 显示全部楼层
Ayb_*** 发表于 2025-2-5 17:08
看看USB_SendData里是什么搞 的

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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:108
  • 最近打卡:2025-12-07 20:01:54

30

主题

1214

回帖

4615

积分

超级版主

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

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

stc8h_cdc_demo.zip

62.44 KB, 下载次数: 121

点评

亲测 你这个程序也是这样  发表于 2025-2-7 09:02
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-12-10 08:44:59

10

主题

24

回帖

207

积分

中级会员

积分
207
发表于 2025-2-7 09:08:31 | 显示全部楼层
zh*** 发表于 2025-2-6 09:30
你这种现象不正常
单片机向上位机发送的数据,是由上位机的驱动程序负责处理的
与是否打开CDC串口没关系

截图202502070903125889.jpg

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

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


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

点评

上午好,已经测试通过了,原因是没有在发送前判断是否发送忙 这个是测试通过的程序: 以下是更改的过的程序片段 while (1) { if (f1ms) { f1ms = 0; if (cnt++ >= 1000) {  详情 回复 发表于 2025-2-17 10:33
闪烁太快 ?肉眼观察不到闪烁,用示波器观察  详情 回复 发表于 2025-2-16 08:41
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-12-10 08:44:59

10

主题

24

回帖

207

积分

中级会员

积分
207
发表于 2025-2-15 20:46:11 | 显示全部楼层
没办法 我想把这这个帖子顶上来 求版主帮忙
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:264
  • 最近打卡:2025-12-14 08:48:12

811

主题

1万

回帖

2万

积分

管理员

积分
21207
发表于 2025-2-16 08:41:27 | 显示全部楼层
zsb7*** 发表于 2025-2-7 09:08
你这个程序我只是做了这一点修改, 应该不影响其它功能吧?

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

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-12-10 08:44:59

10

主题

24

回帖

207

积分

中级会员

积分
207
发表于 2025-2-16 08:56:38 | 显示全部楼层
神*** 发表于 2025-2-16 08:41
闪烁太快 ?肉眼观察不到闪烁 ?
1,用示波器观察;
2,用万用表观察平均值

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

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:640
  • 最近打卡:2025-12-13 14:46:56
已绑定手机
已实名认证

123

主题

3277

回帖

8312

积分

版主

积分
8312
发表于 2025-2-17 10:33:26 | 显示全部楼层
zsb7*** 发表于 2025-2-7 09:08
你这个程序我只是做了这一点修改, 应该不影响其它功能吧?

上午好,已经测试通过了,原因是没有在发送前判断是否发送忙
这个是测试通过的程序:
stc8h_cdc_demo(增加忙等待).zip (69.65 KB, 下载次数: 117)


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

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

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-12-14 12:19 , Processed in 0.128807 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表