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

有关STC的CDC串口问题请教

[复制链接]
  • TA的每日心情
    开心
    昨天 15:03
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    35

    主题

    87

    回帖

    765

    积分

    高级会员

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

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-11 09:06
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2578

    积分

    超级版主

    积分
    2578
    发表于 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进行累加

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 15:03
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    35

    主题

    87

    回帖

    765

    积分

    高级会员

    积分
    765
     楼主| 发表于 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接口下一位一位接收数据看结果如何?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9528

    回帖

    1万

    积分

    管理员

    积分
    14102
    发表于 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. 贵公司的 [屠龙刀/降龙棍 / 开天斧/打狗棒] 买回来就直接可以用吗?
    ====是
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    552

    主题

    9528

    回帖

    1万

    积分

    管理员

    积分
    14102
    发表于 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, 2024-5-19 20:52 , Processed in 0.059326 second(s), 44 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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