找回密码
 立即注册
查看: 10492|回复: 56

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

[复制链接]

该用户从未签到

550

主题

9323

回帖

1万

积分

管理员

积分
13908
发表于 2023-4-18 07:35:43 | 显示全部楼层 |阅读模式
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虚拟串口应用及不停电下载-STC8H-1.png
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
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-1.png
2、下载完成后,从压缩包中将“stc_usb_cdc_8h_data.lib”和“stc32_stc8_usb.h”解压到项目目录中
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-2.png
3、打开Keil软件,并新建项目
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-3.png
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-4.png
Database请选择“STC MCU Database
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-5.png
单片机型号选择“STC8H8K64U Series
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-6.png
4、项目建立完成后,将下面的代码命名为main.c文件并保存到项目目录中

//测试工作频率为24MHz
#include "stc8h.h"
#include "stc32_stc8_usb.h"
#define       FOSC                 24000000UL//ISP下载时需将工作频率设置为24MHz
char *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.1USBD-/D+共用PIN脚,
         P3M1|= 0x03;                                                                              //需要将P3.0/P3.1设置为高阻输入模式
         IRC48MCR= 0x80;                                                                     //使能内部48MUSB专用IRC
         while(!(IRC48MCR & 0x01));
         USBCLK= 0x00;                                                                         //设置USB时钟源为内部48MUSB专用IRC
         USBCON= 0x90;                                                                         //使能USB功能
         usb_init();                                                                                     //调用USB CDC初始化库函数
         IE2|= 0x80;                                                                                  //使能USB中断
         EA= 1;
         while(DeviceState != DEVSTATE_CONFIGURED);              //等待USB完成配置
         while(1)
         {
                   if(bUsbOutReady)                                                              //当硬件接收完成上位机通过串口助手发送数据后
//会自动将bUsbOutReady1
//接收的数据字节数保存在OutNumber变量中
//接收的数据保存在UsbOutBuffer缓冲区
                   {
                            USB_SendData(UsbOutBuffer,OutNumber);         //使用USB_SendData库函数可向上位机发送数据
//这里的测试代码为将接收数据原样返回
                            usb_OUT_done();                                                      //处理完成接收的数据后
//调用usb_OUT_done准备接收下一笔数据
                   }
         }
}


5、将项目目录下的“main.c”和“stc_usb_cdc_32g.lib”加入到项目中
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-7.png
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-8.png

超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-9.png

6、进行项目设置
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-10.png
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-11.png
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-12.png
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-13.png
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-14.png
设置完成后,编译通过即可生产目标HEX文件
7、使用最新的STC-ISP下载软件将HEX下载到目标芯片
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-15.png
8、下载完成后,系统中就会出现一个STC USB-CDC串口
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-16.png


1.3      USB-CDC虚拟串口与电脑进行数据传输
用STC-ISP软件中的串口助手打开CDC串口,即可进行数据收发测试
超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H-1.png

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

USB视频教学  相关链接
截图202311181626419940.jpg

截图202311181627093029.jpg


回复 送花

使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    16

    主题

    711

    回帖

    2528

    积分

    超级版主

    积分
    2528
    发表于 2023-8-4 08:58:10 | 显示全部楼层
    STC8H超级简单的USB-CDC虚拟串口/就是串口应用及不停电下载 !
    附件有源代码

    之前Demo程序只提供了查询方式
    现在新增了中断方式(查询方式的Demo程序也进行了更新)

    stc8h_cdc_data_interrupt_demo.zip

    31.28 KB, 下载次数: 135

    中断方式

    stc8h_cdc_data_query_demo.zip

    30.91 KB, 下载次数: 123

    查询方式

    stc8h_cdc_xdata_interrupt_demo.zip

    31.29 KB, 下载次数: 139

    中断方式

    stc8h_cdc_xdata_query_demo.zip

    30.9 KB, 下载次数: 131

    查询方式

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    6

    主题

    15

    回帖

    128

    积分

    注册会员

    积分
    128
    发表于 2023-4-18 20:21:25 | 显示全部楼层
    截图202311040711049283.jpg

    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%不会丢失或被覆盖。

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    4

    主题

    85

    回帖

    646

    积分

    高级会员

    积分
    646
    发表于 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 bugs  https://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.  
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2023-12-14 08:57
  • 签到天数: 1 天

    [LV.1]初来乍到

    4

    主题

    93

    回帖

    495

    积分

    中级会员

    积分
    495
    发表于 2023-5-14 09:36:40 | 显示全部楼层
    您好老师!这两个文件有什么区别?
    USB-CDC-Demo-STC8H-xdata.rar
    USB-CDC-Demo-STC8H-data.rar
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9323

    回帖

    1万

    积分

    管理员

    积分
    13908
     楼主| 发表于 2023-5-14 10:23:38 | 显示全部楼层
    用 xdata版本,data版本是早期的版本
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    0

    主题

    8

    回帖

    106

    积分

    注册会员

    积分
    106
    发表于 2023-5-22 15:36:35 | 显示全部楼层
    你好,我想请教以下。USB能换成其他时钟吗,我根据官方文档中的时钟树配置了寄存器,但是没成功。

    点评

    USB 你就直接使用内部 专门给 USB的48MHz内部IRC  详情 回复 发表于 2023-5-22 21:21
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-5 13:56
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    12

    主题

    245

    回帖

    1540

    积分

    超级版主

    积分
    1540
    发表于 2023-5-22 16:59:06 | 显示全部楼层
    1.png
    电话:0513-55012946 QQ:2195591714  微信:  19952583740
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9323

    回帖

    1万

    积分

    管理员

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

    USB 你就直接使用内部 专门给 USB的48MHz内部IRC
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    4

    主题

    85

    回帖

    646

    积分

    高级会员

    积分
    646
    发表于 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 ?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    7

    回帖

    82

    积分

    注册会员

    积分
    82
    发表于 2023-7-15 12:17:58 | 显示全部楼层
    zdg102 发表于 2023-4-18 20:21
    根据例程做的项目,  反馈一个发现的BUG,   例程里应该也有,   我用的芯片是  STC8H8K64U  。  当 USB 收 ...

    我也遇到类似的情况,请问丢包问题解决了吗?
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-5 15:03 , Processed in 0.080855 second(s), 75 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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