STC8_USBCDC模拟串口收发数据

发布时间:2024年01月04日

前言

之前做遥控手柄时,使用usb hid烧录的,不是用串口,也就是说无法用串口打印信息,不方便调试代码,于是,写了一个STC8_USBCDC模拟串口收发数据的代码。

在这里插入图片描述

代码源码

百度网盘链接:https://pan.baidu.com/s/1AXd4zsaQSt7vYXetngYn1w?pwd=k89q

软硬件版本说明

  • 芯片型号:STC8H8K64U
  • ide版本:keil C51V961

库函数参考

  • STC-USB CDC库文件(中断模式)
    在这里插入图片描述
  • STC8H库函数
    在这里插入图片描述

keil配置说明

在这里插入图片描述
在这里插入图片描述

核心代码展示

  • stc8_usb_cdc.h
#ifndef __STC8_USB_CDC_H__
#define __STC8_USB_CDC_H__


#include "stc32_stc8_usb.h"
#include "Config.h"

void usb_cdc_init();
void usb_handle();

#endif
  • stc8_usb_cdc.c
#include "stc8_usb_cdc.h"

char *USER_STCISPCMD = "@STCISP#";      //设置自动复位到ISP区的用户接口命令


void usb_cdc_init() {
    //扩展寄存器(XFR)访问使能
    P_SW2 |= 0x80;
    
    // P30 P31准双向
    P3M0 &= ~0x03; P3M1 &= ~0x03; 

    IRC48MCR = 0x80; //使能内部 48M 的 USB 专用 IRC
    
    while (!(IRC48MCR & 0x01));  // 等待时钟稳定
    
    
    usb_init(); //调用 USB CDC 初始化库函数
    
    USBCLK = 0x00; //设置 USB 时钟源为内部 48M 的 USB 专用 IRC
    USBCON = 0x90; //使能 USB 功能
    IE2 |= 0x80; //使能 USB 中断
    EA = 1;
    
    //等待USB完成配置
    while (DeviceState != DEVSTATE_CONFIGURED);
}


void usb_handle() {
    //当接收完成数据后,bUsbOutReady置1
	//接收字节数保存在OutNumber中
	//接收数据保存在UsbOutBuffer缓冲区
	if(bUsbOutReady)
	{
		USB_SendData(UsbOutBuffer,OutNumber);	//向上位机发送数据
		usb_OUT_done();			//处理完成接收的数据后调用该函数接收下一个数据
	}
}
  • main.c
#include    "stc8_usb_cdc.h"
#include	"Delay.h"

void main() {
    
    //扩展寄存器(XFR)访问使能
    P_SW2 |= 0x80;
    
    usb_cdc_init();
    
    delay_ms(250);
    delay_ms(250);
    delay_ms(250);
    delay_ms(250);
    delay_ms(250);
    delay_ms(250);
    delay_ms(250);
    delay_ms(250);
    printf("hello usb cdc\n");
    
    
    delay_ms(250);
    delay_ms(250);
    delay_ms(250);
    delay_ms(250);
    printf("num = %d\n", (int)250);    

    while(1) {
        usb_handle(); // 回显接收的数据
        delay_ms(250);
    }
}
  • stc32_stc8_usb.h文件修改
    在这里插入图片描述

程序运行效果

在这里插入图片描述

参考资料

文章来源:https://blog.csdn.net/tennysonsky/article/details/135381869
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。