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

时间:2018-05-08 13:10:09

标签: stm32 gsm uart lwip ppp

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

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

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

我深入搜索网络,找不到包含LWiP PPPoS Server的特定示例,以便STM32F与Telit GL865 GSM进行通信。我见过像

这样的代码
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循环)

亲切的问候

1 个答案:

答案 0 :(得分:1)

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

虽然我没有STM32的确切实现,但应该很容易自己实现它。它的实现方式可能(或可能不)取决于您自己的配置,例如是否使用FreeRTOS及其队列/互斥量来处理UART通信。有关所有组件通常如何在TCP / IP堆栈中与PPP相关的整体描述 - 我在前一段时间给出了答案: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