wahahahehehe

Tips:

1. 博客内容主要为博主的学习笔记,引用已表明出处,如有侵犯请联系我删除;

2. 如有错误请指出,万分感谢;

3. 博主邮箱:yukai_tao@163.com。

单片赤菟V307实现八串口服务器

单片赤菟V307实现八串口服务器

简介

串口服务器,提供串口转网络的功能,将串口转换成TCP/IP协议网络接口,实现串口和网络接口的数据双向透明传输,扩展串口设备的通讯距离。
赤菟V307是搭载沁恒自研RISC-V内核青稞V4F的高性能互联型MCU,主频支持144MHz,支持硬件浮点运算(FPU),提供八个UART接口、USB2.0高速接口(480Mbps)并内置了PHY收发器、千兆以太网MAC并集成10M PHY、2个CAN接口等丰富的外设资源。
image
基于八个UART接口、10M以太网的强大外设,通过单片赤菟V307即可实现八串口服务器,每个串口独立工作。
image

源码仓库地址:https://github.com/openwch/ch32v307/tree/main/Application/8_uarts_server

网口端设计

网口端采用的是开源的轻量级TCP/IP协议栈LwIP,可以轻松实现赤菟V307网口端的TCP、UDP通信。
例程中默认开启的是TCP Client模式,采用单向循环链表的方式接收TCP Server发过来的数据。
image
当串口端接收到数据时,直接启动TCP Client的发送函数,并更新队列的读指针。

串口端设计

串口端为了加快数据的收发,采用DMA循环队列的方式接收数据,通过查询接收DMA 传输数据数目寄存器CNTR,与上一次该值进行比较,有变化则说明串口接收到数据,此时便更新队列写指针,并计算队列中数据长度。
image
根据网口接收端的链表中的数据地址及长度,启动串口端的发送DMA进行数据发送。

多任务设计

通过RT-Thread操作系统,创建两个线程,分别为用于网口端接收数据的“eth_rev”线程和用于串口端接收数据的“uart_rev”线程。
采用时间片轮转方式进行这两个线程的调度,当“eth_rev”线程收到网口端的数据时,启动串口端的发送DMA将数据通过串口发送出去;当“uart_rev”线程收到串口端的数据时,启动网口端的发送函数将数据通过网口发送出去,这样就实现了串口和网络接口的数据双向透明传输。
image

验证

串口默认波特率为115200,实测八个串口独立工作,可以实现收发10+KB/s的速度。
image

posted on 2022-01-22 19:54  Wahahahehehe  阅读(537)  评论(0编辑  收藏  举报

导航