基于STM32与Lwip协议栈的高效通信技术简析

(整期优先)网络出版时间:2024-05-08
/ 2

基于STM32与Lwip协议栈的高效通信技术简析

王珊

陕西黄河集团有限公司      陕西西安      710000

摘 要:通过将UCOS-II和Lwip协议堆栈进行迁移,采用STM32F107中的ETH中断+ DMA模式,并使用UDP协议服务器进行主从通讯,可以有效地克服插拔重联、一对多通信等问题,达到高效率的通讯,经试验,丢包率几乎为0,能极大地减少 MCU的资源和通讯时延,增强通讯的稳定性和可靠性,在工业通信方面具有广阔的应用前景。

关键词:STM32;Lwip;协议栈;通信技术

在工业通信与控制系统中,对数据的实时传递提出了更高的要求。工业以太网RJ45与传统的通信方式进行比较,有着更快的通信速率,并且布线也比较方便。当采用STM32F107微处理器对 LWIP轻型协议堆栈进行了改造,利用STM32F107微处理器对其接收的触发方式进行了网络中断,从而实现减小了MCU资源和通信时延的目的,从而不仅改善了通信的稳定性和可靠性,同时也改善了处理效率。

1.系统软件设计

在软件方面,将 LWIP协议栈在UCOS操作系统下进行了移植,通过STM32F107自身的 DMA+ ETH中断来完成对数据的高速、有效地传送,并使用UDP服务方式来完成数据的传递,以达到更好的工业应用效果。从该软件的流程可以看出,首先对该系统进行了初始化,接着对其进行UCOS的初始化和生成 Lwip任务,在此过程中对DP8348、Lwip进行初始化,并将UDP服务器设置好,Lwip任务才能将任务挂起;在此过程中对数据进行解析和处理,最终将数据反馈给用户,从而实现一次数据传输。

1.1LWIP协议栈移植路

LWIP是一种基于自由开放 TCP/IP协议堆栈,可以通过 Lwip官方网站或STM32官方网站上下载 Lwip的源代码。本系统将 LWIP协议栈移植到 UCOS操作系统之下,但实际采用的是 ETH中断+ DMA接受触发,与是否采用嵌入式系统无关,这一系统利用 UCOS系统来对程序进行改进,从而进一步提升 MCU的工作效率。在 LWIP的移植过程中,将宏NO_SYS设为1,并且采用了 UDP的 RAW格式,将LWIP_NETCONN与LWIP_SOCKET相对应地设定为0,将LWIP_UDP设为1,这样就开始了 UDP通讯。由于是 UDP服务器,所以通常要有一个固定的 IP地址,所以当把LWIP_DHCP设为0时,就会把自动获得的 IP地址给关掉,然后对主机和主机之间的存储器尺寸进行了设定。在初始化 Lwip,设定装置的 MAC地址时,可以将STM32的唯一ID作为 MAC地址,以避免地址发生冲突而不能工作。Lwip的初始化程序如下:获取STM32的 ID后面的32位用作 MAC地址后面的三个字节,对动态内存、内存池进行初始化,对 IP地址、子网掩码以及网关进行设置,对 MAC地址进行设置,使用STM32的内部 ID来避免发生碰撞,对网络界面进行初始化,同时还可以对网络界面进行初始化,并对其进行网络界面的初始化,然后对其进行配置。在初始化完成之后,系统采用 DMA+ ETH的中断模式来进行数据的接收,还要编写相应的 ETH中断功能,来检测有没有被接收到,然后从缓冲中读出被接收的信息,然后清理 DMA接收中断标记位,利用 STM固件存储库中的ETH_GetRxPktSize来判断有没有报文,然后通过 Lwip协议堆栈的LwIP_Pkt_Handle ()来读出所接收的信息,然后将 DMA相应的中断标记位上删除。

1.2 创建UDP服务端

现在互联网中大部分的数据通讯都是使用 TCP或者 UDP,与 TCP相比,UDP是一种无连接、不可靠、传送速率高、相对安全、可以实现一对一、多对一的传送层的协议。UDP是一种高效、实时、资源利用率较高的通信技术,其在实际工程中的应用是非常合适的。在此基础上,对 UDP进行了进一步的改进,降低了 UDP的分组丢失率,在对其进行优化后,提高了系统的可靠性。UDP服务器的编码按以下方式进行初始化:建立一个 UDP控制块,将当地的 IP地址和端口进行捆绑,然后将收到的数据回调功能进行登记,在对 UDP服务器进行初始化之后,Lwip的子任务可以被立即挂起,在收到数据包之后,再进行一次回调。在这个回呼功能里完成对资料的加工和分析,然后再将资料传回到客户机,并将远端的连接和记忆体解除。对所述的数据进行拷贝和接受,执行对所述数据的分析等过程,建立与所述远程客户机的一个连接,所述请求的存储信息类型为PBUF_ROM,而非PBUF_RAM,对所述传输的字节进行设定,将所述传输的数据指标指向所述阵列,传送所述数据,并将所述数据从所述远端用户中解除,最后释放内存。

2.测试结果

通过网络连接到与电脑处于同一网络段的系统的硬件装置。利用 ATKKPING软件来检测该系统装置,其结果是,该主机以100毫秒对该装置ping32个字节的数据,总共不中断地持续传输560万个数据包,最小的间隔0毫秒,最大的间隔3毫秒,平均时间0.11毫秒,丢包率0。另外,在进行通信稳定度的试验中,按100 ms间隔进行一次传输,共计传输515946个分组,15个小时内,收到515946个分组,丢包率0%。在实践中,当发生差错或丢包的时候,利用应用层协议,反复地给装置终端发出询问通讯的指令,从而使数据通讯的可靠性和稳定性得到进一步的提升。UDP是一种无连接的协议,传输数据的用户和服务器都不会有任何的连接,传输数据的情况下,只会很快地将其扔到网上,而对于一对多的传输,也可以进行同步,而且在进行断网的重连试验时,不用进行特殊的定期检查,只有将设备连接网络之后,才能恢复正常的通讯。

结束语:

综上所述,本文提出一种以STM32和Lwip协议堆栈为核心的高性能通信方法,以STM32F107为核心,采用ETH中断+ DMA的方法,将 Lwip协议堆栈移植到 UDP服务器上,以达到在工业应用中的高效率通信。实验结果表明,本文提出的方法能够对 MCU的资源和通讯时延进行最大程度的优化,同时还能提升通信的稳定性和可靠性,对于嵌入式工业的实际应用具有重要的意义。

参考文献

[1]梁铁,李凯,王付强,等.基于STM32和LwIP协议栈的Web网页控制系统的设计与实现[J].测控技术, 2020(09):109-110.

[2]杨亮亮,黄坤,张莉敏,等.基于嵌入式网络协议栈的多轴运动控制卡通信系统设计[J].软件工程, 2021(05):234-235.

[3]李晨,蒋林,刘思平.基于STM32与Lwip协议栈的高效通信技术[J].电子技术与软件工程, 2019(04):227-228.