lgm*_*m42 3 c++ ppp stm32 lwip
在我的STM32F7上,我必须使用串行端口连接3G调制解调器.我可以使用AT命令与调制解调器通信.我想使用LWIP的PPPos(PPP over serial)库进入PPP模式.所以我仔细看看官方文档
http://lwip.wikia.com/wiki/PPP
和
https://github.com/tabascoeye/lwip/blob/master/doc/ppp.txt
我理解指南,但我真的很惊讶没有串口的实现示例.实际上,我认为有很多调制解调器都有串行接口,所以我想我可以很容易地找到一个使用的例子.
有人已经这样做了或有一个例子吗?
虽然我无法发布我的示例,但是在将所选的TCP/IP堆栈与其PPP驱动程序集成时,一般的想法是在我使用的所有串行调制解调器和所有TCP/IP堆栈中是相同的.
通常如您所述,您首先使用AT命令配置调制解调器 - 例如检查SIM卡是否存在,是否需要PIN,如果需要指定PIN,检查它是否已在网络中成功注册.可能会读取其他信息数据,如IMEI,IMSI以及诊断数据:信号质量,BER等.一旦完成,您将调制解调器切换到"数据"模式(参见ATD*99),等待调制解调器响应到该命令并将责任传递给TCP/IP堆栈,此时调制解调器开始讨论PPP.
当您将调制解调器与堆栈集成以便它可以与之通信时,我遇到的实现都需要为堆栈实现某种形式的低级API函数.对于LwIP,你在"PPP over serial"部分中链接的wiki页面,很好地描述了这些函数应该如何表现.因为TCP/IP堆栈只是一个与特定硬件无关的软件库,它们几乎可以在任何东西上运行(假设有足够的资源),所以并不总是提供特定的API实现,如所讨论的那样 - 必须有大量的它提供任何价值的例子.虽然如果你在谷歌周围寻找它,你可能会发现有人为你亲自使用的MCU做过这件事.假设您已经使用AT命令完成了使用调制解调器成功通信的部分,除了使用您已有的发送/接收功能之外,它应该不会更多.可能需要进行一些细微的更改,例如调整其行为(同步 - >异步或反之亦然)或将接收的数据重定向到TCP/IP API接收函数而不是AT命令解析器.尽管如此,大部分必要的努力工作都应该已经完成.
一旦TCP/IP堆栈接管,您将使用提供的堆栈PPP API继续使用调制解调器.对于LwIP,请参阅以下函数:pppSetAuth,pppOverSerialOpen.这些将导致堆栈内部通过PPP处理与调制解调器的必要通信:LCP,PAP/CHAP,IPCP.一旦完成该部分(从网络中检索IP配置数据),它就变得透明 - 它如何运行 - 它成为一个(可能是多个)网络接口,并且您可以像使用任何其他网络接口一样使用它,例如使用套接字API.