CH559L单片机USB CDC虚拟串口下数据环路测试案例

本案例详细介绍了如何在Keil环境下,利用CH559L单片机实现USB CDC虚拟串口的数据环路测试。通过配置时钟源、初始化USB设备和端点,建立与电脑的串口通讯,实现数据的双向透明传输。当电脑发送数据到虚拟串口,单片机会接收并原样返回数据。注意在使用外部晶振时需加入适当延时。附带源码链接供参考。
摘要由CSDN通过智能技术生成

CH559L单片机USB CDC虚拟串口下数据环路测试案例


  • ✨本案例基于Keil环境下开发。
  • 🌿功能演示:
    在这里插入图片描述

  • 📌案例来源地址:https://www.wch.cn/bbs/thread-65023-1.html

✒官方的描述可能和我的描述有差异,希望大家理解。我的个人理解就是其本质就是一个CDC虚拟串口,数据中继(环路)的功能,这个描述也是从原来STC单片机案例中对此功能这样的描述。

在这里插入图片描述

📢使用CDC虚拟串口注意事项

当使用外部晶振作为时钟源时,使能CLOCK_CFG |= bOSC_EN_XT,后面必须加一定的延时时间,否则无法识别到CDC虚拟串口。

📝时钟源配置函数

这部分内容是根据个人的实际需求修改的部分,在源代码里面仅仅配置的是内部时钟源。当启用系统时钟源的时候,这一点需要注意,

#define	 OSC_EN_XT 1  时钟源配置0代表内部时钟源,1代表使用外部时钟源
void	CfgFsys( )  
{
#if OSC_EN_XT
	SAFE_MOD = 0x55; //开启安全模式
    SAFE_MOD = 0xAA;                                                 
	CLOCK_CFG |= bOSC_EN_XT;   //使能外部晶振
//    mDelaymS(10);
//	SAFE_MOD = 0x55;//开启安全模式
//    SAFE_MOD = 0xAA;   
	CLOCK_CFG &= ~bOSC_EN_INT;//关闭内部晶振
	SAFE_MOD = 0x00; 
#else
	SAFE_MOD = 0x55;                                                           //开启安全模式
    SAFE_MOD = 0xAA; 	
 	CLOCK_CFG &= ~MASK_SYS_CK_DIV;
//  CLOCK_CFG |= 6;//配置系统时钟48MHz
//  CLOCK_CFG |= 8; //配置系统时钟36MHz
//  CLOCK_CFG |= 10; //配置系统时钟28.8MHz
  CLOCK_CFG |= 12; //配置系统时钟24MHz
//  CLOCK_CFG |= 16; //配置系统时钟18MHz  
/*56MHz
// 	CLOCK_CFG &= ~MASK_SYS_CK_DIV;
//  CLOCK_CFG |= 6;                                                            //配置系统时钟56MHz    
    PLL_CFG = 0xFC;
*/	
    SAFE_MOD = 0xff;                                                           //关闭安全模式  
//  如果修改主频,要同时修改FREQ_SYS,否则会造成延时函数不准
#endif 
}

🎯功能描述

📝CH559L单片机创建一个CDC虚拟串口出来,CH559L目标板连接电脑,会建立一个虚拟端口,通过电脑端的串口调试助手与CDC虚拟端口进行连接,建立数据通讯,电脑端发送什么数据过去后,目标板接收到数据后原样返回。
  • ✔功能实现借助于USB中断服务,具体的功能实现函数这里就不贴出来了。

main函数中的代码

void main()
{
	  mDelaymS(30);                                                                 //上电延时
//  CfgFsys( );                                                                   //CH559时钟选择配置    
    mInitSTDIO( ); //串口0,可以用于调试
	  USBDeviceCfg(); //设备模式配置
    USBDeviceEndPointCfg();//端点配置
    USBDeviceIntCfg();//中断初始化
	  UEP0_T_LEN = 0;
    UEP1_T_LEN = 0;	                                                              //预使用发送长度一定要清空	
    UEP2_T_LEN = 0;	                                                      
    while(1)
    {   
//         SendData(RecBuf);
// 		    mDelaymS( 500 ); //模拟单片机做其它事				
    }
}

🗝原工程源码

链接:https://pan.baidu.com/s/1QZDszB19QtsGh0WZWu62Ng 
提取码:jf9m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值