找回密码
 立即注册
查看: 762|回复: 5

【求助】STC8H8K64U USB CDC 怎么读64字节以上的数据?实现了128 但应该有更好的方法

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

3

主题

24

回帖

1589

积分

金牌会员

积分
1589
发表于 2023-7-19 16:20:52 | 显示全部楼层 |阅读模式
本帖最后由 happysoul 于 2023-7-20 17:52 编辑

看代码库里 UsbOutBuffer 的长度是 64,也就是说缓存只能读取 64
如果用库,只能拼2份读取方式,放到数组中

STC8H8K64U 64pin


问题:
1. 感觉这么写有点奇怪... 虽然能用,但 有没有更好的方法能读取 128字节、256字节?
2. 现在用的波特率是 115200,最高如果稳定的话能用到多少?
3. IRC 频率能用到多少?现在 USB-CDC 40MHz,选更高的时候 usb 就不认了

readBuffer64() 读取 64 字节

readBuffer128()  读取 128 字节




// 使用的库是 STC_USB_LIBRARY_DEMO-20230630 / STC_CDC_QUERY_LIBRARY / stc8h_cdc_xdata_query_demo

【求助】STC8H8K64U USB CDC 怎么读取64字节以上的数据?实现了128 但感觉应该有更好-1.png

代码粘贴后就变样了。。。看上面图片



  1. u8 pageBuffer[256];
  2. // 发送指定长度消息给上位机
  3. void usb_send(char cs[],int length)
  4. {
  5.   USB_SendData(cs,length);
  6.   usb_OUT_done();
  7. }
  8. //读取64字节
  9. void readBuffer()
  10. {
  11.     uint8_t i;
  12.     while(1){
  13.       if (bUsbOutReady){
  14.               if(OutNumber>0){
  15.                 for(i=0;i<OutNumber;i++){
  16.                   pageBuffer[i]=UsbOutBuffer[i];
  17.                   }
  18.                   usb_OUT_done();
  19.                   return;
  20.               }
  21.           }
  22.     }
  23. }
  24. // 读取 128 读取 2 次 64
  25. void readBuffer128()
  26. {
  27.     uint8_t i;
  28.     while(1){
  29.       if (bUsbOutReady){
  30.               if(OutNumber>0){
  31.                 for(i=0;i<OutNumber;i++){
  32.                   pageBuffer[i]=UsbOutBuffer[i];
  33.                   }
  34.                   //usb_OUT_done();
  35.                   // 通知上位机读取64字节完成
  36.                   usb_send("ok\r\n",4);
  37.                   break;
  38.               }
  39.           }
  40.     }
  41.     while(1){
  42.       if (bUsbOutReady){
  43.               if(OutNumber>0){
  44.                 for(i=0;i<OutNumber;i++){
  45.                   pageBuffer[i+64]=UsbOutBuffer[i];
  46.                   }
  47.                   usb_OUT_done();
  48.                   break;
  49.               }
  50.           }
  51.     }
  52. }
复制代码





回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:506
  • 最近打卡:2025-05-02 11:04:56

15

主题

154

回帖

408

积分

中级会员

积分
408
发表于 2023-7-20 16:43:58 | 显示全部楼层
本帖最后由 wpppmlah 于 2023-7-20 16:45 编辑
  1. for (i = 0; i < OutNumber; i++) {
  2.                     pageBuffer[i + 64] = UsbOutBuffer;//这样也可以吗??不是应该: pageBuffer[i + 64] = UsbOutBuffer[i];吗????
  3.                 }
复制代码

回复 支持 反对

使用道具 举报 送花

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

3

主题

24

回帖

1589

积分

金牌会员

积分
1589
发表于 2023-7-20 17:37:23 | 显示全部楼层

改了。。。不用代码方式引进来 【i】 就会被认成 斜线字体。。。真坑
用代码方式引入又会导致格式错乱,用文本编辑器整理了一次才显示正常。。。。

有没有更好的写法? 总觉得现在写的方式太奇葩了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:45
  • 最近打卡:2025-04-28 09:23:48

3

主题

43

回帖

493

积分

中级会员

积分
493
发表于 2023-7-27 16:18:14 | 显示全部楼层
用循环队列?
回复 支持 反对

使用道具 举报 送花

11

主题

340

回帖

929

积分

荣誉版主

积分
929
发表于 2023-8-2 17:40:32 | 显示全部楼层
本帖最后由 熊仔 于 2023-8-2 17:41 编辑

试一下我发的帖子的代码,可以增加缓冲区
https://www.stcaimcu.com/forum.p ... &extra=page%3D2

回复 支持 反对

使用道具 举报 送花

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

3

主题

24

回帖

1589

积分

金牌会员

积分
1589
发表于 2023-8-3 10:02:33 | 显示全部楼层
熊*** 发表于 2023-8-2 17:40
试一下我发的帖子的代码,可以增加缓冲区
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=3462&ex ...

收到 谢谢了
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 20:47 , Processed in 0.196807 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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