找回密码
 立即注册
查看: 1463|回复: 4

有关STC的CDC串口问题请教

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:245
  • 最近打卡:2025-05-02 16:43:43

49

主题

129

回帖

1365

积分

金牌会员

积分
1365
发表于 2023-4-30 09:45:19 | 显示全部楼层 |阅读模式
使用STC的CDC串口时有几个问题不确定:
1. 当bUsbOutReady变量置位时表明接收到上位机发来的数据。当下位机处理完接收的数据,需要自己清零bUsbOutReady变量吧?
2. 上位机应当也是每一个8位数据向下发送。每发送完一个数据,都会置位bUsbOutReady吗?如果下位机没有及时处理接收缓冲区中的数据,OutNumber变量数值会累加吗,还是等待下位机处理完上次发送的数据?
3. 处理完接收缓冲区中的数据,只要OutNumber变量数值为0后,之后上位机发来的数据会自动从接收缓冲区0开始放置数据,并累加OutNumber变量数值。对吗?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-5-4 10:55:02 | 显示全部楼层
本帖最后由 zhp 于 2023-5-4 10:56 编辑

Q1. 当bUsbOutReady变量置位时表明接收到上位机发来的数据。当下位机处理完接收的数据,需要自己清零bUsbOutReady变量吧?
A1:数据处理完成后,调用usb_OUT_done函数就可以了,在usb_OUT_done函数里面有清零bUsbOutReady变量以及一些善后工作

Q2. 上位机应当也是每一个8位数据向下发送。每发送完一个数据,都会置位bUsbOutReady吗?如果下位机没有及时处理接收缓冲区中的数据,OutNumber变量数值会累加吗,还是等待下位机处理完上次发送的数据?
A2:上位机向下发送数据不是以字节为单位,而是以数据包为单位发送,每个数据包的数据量保存在OutNumber变量里面,硬件每接收到一包新的数据,bUsbOutReady就会被置位
       如果下位机没有及时处理接收缓冲区中的数据,OutNumber变量数值不会累加,而是会一直等待,直到用户调用usb_OUT_done就表示数据处理完成可以接收下一个数据包了
       在下位机没有处理完上一个包的数据前,上位机待发的数据也会一直保存在驱动程序开辟的缓冲区内,数据不会丢失

Q3. 处理完接收缓冲区中的数据,只要OutNumber变量数值为0后,之后上位机发来的数据会自动从接收缓冲区0开始放置数据,并累加OutNumber变量数值。对吗?
A3:对于用户下位机来说,OutNumber变量是只读,写0没有意义。硬件接收到数据后,也不会对OutNumber进行累加

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:245
  • 最近打卡:2025-05-02 16:43:43

49

主题

129

回帖

1365

积分

金牌会员

积分
1365
发表于 2023-5-4 20:17:16 | 显示全部楼层
谢谢回复!
还有一点不太确定。作为上位机,是将USB连接的STC下位机CDC串口看作一个RS-232串口吧?我们的上位机采用VB.NET或C#编程使用串口通讯控件。设置好波特率、数据位数、停止位、奇偶校验等参数外就打开串口。串口号从1开始发送联络数据。下位机有回应后就确定这个串口号。
上位机发送命令数据多数是几个字节,放在一个8位bytSendByte[]数组中,调用串口控件的SerialPort1.Write(bytSendByte, 0, 2)命令,参数是发送数组名和起始下标和发送数量。之前通过传统RS-232串口,下位机这边通过串口中断程序,一位一位接收数据。每一位数据都会引起串口中断。
既然上位机软件没有改变,上位机发送数据应该还是一位一位。不然传统串口怎么能够通过下位机每一位数据的中断接收数据呢?除非CDC串口对于上位机不是作为串口看待。
现在准备修改之前下位机的程序,USB接口下一位一位接收数据看结果如何?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-5-4 20:30:48 | 显示全部楼层
USB-CDC虚拟串口/就是串口,网友问:
问题1. 上位机使用C#或VB编程,使用其带有的串口通讯控件可以与采用USB-CDC虚拟串口通讯的STC32G收发数据吗?
===USB-CDC串口在PC端的使用和普通串口一模一样
===C#/VB的串口控件访问USB-CDC虚拟串口的方式和访问普通串口一样
===如果不使用STC32G的USB-CDC虚拟串口当BRIDGE/USB-CDC再转串口,则可以忽略波特率、数据位、停止位、奇偶校验等参数
问题2. C#或VB编程的串口控件如何设置波特率、数据位、停止位、奇偶校验等参数?
====USB-CDC虚拟串口,不用管:【波特率、奇偶校验】
问题3. STC32G的USB-CDC串口模式在STC8H系列上也完全相同吗?
====一样
4. 贵公司的 [屠龙刀/降龙棍 / 开天斧/打狗棒] 买回来就直接可以用吗?
====是
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-5-4 20:31:43 | 显示全部楼层
USB-CDC虚拟串口和传统串口相比有如下优点:
Ø  数据传输更快:   USB-CDC虚拟串口忽略传统串口的波特率,传输速度的比特率即为全速USB的通讯速度12MBPS(即每秒12M位)
Ø  使用更简单便捷:USB-CDC虚拟串口忽略传统串口的起始位、停止位等冗余信息
Ø  数据传输更可靠:USB-CDC虚拟串口丢弃传统串口简单的软件奇偶校验机制,USB-CDC虚拟串口数据传输时有USB硬件CRC校验,
                              以及校验出错重传机制,保证数据100%正确
Ø  自动缓存数据:   USB-CDC虚拟串口会自动缓存数据。单片机在没有处理完成上位机下传的上一笔数据时,如果此时上位机又有
                             新的数据下传,虚拟串口会自动将新的数据缓存,从而保证数据100%不会丢失或被覆盖。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 20:52 , Processed in 0.236882 second(s), 72 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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