KL25的USB CDC虚拟串口与UART串口对比

在之前的博客里,电机阶跃波形和速度需要实时显示在上位机上,方便整定参数和观测,之前用的是串口发送一定的协议到虚拟示波器上,如图,做个广告:山外调试助手,以前和野火一家的。

但是单片机串口的发送过程对于程序执行过程来说算是个delay(),之前测过在9600波特率的情况下,发送几个字节的数据动辄几ms,在本项目中需要频繁发送实时速度数据到上位机,串口干扰了单片机的实时性。因此在追求实时性的场合必须替换掉串口方式,由于KL25是带USB外设的,而且demo板也提供了USB口,所以整合了USB通信到电机PID程序中。由于程序是把USB列举为CDC类,在设备管理器中显示的就是传统串口,驱动官方提供了 Freescale_CDC_Driver_Kinetis.inf  ,你也可以浏览计算机手动安装------从已安装的设备驱动列表选择-----厂商-----Freescale,P&E Micro----------型号---------选择open cdc serial驱动安装。安装完就是个新串口com9:

既然用了USB通信功能,速度有没有变快呢?为此进行了验证,在CDC初始化时设定了和之前串口相同的波特率115200,测试只从下位机语句执行时间角度考虑,上位机的响应时间不包括 也不是重点。测试直接利用引脚取反,示波器直接观测,首先在两种情况加入测试引脚:

PTB8_OUT = 0;
EP_IN_Transfer( EP2 ,wave ,5 ); //USB方式
PTB8_OUT = 1;
       
PTB8_OUT = 0;
uart_sendN(UART0, wave, 5); //UART方式
PTB8_OUT = 1;
       

示波器设置triger查看:

    

左图为UART方式 峰宽 268 us,右图USB方式峰宽 6.6 us,用时大为缩短,USB通信带来的实时性得到极大提升。且USB 中断方式支持错误重传,在可靠性上也比UART高。之后又测试了CDC虚拟串口波特率提升到256000,用时并没有减短,仍然为6.6 us,认为这是USB的发送处理时间,与虚拟波特率无关。  上位机只需换到com9打开,原样显示波形。

(联系我,打开个人资料即可查看邮箱)

2018.12.23更新:  所有单片机串口发送函数有个 while(发送缓冲区空 ==1) 再发送   的过程,所以费时很长,而USB发送函数,把数据扔给USB外设寄存器就不管了,等于是没有阻塞,当然快很多,测的6.6us只是引脚语句执行时间和发送语句的执行时间。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦时明月94

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值