STC USB-CDC 虚拟串口使用
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STC USB-CDC 虚拟串口使用相关的知识,希望对你有一定的参考价值。
STC USB-CDC 虚拟串口使用
✨目前该功能只能在STC8和STC32G单片机上实现该功能。比起WCH的单片机,这一点要远强于STC的USBCDC功能了。WCH随便一个8位单片机上都可以跑其该功能。
- 🔰如果该功能在使用时,出现不稳定,容易丢失端口号又重启出现,请检查连接器是否可靠,特别是micro-usb连接座。
📋在实际效果测试中该功能并不是很稳定,端口易丢失重启,偶尔又正常,如果较长时间里没有数据通讯端口会消失的情况。
✅USB-CDC 虚拟串口概述
当单片机需要和电脑之间进行数据交换时,首选一般都是串口通讯。目前只有STC8H和STC32G 系列单片机支持此功能,当用户代码中嵌入 USB-CDC 代码后,使用 USB 线将单片机与电脑直接相连接,在电脑端就可识别出【USB-CDC 虚拟串口】。
- 📖USB-CDC连接电路参考
🌼USB-CDC虚拟串口和传统串口相比有如下优点:
- 数据传输更快:USB-CDC虚拟串口忽略传统串口的波特率,传输速度的比特率为全速USB的通讯速度12M bps(即每秒12M位)
- 使用更简单便捷:USB-CDC虚拟串口忽略传统串口的起始位、停止位等冗余信息
- 数据传输更可靠:USB-CDC虚拟串口丢弃传统串口简单的软件奇偶校验机制,采用高可靠的CRC校验!
USB-CDC虚拟串口数据传输时有USB硬件CRC校验,以及校验出错重传机制,确保数据100%正确 - 自动缓存数据:USB-CDC虚拟串口会自动缓存数据。单片机在没有处理完成上位机下传的上一笔数据时,
如果此时上位机又有新的数据下传,虚拟串口会自动将新的数据缓存,从而保证数据100%不会丢失或被覆盖。 - 不管波特率,USB-CDC是12M bps的固定速度通信;
- 不管奇偶校验位,USB-CDC通信无奇偶校验位。
🛠STC USB-CDC 虚拟串口环境搭建
- 📌下载对应依赖库:
https://www.stcai.com/gjrj
- 🔨根据不同的配置选项使用不同的.lib库
- 这里以STC8H为例:
- 🌿
stc_usb_cdc_8h_data.lib
对应:
- 🌿
stc_usb_cdc_8h_xdata.lib
对应的是:
- 🌴通用选项:将未使用的函数不启用
REMOVEUNUSED
- 🍁工程架构
📝主程序代码
#include "stc8h.h"
#include "stc32_stc8_usb.h"
#define FOSC 24000000UL //定义主时钟
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.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 准备接收下一笔数据
📚程序源码(包含所需库文件包)
复制这段内容后打开百度网盘手机App,操作更方便哦
链接: https://pan.baidu.com/s/1n3S3xXluBCXFSC5gakM29Q
提取码: mhi3
以上是关于STC USB-CDC 虚拟串口使用的主要内容,如果未能解决你的问题,请参考以下文章
PCB开源分享STC32G12K128/STC8H8K64U开发板
STC15F408AS跑STC官方示例串口输出乱码问题解决方案