stm32f4 +dp83848 modbustcp+modbusrtu以太网驱动程序稳定版工程 用的armfly例程里的tcpnet 改进加了网线断线重连 端口断开重连打包发送… 可串口以太网同时通讯 可最高开20个socket 例程里已开4个可以参考 连续实测24小时以上上百万帧无错误 dp83848 phy芯片是汽车级 工业场合要比dm9161 lan8720…更稳定可靠 客户实测像w5500这类芯片 静电或者打高压 就死机了 dp83848没事

在嵌入式开发领域,网络通讯的稳定性至关重要。今天要给大家分享一个基于 STM32F4 平台,结合 DP83848 芯片的 Modbus TCP 和 Modbus RTU 以太网驱动程序稳定版工程,这可是经过实战考验的干货。

工程基础与改进

这个工程最初是基于 armfly 例程里的 tcpnet 进行开发的。在原例程基础上,进行了一系列关键改进。首先是网线断线重连和端口断开重连功能的添加。想象一下,在工业环境中,网络时不时抽风断个线,如果设备不能自动重连,那得多耽误事儿。实现这个功能,代码上主要是在网络状态监测部分做文章。

// 伪代码示例,监测网络连接状态
while(1) {
    if (check_network_connection() == DISCONNECTED) {
        // 尝试重新连接网线
        reconnect_network_cable();
        // 尝试重新连接端口
        reconnect_port();
    }
    // 其他业务逻辑
    do_other_work();
}

这里checknetworkconnection函数用于检测当前网络连接状态,一旦发现断开,就调用reconnectnetworkcablereconnect_port函数进行重连。这两个重连函数内部涉及到对硬件寄存器的操作以及网络协议栈的初始化等步骤,确保设备能够迅速恢复网络连接。

同时还加入了打包发送功能,有效提升数据传输效率。在数据量较大的情况下,打包发送可以减少网络交互次数,降低丢包风险。

串口与以太网同时通讯及多 Socket 支持

该工程一个很实用的特性是支持串口与以太网同时通讯。这在很多工业场景中非常必要,比如通过串口进行设备调试,同时通过以太网进行数据远程传输。代码实现上,主要是合理分配系统资源,确保两个通讯模块不会互相干扰。

// 串口发送数据函数
void uart_send_data(uint8_t *data, uint16_t length) {
    for (uint16_t i = 0; i < length; i++) {
        USART_SendData(USARTx, data[i]);
        while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
    }
}

// 以太网发送数据函数
void ethernet_send_data(uint8_t *data, uint16_t length) {
    // 以太网相关发送操作
    // 例如 lwip 协议栈下的发送函数
    err_t err = etharp_output(&etharp_state, &ip_addr, &pbuf);
    if (err!= ERR_OK) {
        // 处理发送错误
    }
}

通过这两个独立的函数,分别实现串口和以太网的数据发送,系统在运行过程中根据业务需求调用相应函数即可。

stm32f4 +dp83848 modbustcp+modbusrtu以太网驱动程序稳定版工程 用的armfly例程里的tcpnet 改进加了网线断线重连 端口断开重连打包发送… 可串口以太网同时通讯 可最高开20个socket 例程里已开4个可以参考 连续实测24小时以上上百万帧无错误 dp83848 phy芯片是汽车级 工业场合要比dm9161 lan8720…更稳定可靠 客户实测像w5500这类芯片 静电或者打高压 就死机了 dp83848没事

而且,这个工程最高可开启 20 个 socket。例程里已经开启了 4 个作为参考。多 socket 的支持意味着设备可以同时与多个客户端或服务器进行通讯,极大拓展了应用场景。

稳定性实测与芯片优势

这个工程经过连续 24 小时以上的实测,上百万帧数据传输无错误,稳定性可见一斑。这很大程度上得益于所选用的 DP83848 phy 芯片,这可是汽车级别的芯片,在工业场合比常见的 DM9161、LAN8720 等芯片更稳定可靠。客户实测发现,像 W5500 这类芯片,遇到静电或者打高压的情况就容易死机,而 DP83848 则安然无恙。这就为设备在恶劣工业环境中的长期稳定运行提供了坚实保障。

总之,这个基于 STM32F4 和 DP83848 的 Modbus TCP/RTU 以太网驱动稳定版工程,无论是在功能实现还是稳定性上,都表现出色,希望能给各位嵌入式开发的小伙伴们带来一些启发和帮助。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐