使用 STM32F7 通过 LWiP PPPoS 为 Telit GL865 GSM 模块提供静态 IP

Static IP for Telit GL865 GSM module via LWiP PPPoS by using STM32F7

我正在使用 STM32F7 和开发板 Nucleo-F746ZG。 我已经激活了 UART、LWIP 中间件及其 PPPoS 支持。

我可以通过UART使用AT命令让STM32F7与Telit GL865 GSM调制解调器通信,(即让调制解调器建立其SIM卡的静态IP并检查ping,一切正常。

但是,我希望 LWiP PPPoS 在发送 ATD*99***1# 后立即建立静态 IP 而不是 AT 命令。

我深入搜索了网络,找不到包含用于 STM32F 与 Telit GL865 GSM 通信的 LWiP PPPoS 服务器的特定示例。我见过像

这样的代码
sio_fd_t ppp_sio = sio_open(sio_idx);

但是,我无法将它们与 STM32 立方体函数相关联。

我看过使用 pppInit(void)pppOverSerialOpen(PPP_SERIAL_PORT, linkStatusCB, &connected) 函数的示例,但我猜当前堆栈不支持这些命令。

有没有人将STM CUBE的uart句柄与LWiP堆栈的PPPoS联系起来?您是否有任何初始化大纲或建议可以开始并继续获取静态 IP? (即 INITDISCONNECTINGDISCONNECTEDCONNECTINGCONNECTEDLWIP 循环)

亲切的问候

Sio是"Serial IO"接口层,由特定端口(特定平台)实现。一旦实施,TCP/IP 堆栈将处理其余的工作,包括 PPP 协商和配置(LCP/IPCP 等),其中包括获取 IP 地址(自己的 IP、网关、网络掩码、dns1、dns2)。因此,您需要做的就是实现通过 UART 读写数据的低级函数。处理 PPP 的责任在 TCP/IP 堆栈的末端。

虽然我没有 STM32 的确切实现,但自己实现应该很容易。它的实现方式可能(也可能不)取决于您自己的配置,例如您是否使用 FreeRTOS 及其 queues/mutexes 来处理 UART 通信。对于所有组件通常如何在与 PPP 相关的 TCP/IP 堆栈中分层的总体描述 - 我前段时间在这里给出了答案:STM32 LWIP PPPos implementation

说到LwIP的sio层,可以在这里找到一个很好的文档:http://lwip.wikia.com/wiki/PPP。在通用 lwip/src/include/lwip/sio.h 头文件中也很好地描述了函数的行为方式。

示例 UNIX 实现,如果您觉得它有用,可以在这里找到:https://github.com/dreamcat4/lwip/blob/master/contrib/ports/unix/netif/sio.c