神农鼎 发表于 2023-4-18 07:35:43

【D-/P3.0, D+/P3.1】直连电脑USB-CDC串口/就是串口通信,不停电下载@STC8H

STC8H超级简单的USB-CDC虚拟串口/就是串口应用及不停电下载 !
===用差分信号线 【D-/P3.0, D+/P3.1】直接接电脑USB口串口通信
有源代码, 完整的工程项目下载
1.1   USB-CDC虚拟串口概述
当单片机需要和电脑之间进行数据交换时,首选一般都是串口通讯。1T 8051, STC8H8K64U单片机内置USB控制器和收发器。当用户代码中嵌入USB-CDC代码后,使用USB线将单片机与电脑直接相连接,在电脑端就可识别出【USB-CDC虚拟串口】,【USB-CDC虚拟串口】就是【串口】, 就是【最简单最强大的串口】USB-CDC虚拟串口和传统串口相比有如下优点:Ø数据传输更快:   USB-CDC虚拟串口忽略传统串口的波特率,传输速度的比特率即为全速USB的通讯速度12MBPS(即每秒12M位)Ø使用更简单便捷:USB-CDC虚拟串口忽略传统串口的起始位、停止位等冗余信息Ø数据传输更可靠:USB-CDC虚拟串口丢弃传统串口简单的软件奇偶校验机制,USB-CDC虚拟串口数据传输时有USB硬件CRC校验,                              以及校验出错重传机制,保证数据100%正确Ø自动缓存数据:   USB-CDC虚拟串口会自动缓存数据。单片机在没有处理完成上位机下传的上一笔数据时,如果此时上位机又有新的数据下传,                              虚拟串口会自动将新的数据缓存,从而保证数据100%不会丢失或被覆盖。
USB-CDC虚拟串口和传统串口相比有如下优点:Ø数据传输更快:   USB-CDC虚拟串口忽略传统串口的波特率,传输速度的比特率即为全速USB的通讯速度12MBPS(即每秒12M位)Ø使用更简单便捷:USB-CDC虚拟串口忽略传统串口的起始位、停止位等冗余信息Ø数据传输更可靠:USB-CDC虚拟串口丢弃传统串口简单的软件奇偶校验机制,USB-CDC虚拟串口数据传输时有USB硬件CRC校验,                           以及校验出错重传机制,保证数据100%正确Ø自动缓存数据:USB-CDC虚拟串口会自动缓存数据。单片机在没有处理完成上位机下传的上一笔数据时,如果此时上位机又有新的数据下传,                            虚拟串口会自动将新的数据缓存,从而保证数据100%不会丢失或被覆盖。1.2                  新建Keil项目并加入CDC模块1、首选从官网下载CDC代码库(https://www.stcai.com/filedownload/656048)
2、下载完成后,从压缩包中将“stc_usb_cdc_8h_data.lib”和“stc32_stc8_usb.h”解压到项目目录中
3、打开Keil软件,并新建项目


Database请选择“STC MCU Database”
单片机型号选择“STC8H8K64U Series”
4、项目建立完成后,将下面的代码命名为main.c文件并保存到项目目录中
//测试工作频率为24MHz#include "stc8h.h"#include "stc32_stc8_usb.h"#define       FOSC               24000000UL//ISP下载时需将工作频率设置为24MHzchar *USER_DEVICEDESC = NULL;char *USER_PRODUCTDESC = NULL;char *USER_STCISPCMD = "@STCISP#";                                     //不停电自动ISP下载命令void main(){         P_SW2|= 0x80;         P0M1= 0x00;   P0M0 = 0x00;         P1M1= 0x00;   P1M0 = 0x00;         P2M1= 0x00;   P2M0 = 0x00;         P3M1= 0x00;   P3M0 = 0x00;         P4M1= 0x00;   P4M0 = 0x00;         P5M1= 0x00;   P5M0 = 0x00;         P6M1= 0x00;   P6M0 = 0x00;         P7M1= 0x00;   P7M0 = 0x00;         P3M0&= ~0x03;                                                                        //P3.0/P3.1和USB的D-/D+共用PIN脚,         P3M1|= 0x03;                                                                              //需要将P3.0/P3.1设置为高阻输入模式         IRC48MCR= 0x80;                                                                     //使能内部48M的USB专用IRC         while(!(IRC48MCR & 0x01));         USBCLK= 0x00;                                                                         //设置USB时钟源为内部48M的USB专用IRC         USBCON= 0x90;                                                                         //使能USB功能         usb_init();                                                                                     //调用USB CDC初始化库函数         IE2|= 0x80;                                                                                  //使能USB中断         EA= 1;         while(DeviceState != DEVSTATE_CONFIGURED);            //等待USB完成配置         while(1)         {                   if(bUsbOutReady)                                                            //当硬件接收完成上位机通过串口助手发送数据后//会自动将bUsbOutReady置1//接收的数据字节数保存在OutNumber变量中//接收的数据保存在UsbOutBuffer缓冲区                   {                            USB_SendData(UsbOutBuffer,OutNumber);         //使用USB_SendData库函数可向上位机发送数据//这里的测试代码为将接收数据原样返回                            usb_OUT_done();                                                      //处理完成接收的数据后//调用usb_OUT_done准备接收下一笔数据                   }         }}

5、将项目目录下的“main.c”和“stc_usb_cdc_32g.lib”加入到项目中




6、进行项目设置





设置完成后,编译通过即可生产目标HEX文件
7、使用最新的STC-ISP下载软件将HEX下载到目标芯片
8、下载完成后,系统中就会出现一个STC USB-CDC串口


1.3      USB-CDC虚拟串口与电脑进行数据传输用STC-ISP软件中的串口助手打开CDC串口,即可进行数据收发测试

1.4      STC USB-CDC虚拟串口实现不停电自动ISP下载
由于我们在代码中已经定义了不停电自动ISP下载命令
我们只需要在下载软件的“收到用户命令后复位到ISP监控程序区”中的进行如下设置,即可实现不停电自动ISP下载功能了。

USB视频教学相关链接

视频教学,大学标准课程:【USB 原理及实战,16课时】已完美完成 ,有视频回放 - USB:USB-CDC虚拟串口/就是串口,一箭双雕之USB转双串口,[鼠标+键盘]的HID复合设备 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


视频回放,USB大型实战研讨会,冲哥重披战袍, 2023/8/19期 - 视频教学,《单片机原理及应用》教学改革及实践研讨会,实战技术交流会,会务通知 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


zhp 发表于 2023-8-4 08:58:10

STC8H超级简单的USB-CDC虚拟串口/就是串口应用及不停电下载 !
附件有源代码
之前Demo程序只提供了查询方式
现在新增了中断方式(查询方式的Demo程序也进行了更新)

zdg102 发表于 2023-4-18 20:21:25



32位8051,STC32G12K128 也有强大的 【USB-CDC/虚拟串口】
STC32超级简单的USB-CDC虚拟串口应用及不停电下载
1.1   USB-CDC虚拟串口概述
当单片机需要和电脑之间进行数据交换时,首选一般都是串口通讯。32位8051,STC32G12K128单片机内置USB控制器和收发器。当用户代码中嵌入USB-CDC代码后,使用USB线将单片机与电脑直接相连接,在电脑端就可识别出【USB-CDC虚拟串口】,【USB-CDC虚拟串口】就是【串口】, 就是【最简单最强大的串口】USB-CDC虚拟串口和传统串口相比有如下优点:Ø数据传输更快:   USB-CDC虚拟串口忽略传统串口的波特率,传输速度的比特率即为全速USB的通讯速度12MBPS(即每秒12M位)Ø使用更简单便捷:USB-CDC虚拟串口忽略传统串口的起始位、停止位等冗余信息Ø数据传输更可靠:USB-CDC虚拟串口丢弃传统串口简单的软件奇偶校验机制,USB-CDC虚拟串口数据传输时有USB硬件CRC校验,                              以及校验出错重传机制,保证数据100%正确Ø自动缓存数据:   USB-CDC虚拟串口会自动缓存数据。单片机在没有处理完成上位机下传的上一笔数据时,如果此时上位机又有                           新的数据下传,虚拟串口会自动将新的数据缓存,从而保证数据100%不会丢失或被覆盖。https://www.stcaimcu.com/data/attachment/forum/202304/18/070745qjkbfke9ghyeqjkt.png
【新提醒】超级简单的USB-CDC虚拟串口应用及不停电下载-STC32 - USB:USB-CDC虚拟串口/就是串口,一箭双雕之USB转双串口,[鼠标+键盘]的HID复合设备 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

jmg 发表于 2023-5-10 05:07:50

zdg102 发表于 2023-4-18 20:21
根据例程做的项目,反馈一个发现的BUG,   例程里应该也有,   我用的芯片是STC8H8K64U。当 USB 收 ...
Yes, see also my thread
USB to 2 serial ports-STC8H tests, and bugshttps://www.stcaimcu.com/forum.php?mod=viewthread&tid=2153
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)

I think STC test code only using their own CDC helper terminal, which has added delays and does not feed USB as fast as other SW and terminals can, so they miss catching bugs.

In my tests, even USB -> UART_TX fails, (drops many bytes at large payloads) which should be the simplest to get right.

sdwflzg 发表于 2023-5-14 09:36:40

您好老师!这两个文件有什么区别?
USB-CDC-Demo-STC8H-xdata.rar
USB-CDC-Demo-STC8H-data.rar

神农鼎 发表于 2023-5-14 10:23:38

用 xdata版本,data版本是早期的版本

不许人间见白头 发表于 2023-5-22 15:36:35

你好,我想请教以下。USB能换成其他时钟吗,我根据官方文档中的时钟树配置了寄存器,但是没成功。

STC32G12K128 发表于 2023-5-22 16:59:06


神农鼎 发表于 2023-5-22 21:21:09

不许人间见白头 发表于 2023-5-22 15:36
你好,我想请教以下。USB能换成其他时钟吗,我根据官方文档中的时钟树配置了寄存器,但是没成功。 ...

USB 你就直接使用内部 专门给 USB的48MHz内部IRCUSB的 48MHz 时钟

jmg 发表于 2023-7-4 14:38:24

神农鼎 发表于 2023-5-22 21:21
USB 你就直接使用内部 专门给 USB的48MHz内部IRC

Does that 48MHz auto-lock to the USB Frame timing ?

TenYearsAfter 发表于 2023-7-15 12:17:58

zdg102 发表于 2023-4-18 20:21
根据例程做的项目,反馈一个发现的BUG,   例程里应该也有,   我用的芯片是STC8H8K64U。当 USB 收 ...

我也遇到类似的情况,请问丢包问题解决了吗?
页: [1] 2 3 4 5 6
查看完整版本: 【D-/P3.0, D+/P3.1】直连电脑USB-CDC串口/就是串口通信,不停电下载@STC8H