通过CDC口向上位机发数据发现一个问题(20250205)
以上代码已经调试通过了
具体过程: 下载程序后, 打开CDC助手, 向CDC助手发送数据, 随后CDC也就收到相应的数据, 没毛病
随后我添加以下语句, 目的是循环向CDC口发送数据, 1s一次
然后就出现了以下现象:
当关闭CDC口时, P2.1连接的指示灯不闪了;
当打开CDC口时, 程序运行正常;
我感觉是不是单片机向上位机发送数据, 只有有上位机接收了数据, 程序才继续运行, 如果没有上位机接收数据, 程序就不运行了.
这个现象正常吗?
请指教!!!
看看USB_SendData里是什么搞 的 USB_SendData函数调用之后,再调用一下usb_OUT_done()试试 Ayb_ice 发表于 2025-2-5 17:08
看看USB_SendData里是什么搞 的
你没有使能USb,调用USB_SendData可能导致死机,内部可能在判断某些标志,标志始终不能有效 你这种现象不正常
单片机向上位机发送的数据,是由上位机的驱动程序负责处理的
与是否打开CDC串口没关系
下面的附件代码功能,每1秒钟发送一个数据包到上位机
无论CDC串口是否打开,P6口的指示灯都正常闪烁
zhp 发表于 2025-2-6 09:30
你这种现象不正常
单片机向上位机发送的数据,是由上位机的驱动程序负责处理的
与是否打开CDC串口没关系
你这个程序我只是做了这一点修改, 应该不影响其它功能吧?
打开CDC串口后 P2.0口指示灯正常闪烁
关闭CDC串口后 P2.0口指示灯不再闪烁
你的程序, 官方下载软件, 我的电脑, 难道哪里有设置不对的地方?
没办法 我想把这这个帖子顶上来 求版主帮忙 zsb7739 发表于 2025-2-7 09:08
你这个程序我只是做了这一点修改, 应该不影响其它功能吧?
闪烁太快 ?肉眼观察不到闪烁 ?
1,用示波器观察;
2,用万用表观察平均值
神农鼎 发表于 2025-2-16 08:41
闪烁太快 ?肉眼观察不到闪烁 ?
1,用示波器观察;
2,用万用表观察平均值
...
闪烁频率1s, 根本用不到示波器, 肉眼可见 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