尝鲜赤菟CH32V307-基于RT-Thread和LwIP实现八串口服务器 2022-01-24 18:35 串口服务器,提供串口转网络的功能,将串口转换成TCP/IP协议网络接口,实现串口和网络接口的数据双向透明传输,扩展串口设备的通讯距离。 赤菟V307是搭载沁恒自研RISC-V内核青稞V4F的高性能互联型MCU,主频支持144MHz,支持硬件浮点运算(FPU),提供八个UART接口、USB2.0高速接口(480Mbps)并内置了PHY收发器、千兆以太网MAC并集成10M PHY、2个CAN接口等丰富的外设资源。 基于八个UART接口、10M以太网的强大外设,通过单片赤菟V307即可实现八串口服务器,每个串口独立工作。 源码仓库地址:https://github.com/openwch/ch32v ... tion/8_uarts_server 下载源码工程后,可直接导入到RT-Thread Studio即可打开工程体验。 网口端设计 网口端采用的是开源的轻量级TCP/IP协议栈LwIP,可以轻松实现赤菟V307网口端的TCP、UDP通信。 例程中默认开启的是TCP Client模式,采用单向循环链表的方式接收TCP Server发过来的数据。 当串口端接收到数据时,直接启动TCP Client的发送函数,并更新队列的读指针。 串口端设计 串口端为了加快数据的收发,采用DMA循环队列的方式接收数据,通过查询接收DMA 传输数据数目寄存器CNTR,与上一次该值进行比较,有变化则说明串口接收到数据,此时便更新队列写指针,并计算队列中数据长度。 根据网口接收端的链表中的数据地址及长度,启动串口端的发送DMA进行数据发送。 多任务设计 通过RT-Thread操作系统,创建两个线程,分别为用于网口端接收数据的“eth_rev”线程和用于串口端接收数据的“uart_rev”线程。 采用时间片轮转方式进行这两个线程的调度,当“eth_rev”线程收到网口端的数据时,启动串口端的发送DMA将数据通过串口发送出去;当“uart_rev”线程收到串口端的数据时,启动网口端的发送函数将数据通过网口发送出去,这样就实现了串口和网络接口的数据双向透明传输。 验证 串口默认波特率为115200,实测八个串口独立工作,可以实现收发10+KB/s的速度。 该例程目前仅实现了TCP Client的收发,还有TCP Server、UDP Server/Client等需要完善,希望各位开发者能够积极提交pr,一起完善该项目。 |
|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号 ) |Sitemap
GMT+8, 2024-9-30 23:14 , Processed in 0.109910 second(s), 36 queries .
Powered by Discuz! X3.2 Licensed
© 2001-2013 Comsenz Inc.