数码之家

 找回密码
 立即注册
搜索
查看: 2503|回复: 15

[C51] 超级简单的USB-CDC虚拟串口应用及不停电下载-STC8H

[复制链接]
头像被屏蔽
发表于 2023-4-18 16:40:08 | 显示全部楼层 |阅读模式
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虚拟串口和传统串口相比有如下优点:
Ø  数据传输更快:   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下载时需将工作频率设置为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”加入到项目中



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下载功能了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
头像被屏蔽
 楼主| 发表于 2023-6-12 15:03:31 | 显示全部楼层
USB 直接使用内部专门给 USB的48MHz内部IRC
回复 支持 反对

使用道具 举报

发表于 2023-6-13 10:30:16 | 显示全部楼层
STC32位8051 发表于 2023-6-12 15:03
USB 直接使用内部专门给 USB的48MHz内部IRC

现在好多32芯片都可以DIY成DAP-LINK,请问目前有没有用stc芯片做成DAP-LINK的例程?
回复 支持 反对

使用道具 举报

发表于 2023-6-13 12:03:44 | 显示全部楼层

请教楼主

我是刚刚才入门的菜鸟,请教楼主一个问题,就是在使用STC8H1K08单片机第15通道测量单片机外部供电电压时,手册要求外部基准引脚Vref要与电源脚接在一期,按手册使用可以测量到单片机供电电压,但如果单片机基准引脚Vref不接到供电脚,而是接到另一个2.5-5V的电源(称为U1),那么测到的是不是U1的电压值?
回复 支持 反对

使用道具 举报

头像被屏蔽
 楼主| 发表于 2023-6-13 17:34:23 | 显示全部楼层

VREF可以直接接电源,也可以另外接精准的电压:


您测试的应该是外部输入的电压吧!




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2023-6-13 19:10:45 | 显示全部楼层
STC32位8051 发表于 2023-6-13 17:34
VREF可以直接接电源,也可以另外接精准的电压:

我想请教的是,在利用第15通道测量单片机外部供电(电池)电压VCC时,外部基准Vref要与电源脚VCC接在一起,但如果Vref不接到供电VCC脚,而是接到一个独立的2.5-5V电源(称为U1),那么测到的是是VCC电压,还是U1的电压,或者是其他值?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2023-6-13 20:20:06 | 显示全部楼层
测量ADC15固定接的1.19V 信号源,反推 ADC_VREF+
回复 支持 反对

使用道具 举报

发表于 2023-6-13 21:03:08 | 显示全部楼层
本帖最后由 刘佑红 于 2023-6-13 21:13 编辑
钟山风雨起苍黄 发表于 2023-6-13 20:20
测量ADC15固定接的1.19V 信号源,反推 ADC_VREF+

简洁明了。多谢。
感觉回复看着怪熟悉,于是就再次翻看规格书,在介绍ADC的第一页中醒目蓝字给着提示呢,还是学习不认真!
回复 支持 反对

使用道具 举报

发表于 2023-6-13 21:39:26 | 显示全部楼层
STC32位8051 发表于 2023-6-12 15:03
USB 直接使用内部专门给 USB的48MHz内部IRC

问个题外问题:
STC_ISP的软件功能已经够好了。
能否在发送字符串的时候,发送类似于C语言的转义字符
例如"abcd\fe",其中"\fe"就是希望发送的转义字符。
回复 支持 反对

使用道具 举报

头像被屏蔽
 楼主| 发表于 2023-6-14 09:45:25 | 显示全部楼层
ahyu99 发表于 2023-6-13 21:39
问个题外问题:
STC_ISP的软件功能已经够好了。
能否在发送字符串的时候,发送类似于C语言的转义字符。


更新升级中:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2023-6-14 19:06:23 | 显示全部楼层

多谢。我试试看。
回复 支持 反对

使用道具 举报

发表于 2023-6-14 19:11:18 | 显示全部楼层
测试了,有多余的发送信息?
例如,我发送:
a=1\xff\xff\xff
实际发送的是(16进制):   [19:08:29.681]发送→61 3D 31 FF FF FF 00 5C 78 66 66 5C 78 66 66
接收的也是如此(16进制):[19:08:29.691]接收←61 3D 31 FF FF FF 00 5C 78 66 66 5C 78 66 66
后面的那个" 00 5C 78 66 66 5C 78 66 66 "是自动多出来的。
回复 支持 反对

使用道具 举报

发表于 2023-6-15 08:16:28 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

头像被屏蔽
 楼主| 发表于 2023-6-15 09:04:48 | 显示全部楼层
ahyu99 发表于 2023-6-14 19:11
测试了,有多余的发送信息?
例如,我发送:
a=1\xff\xff\xff

发什么就会收到什么,应该不会多数据出来的。                                             
您可以去www.STCAIMCU.com 问STC研发人员,或者用范例试试。
回复 支持 反对

使用道具 举报

发表于 2023-6-16 15:58:58 | 显示全部楼层
本帖最后由 钟山风雨起苍黄 于 2023-6-17 19:25 编辑
ahyu99 发表于 2023-6-14 19:11
测试了,有多余的发送信息?
例如,我发送:
a=1\xff\xff\xff

http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.91T.zip
请测试
回复 支持 反对

使用道具 举报

发表于 2023-6-17 17:07:35 | 显示全部楼层
钟山风雨起苍黄 发表于 2023-6-16 15:58
http://www.stcmcudata.com/STCISP/stc-isp-15xx-v6.91S.zip
请测试

是的,最新的T版本,已经解决了这个问题。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-13 05:12 , Processed in 0.296400 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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