找回密码
 立即注册
查看: 1469|回复: 10

使用USB-CDC库函数怎么读取一个字节?

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:322
  • 最近打卡:2025-04-28 22:28:11

3

主题

24

回帖

1589

积分

金牌会员

积分
1589
发表于 2023-11-17 10:55:40 | 显示全部楼层 |阅读模式
STC_USB_LIBRARY 提供的函数只能读取多个字节,没见到有读取1字节的方法



另外这个库都是封装成了lib,工具箱里提供的CDC例子里又不能实现不断电下载功能 @STCISP#
包括VID PID因为用了lib库 也没办法修改,这个lib库不能放出源码么?

能不能像新唐的51一样 有个 BSP包和例子,stc入门太难了。。。
没啥基础的情况下 新唐可以很快上手写东西,stc 折腾好久都不行

鱼和熊掌难兼得

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:322
  • 最近打卡:2025-04-28 22:28:11

3

主题

24

回帖

1589

积分

金牌会员

积分
1589
发表于 2023-11-17 11:01:21 | 显示全部楼层
用 avr 的片可以用 arduino,几乎不用啥基础都可以很容易的写东西。。。直接 Serial.read Serial.write
stc用的头疼。。。
gbx.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2023-11-17 11:06:33 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-11-17 11:25:28 | 显示全部楼层

不停电下载
IAP_CONTR = 0x60

截图202311171123003549.jpg
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2023-11-17 11:47:30 | 显示全部楼层
使用USB-CDC库函数,从USB给MCU发几个字节,就收到几个字节
如果你想一个字节一个字节读取,发送时一个字节一个字节发送就可以
  1.         if (bUsbOutReady)
  2.         {
  3.             USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  4.             
  5.             usb_OUT_done();
  6.         }
复制代码

if (bUsbOutReady) 判断条件里面就是收到数据,其中 OutNumber 是收到的字节数,UsbOutBuffer是接收数据存放的缓冲区。
如果 OutNumber = 1 只收到一个字节数据,就是UsbOutBuffer第一字节的内容。
使用USB CDC库进行通信已经是很简单的,几十行代码就能实现通信,不停电下载。

视频回放, 2023/7/3期, USB 零基础实战,CAN应用,STC32位8051实战宣讲会
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=2990
这期视频一步步介绍了USB CDC库的使用,包括数据通信,不停电下载演示。

如果你想自己修改配置的话也可以,实验箱例程包,开天斧/屠龙刀例程包,一箭双雕USB转双串口例程包,里面都有一个例子“CDC(Communication Device Class)协议范例”,是完全开源的。
修改配置需要对USB协议比较熟悉,论坛也有相应的教学视频可以观看:
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4526
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:322
  • 最近打卡:2025-04-28 22:28:11

3

主题

24

回帖

1589

积分

金牌会员

积分
1589
发表于 2023-11-17 13:54:55 | 显示全部楼层
乘风*** 发表于 2023-11-17 11:47
使用USB-CDC库函数,从USB给MCU发几个字节,就收到几个字节
如果你想一个字节一个字节读取,发送时一个字节 ...

电脑端是github开源的,我是基于avr闭源的功能,重写芯片代码
老外写的代码,发送是 A0 , A是命令 后面读到的是 地址,还会有 A200,如果是我自己写上位机肯定不这么搞
先读 A ,后面再读后续的,0 或者 其他值
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2023-11-17 14:28:05 | 显示全部楼层
happy*** 发表于 2023-11-17 13:54
电脑端是github开源的,我是基于avr闭源的功能,重写芯片代码
老外写的代码,发送是 A0 , A是命令 后面读 ...

如果对方是一串数据发送的,那么接收的也是一串数据。接收完再进行解码也是一样的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:322
  • 最近打卡:2025-04-28 22:28:11

3

主题

24

回帖

1589

积分

金牌会员

积分
1589
发表于 2023-11-21 14:47:44 | 显示全部楼层
可以,但很恶心。。。
就比如上位机要读取一个地址的数据发送3个字节 R 00 FF 的 hex数据 (R的hex表示读取,地址 0x00FF )
switch(接收的第一个字节)
    case 'R':
        读取第二个字节,左移8位 <<8 , 加上第三个字节
        
上面这个简单,还可以接受

举例 写数据发送65个字节 W000000.............. 正常情况是 读取一个字节 W ,后面读取64位的0
由于stc 只能收 64字节,所以第一包读取64,包含W和63个0,之后再读取一次1字节

没办法先读取1个字节,再读取64个字节(可以改程序,但是。。开源的程序大改后就要自己维护一套私有的代码)

用 lib库可以demo,或者基于现有收发规则开发上位机程序。对于已有上位机程序可能就需要各种大改造
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-05-01 19:17:52
已绑定手机

19

主题

208

回帖

492

积分

中级会员

积分
492
发表于 2024-7-14 13:58:09 | 显示全部楼层
是不是可以这样:  接收缓冲大一点,数据接收完成了,再对接收数据进行 检索处理呢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2024-7-14 15:13:54 | 显示全部楼层
机灵*** 发表于 2024-7-14 13:58
是不是可以这样:  接收缓冲大一点,数据接收完成了,再对接收数据进行 检索处理呢 ...

硬件缓冲区是64字节
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:32 , Processed in 0.125629 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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