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

被折叠的 条评论
为什么被折叠?



