USB转串口的高速应用实例

最近公司有一个小的子项目需求,上位机发下来的数据,通过USB转串口到单片机,单片机收到之后再通过串口发出去给上位机,很简单的应用,要求速率1Mbps。

使用DMA+IDLE中断接收数据,接收到数据后在IDLE中断中判断校验是否正确,校验没问题数据写进缓存队列,并判断上次数据是否已经发送结束,发送结束的话就开启下一次的发送,这些工作都是IDLE中断里面完成。代码如下。


USB转串口的高速应用实例

图一数据接收处理

使用发送完成中断来实现队列数据的补发,所以说整个收发全在中断里面进行。代码如下。

USB转串口的高速应用实例

图二接收完成中断,补发数据


程序定义一个bool类型的标志TxRingBuffer.bBusy,代表队列里面的数据是否发送完成,一旦发送完成就在发送结束中断里面将TxRingBuffer.bBusy置false,数据在接收到之后开启发送的时候将TxRingBuffer.bBusy置true。

最后看看1000000波特率的测试效果,50ms自动发送数据。


USB转串口的高速应用实例

图三测试

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章