找回密码
 立即注册
楼主: zhp

8H8K64U超级简单的USB-CDC虚拟串口应用及不停电下载(中断模式+查询模式)

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2025-05-06 15:23:14

19

主题

386

回帖

2522

积分

版主

积分
2522
QQ
发表于 2023-3-28 15:56:02 | 显示全部楼层
晓*** 发表于 2023-3-28 14:21
想把一箭双雕开源代码移植到32G上,除了换头文件为32g,其他不知该修改哪些?我换过去试过了不行,是不是des ...

可以参考下STC32G数据手册5.5章节

1.png
QQ:1463035472,微信:19952583954
  • 打卡等级:以坛为家II
  • 打卡总天数:418
  • 最近打卡:2025-05-09 08:54:03
已绑定手机

39

主题

2015

回帖

6877

积分

论坛元老

积分
6877
发表于 2023-3-28 20:01:51 | 显示全部楼层
perseverance51 发表于 2023-3-17 23:00
实测STC8和STC32G很不稳定,时不时端口号消失,如果很稳定为什么不把这么一个重要的功能放到库函数例程里 ...

有没有添加到库函数例程里,不是衡量一个功能是否稳定的标准。库函数例程是为了方便用户配置芯片模块功能而封装了配置函数。
USB模块功能比较复杂不容易封装,所以我们提供了两种版本:一种是完全开源的例程给资深用户和企业客户,方便他们进行修改配置表,添加功能。另一种是将USB模块封装成库文件,按照固定的方法调用就能轻松实现USB通信,方便初学者以及不是很熟悉USB结构的用户能够简便的使用USB通信。
USB/CDC功能已经发布了一段时间了,也送出了大量的开天斧,屠龙刀实验板,配套的例程基本上都用到了USB/CDC功能,是否稳定大家心里也有公论。
时不时端口号消失的话建议检查一下线路是否稳定,线材质量是否可靠,以及板子的耗电是否超出USB接口的承受能力。
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-07-05 16:23:47

3

主题

51

回帖

487

积分

中级会员

积分
487
发表于 2023-3-28 23:42:25 | 显示全部楼层
不好意思,开源程序移植到32G上没有问题,只是需要仔细核对每一个寄存器的操作,特别是32G可以位寻址可以直接进行位操作,做一遍核对以后windows也就能识别了,一番周折终于走通了,最大的收获不在这个双雕,而在于对USB的认识加深了理解
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:64
  • 最近打卡:2025-05-11 08:31:52

719

主题

1万

回帖

1万

积分

管理员

积分
15683
发表于 2023-3-29 08:54:43 | 显示全部楼层
恭喜,我看了都不敢回的USB, 晓奇兄 举重若轻 搞定了 !

晓奇兄,20年的老兄弟,下面您谁便选,就这些家当了,全部 【免费 + 包邮】 送您

1,芯片:1T 8051, 32位8051,各种封装的芯片
2,核心功能实验板:
     屠龙刀-STC32G12K128核心功能实验板,MCU自带硬件USB下载, 支持SWD硬件仿真
     开天斧-STC8H8K64U核心功能实验板,MCU自带硬件USB仿真,MCU自带硬件USB下载
3,  STC-USB Link1D /【专业仿真器,全自动在线下载器/自动停电上电,脱机烧录器,USB转双串口工具】

加STC华南区客服刘经理QQ: 3398500488 ;微信:18106296592  要求 【免费+包邮】 送
加STC华南区客服曹经理QQ:1933892258 ;微信:18106296595 要求 【免费+包邮】 送
加STC华东区客服聂经理QQ:2593903262;微信:18106296598  要求 【免费+包邮】 送
加STC西北区客服孙经理QQ: 1347154513 ;微信:18106296593  要求 【免费+包邮】 送
加STC华北区客服石经理QQ: 1638975601 ;微信:19952583876  要求 【免费+包邮】 送
加STC华中区客服唐经理QQ:2571301708 ;微信:18106296589 要求 【免费+包邮】 送
加STC东北区客服张经理QQ:3141888640 ;微信:19952583265   要求 【免费+包邮】 送
工作时间:  8:30-12:00  13:00-17:30(周一 到 周五, 法定节假日除外)


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-07-05 16:23:47

3

主题

51

回帖

487

积分

中级会员

积分
487
发表于 2023-3-29 11:07:24 | 显示全部楼层
神*** 发表于 2023-3-29 08:54
恭喜,我看了都不敢回的USB, 晓奇兄 举重若轻 搞定了 !

晓奇兄,20年的老兄弟,下面您谁便选,就这些家当 ...

谢谢神农鼎老兄,我这是没事干,被STC的技术吸引了,很多东西需要学习啊,客服已经与我联系了。非常感谢!学习中还会遇到很多问题,别嫌我事儿多就好,真诚为国产芯片崛起而感到自豪!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-07-05 16:23:47

3

主题

51

回帖

487

积分

中级会员

积分
487
发表于 2023-3-30 11:41:16 | 显示全部楼层
本帖最后由 晓奇 于 2023-3-30 12:40 编辑

总结一下,我把修改部分整理出来给需要的同学参考,对转换其他代码有点用

为了稳妥起见把原工程文件复制一个出来修改一下新的目录名,建议简短、英文加数字、别用符号
下面开始修改:(我习惯用UEDIT来做)
1.找到并复制一个stc32g.h进来
2.在文件stc.h里面用stc32g.h替换stc8h.h
3.在文件uart.h里面把xdata改为edata,不改也行,在宏定义函数BR(n)里面的65536前添加(DWORD)否则251系统会报错
4.打开uart.c修改里面的EUASB的用法,因为在8h里只是一个宏定义常数数据,而在32g里面他是sbit定义的可位寻址的位变量
  a.把IE2 &= ~EUSB替换为EUSB=0,把IE2 |= EUSB替换为EUSB=1.
  b.xdata -> edata
  c.Count7F全部删掉,没有用,估计原作者本来想用的,后来忘了又另外重新定义了一个IspCount7F;
  d.AUXR |= T1x12; 也是宏定义与sbit的不同,改为T1x12 = 1;//1T模式
    AUXR |= T2x12;  -> T2x12 = 1;  AUXR |= T2R; -> T2R = 1;   IE2 |= ES2; -> ES2 = 1;
    if(S2CON & S2TI) -> if( S2TI )    S2CON &= ~S2TI; -> S2TI =0;
    if (S2CON & S2RI) -> if ( S2RI )  S2CON &= ~S2RI; -> S2RI =0;
  e.S2CON &= ~S2TB8; -> S2TB8 = 0;
    把      if (!P)
            {
                S2CON |= S2TB8;
            }
            else
            {
                S2CON &= ~S2TB8;
            }
    直接换成一句
            S2TB8 = !P;
    同样:  if (P)
            {
                S2CON |= S2TB8;
            }
            else
            {
                S2CON &= ~S2TB8;
            }
    直接换成一句
            S2TB8 = P;
    S2CON |= S2TB8; -> S2TB8 = 1;
  uart.c完成,保存一下
5.打开 usb.c在usb_init()里面有一句 IE2 |= EUSB; 把他改成 EUSB = 1; 完成,保存

6.打开main.c,端口设置都在这里,还有其他设置,寄存器的操作8h和32g不同要仔细核对头文件定义方式
  a. sys_init()里面头二行换成:
        WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
        EAXFR = 1; //扩展寄存器(XFR)访问使能
        CKCON = 0; //提高访问XRAM速度
  b. 下面这两行
        P_SW1 |= UART1_S2;      //UART1(RxD_2/P3.6, TxD_2/P3.7)
        P_SW2 |= UART2_S1;      //UART2(RxD2/P1.0, TxD2/P1.1)
    改成:
        S1_S1 = 0;      //UART1 switch to, 00: P3.0 P3.1, 01: P3.6 P3.7, 10: P1.6 P1.7, 11: P4.3 P4.4
        S1_S0 = 1;
        S2_S = 0;       //选择串口2通道  0: P1.0, P1.1;  1: P4.6, P4.7

7.keil打开原来的工程.uvproj,进入工程设置:
  a. Device 里面把芯片改为32g;
  b. Target 下设置内存模式为 XSmall,右边的4-Byte...勾上
  c. Output选择输出文件格式为HEX-386,别忘了左边打个勾
  c. 把各种文件的路径设置一下,不喜欢都聚在一起,分开存放比较清爽。头文件都在inc目录下必须要设置,不然keil找不到
   可以编译一下看看有没有遗漏的
   写入芯片看看,一举成功在系统硬件管理器里面多了两个串口
   
   读通高手的源代码是一个既痛苦又兴奋的过程,痛苦的是一开始很多东西无法理解--看不懂,兴奋的是经过不懈地努力逐渐投入了--懂了一点,
   今天把这个修改的过程记录下来重新演示一遍,实际上就是一个学习提高的过程,高兴

点评

感谢分享,屠龙刀以及STC-USB Link1D今日已安排寄出,期待您的测试好评  详情 回复 发表于 2023-3-30 13:27
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2025-05-06 15:23:14

19

主题

386

回帖

2522

积分

版主

积分
2522
QQ
发表于 2023-3-30 13:27:45 | 显示全部楼层
晓*** 发表于 2023-3-30 11:41
总结一下,我把修改部分整理出来给需要的同学参考,对转换其他代码有点用

为了稳妥起见把原工程文件复制一 ...

感谢分享,屠龙刀以及STC-USB Link1D今日已安排寄出,期待您的测试好评
QQ:1463035472,微信:19952583954
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:64
  • 最近打卡:2025-05-11 08:31:52

719

主题

1万

回帖

1万

积分

管理员

积分
15683
发表于 2023-3-30 18:12:53 | 显示全部楼层
可以用STC-USB Link1D 来 SWD仿真 STC32G12K128的 USB,
要仿真USB[D-/P3.0, D+/P3.1], 那 SWD仿真接口要设置到其他I/O !
1.png


1.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-07-05 16:23:47

3

主题

51

回帖

487

积分

中级会员

积分
487
发表于 2023-3-31 15:52:09 | 显示全部楼层
东西收到了,非常感谢。
屠龙刀核心板子,两个字:工整。
link1D插上就Ok,仿真功能连接试了一下也很顺利,单步等都很爽,第一次用硬件仿真,有点惊喜感的。
现在剩下一个问题:脱机下载好需要慢慢来,摸索一下
再次感谢STC的礼物!

点评

脱机下载也是非常方便的,我联系您  详情 回复 发表于 2023-3-31 16:08
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:15
  • 最近打卡:2025-05-06 15:23:14

19

主题

386

回帖

2522

积分

版主

积分
2522
QQ
发表于 2023-3-31 16:08:29 | 显示全部楼层
晓*** 发表于 2023-3-31 15:52
东西收到了,非常感谢。
屠龙刀核心板子,两个字:工整。
link1D插上就Ok,仿真功能连接试了一下也很顺利, ...

脱机下载也是非常方便的,我联系您
QQ:1463035472,微信:19952583954
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-11 19:59 , Processed in 0.130072 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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