✨目前该功能只能在STC8和STC32G单片机上实现该功能。比起WCH的单片机,这一点要远强于STC的USBCDC功能了。WCH随便一个8位单片机上都可以跑其该功能。
📋在实际效果测试中该功能并不是很稳定,端口易丢失重启,偶尔又正常,如果较长时间里没有数据通讯端口会消失的情况。
当单片机需要和电脑之间进行数据交换时,首选一般都是串口通讯。目前只有STC8H和STC32G 系列单片机支持此功能,当用户代码中嵌入 USB-CDC 代码后,使用 USB 线将单片机与电脑直接相连接,在电脑端就可识别出【USB-CDC 虚拟串口】。
https://www.stcai.com/gjrj
这里以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