找回密码
 立即注册
查看: 7148|回复: 20

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

[复制链接]

该用户从未签到

550

主题

9345

回帖

1万

积分

管理员

积分
13916
发表于 2023-4-18 06:40:41 | 显示全部楼层 |阅读模式
STC32超级简单的USB-CDC虚拟串口应用及不停电下载
===用差分信号线D-/P3.0, D+/P3.1】直接接到电脑USB口做串口通信
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%不会丢失或被覆盖。
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-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虚拟串口应用及不停电下载-STC32-2.png

2、下载完成后,从压缩包中将“stc_usb_cdc_32g.lib”和“stc32_stc8_usb.h”解压到项目目录中
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-3.png

3、打开Keil软件,并新建项目
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-1.png
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-2.png
Database请选择“STC MCU Database
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-3.png
单片机型号选择“STC32G12K128 Series
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-1.png

4、项目建立完成后,将下面的代码命名为main.c文件并保存到项目目录中
//测试工作频率为24MHz
#include "stc32g.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()
{
         WTST= 0;
         CKCON= 0;
         EAXFR= 1;
         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初始化库函数
         EUSB= 1;                                                                                     //使能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虚拟串口应用及不停电下载-STC32-2.png
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-3.png   
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-4.png

6、进行项目设置
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-1.png
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-2.png
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-3.png
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-4.png
设置完成后,编译通过即可生产目标HEX文件

7、使用最新的STC-ISP下载软件将HEX下载到目标芯片
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-5.png

8、下载完成后,系统中就会出现一个STC USB-CDC串口
超级简单的USB-CDC虚拟串口应用及不停电下载-STC32-6.png

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

1.4     STC USB-CDC虚拟串口实现不停电自动ISP下载

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

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



回复 送花

使用道具 举报

  • TA的每日心情
    开心
    2024-4-29 10:31
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    16

    主题

    711

    回帖

    2532

    积分

    超级版主

    积分
    2532
    发表于 2023-8-4 08:56:26 | 显示全部楼层
    之前Demo程序只提供了查询方式
    现在新增了中断方式(查询方式的Demo程序也进行了更新)

    stc32g_cdc_interrupt_demo.zip

    35.73 KB, 下载次数: 120

    中断方式

    stc32g_cdc_query_demo.zip

    35.36 KB, 下载次数: 99

    查询方式

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9345

    回帖

    1万

    积分

    管理员

    积分
    13916
     楼主| 发表于 2023-4-18 10:12:16 | 显示全部楼层
    1T 8051, STC8H8K64U 也有强大的USB-CDC虚拟串口
    STC8H超级简单的USB-CDC虚拟串口应用及不停电下载
    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 - USB:USB-CDC虚拟串口/就是串口,一箭双雕之USB转双串口,[鼠标+键盘]的HID复合设备 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

    回复 支持 1 反对 0 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9345

    回帖

    1万

    积分

    管理员

    积分
    13916
     楼主| 发表于 2023-4-23 20:20:09 | 显示全部楼层

    截图202311040713102128.jpg
    回复 支持 2 反对 0 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9345

    回帖

    1万

    积分

    管理员

    积分
    13916
     楼主| 发表于 2023-5-2 20:31:30 | 显示全部楼层

    ===支持 STC老梁开源示波器,支持 老刘爱捣鼓开源示波器 功能,波形发生器,冲哥科学计算器
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    11

    回帖

    43

    积分

    新手上路

    积分
    43
    发表于 2023-7-19 16:13:43 | 显示全部楼层
    非常详细
    回复 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    回帖

    20

    积分

    新手上路

    积分
    20
    发表于 2023-8-7 15:27:56 | 显示全部楼层
    本帖最后由 xiaowan 于 2023-8-7 15:33 编辑

    请教问题:不停电自动ISP下载成功后可以正常跑进代码。但是拔掉USB,断开电源后再通电,就跑不进代码了,必须要再插入连接电脑的USB才可以跑进代码(链接适配器的USB也不行),请问应该如何处理?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    回帖

    20

    积分

    新手上路

    积分
    20
    发表于 2023-8-7 15:33:10 | 显示全部楼层
    请教问题:不停电自动ISP下载成功后可以正常跑进代码。但是拔掉USB,断开电源后再通电,就跑不进代码了,必须要再插入连接电脑的USB才可以跑进代码(链接适配器的USB也不行),请问应该如何处理?
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    回帖

    16

    积分

    新手上路

    积分
    16
    发表于 2023-8-31 13:51:36 | 显示全部楼层
    请教一下大佬,我目前用Type-C下载ISP,可以正常下载程序到STC32的板子上。但使用USB CDC的话一直出现驱动程序错误。我的ISP软件是最新的stc-isp-v6.92A,从STC官网下载的库只有stc32_stc8_usb.h,以及我使用查询模式STC-CDC库文件stc_usb_cdc_32.LIB。代码是按照官网最新手册的测试代码写的,大家帮忙看一下哪里配置出现问题,非常感谢。 1.png 2.png
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    12 小时前
  • 签到天数: 134 天

    [LV.7]常住居民III

    26

    主题

    1311

    回帖

    4083

    积分

    论坛元老

    积分
    4083
    发表于 2023-8-31 14:23:34 | 显示全部楼层
    张工 发表于 2023-8-31 13:51
    请教一下大佬,我目前用Type-C下载ISP,可以正常下载程序到STC32的板子上。但使用USB CDC的话一直出现驱动 ...

    这种现象是你的电脑没有USB CDC设备的驱动。
    使用STC-ISP软件安装一下设备驱动:
    1.png

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-7 21:22 , Processed in 0.111609 second(s), 70 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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