北极熊 发表于 2019-4-15 15:41:33

STM32F407上FreeRTOS+Lwip用SIM800C实现PPP拨号上网

本帖最后由 北极熊 于 2019-6-11 11:33 编辑

单片机:STM32F407ZGTx

GSM模块:SIM800C

IP协议栈:Lwip-2.1.2

操作系统:FreeRTOS V10.1.1


实现原理:采用SIM800C内嵌PPP及Lwip对PPP拨号的支持,使用PPPos进行拨号上网。可实现TCP、UDP及Http等通信。

/*
* Lwip Initfunc
* ===================
*
* Initialize the TCP/IP protocol stack
* Creat a new PPPos interface and connect...
*
*/
/* Lwip Initfunc */
void lwip_comm_init(void)
{
      /* Initfunc a function to call when tcpip_thread is running and finished initializing */
      tcpip_init(modem_init,NULL);
      
      //Create a new PPPoS interface
      ppp = pppos_create(&ppp_netif, pppos_output_cb, ppp_link_status_cb, NULL);
      
      /* Auth configuration, this is pretty self-explanatory */
      ppp_set_auth(ppp, PPPAUTHTYPE_NONE, "", "");

      /* Set this interface as default route */
      ppp_set_default(ppp);
      
      /* Initiate PPP negotiation, without waiting (holdoff=0), can only be called if PPP session is in the dead state (i.e. disconnected). */
      ppp_connect(ppp, 0);
}


源码整理中,技术交流QQ:1018062633









eric2013 发表于 2020-6-25 08:49:01

基于RTX5+RL-TCPnet V7.X的PPP方式驱动4G模块EC20和2G模块M26的案例

http://www.armbbs.cn/forum.php?mod=viewthread&tid=96082


https://img.anfulai.cn/dz/attachment/forum/201912/26/105818u8ynnrssbso3sdid.png
https://img.anfulai.cn/dz/attachment/forum/201912/26/105819avs611vv1fhiize6.png
https://img.anfulai.cn/dz/attachment/forum/201912/26/105819sodwg7ngzxi3xnxw.png

barryxiao 发表于 2019-4-15 18:06:32

向楼主学习。
之前就一直在考虑怎么把这些GPRS模块用稳定
尝试了自己写AT,也用过rtthread的at框架,感觉都有各种不足
PPP想了一段时间,一直没付诸实践

北极熊 发表于 2019-4-16 09:27:47

barryxiao 发表于 2019-4-15 18:06
向楼主学习。
之前就一直在考虑怎么把这些GPRS模块用稳定
尝试了自己写AT,也用过rtthread的at框架,感觉 ...

有空可以尝试一下!我也是最近没事再了解!以前在裸机下用的AT指令,后来学习FreeRTOS后觉得操作系统上要是在用AT的话就显得太繁琐了!应该向windows那样直接socket操作!

barryxiao 发表于 2019-4-16 13:51:52

北极熊 发表于 2019-4-16 09:27
有空可以尝试一下!我也是最近没事再了解!以前在裸机下用的AT指令,后来学习FreeRTOS后觉得操作系统上要 ...

嗯。在rtthread里边用at_socket转换成socket操作之后也挺不错的。
但还是会出现经常性的tcp连接超时,按经验来看3s没有回应就铁定失败,但失败时模块必须等40s才能继续下一条操作,这一点简直能把人逼死

北极熊 发表于 2019-4-16 16:01:39

barryxiao 发表于 2019-4-16 13:51
嗯。在rtthread里边用at_socket转换成socket操作之后也挺不错的。
但还是会出现经常性的tcp连接超时,按 ...
AT指令的封装操作起来过于繁琐,并且指令返回需要自己去判断,这点操作系统上使用势必有点臃肿!移植lwip的ppp后写tcp/udp之类的应用就如同在windows下,很方便,无需关心底层。但重要的是要掌握lwip的内存分配策略,负责会很容易造成系统崩溃!

barryxiao 发表于 2019-4-16 18:55:56

北极熊 发表于 2019-4-16 16:01
AT指令的封装操作起来过于繁琐,并且指令返回需要自己去判断,这点操作系统上使用势必有点臃肿!移植lwip ...

内存分配倒还好说。重新定义一个链表式的块内存就可以了,我记得armfly也有自己写的内存分配策略,还挺好用的,基本上可以解决内存碎片的问题

北极熊 发表于 2019-4-16 21:13:53

barryxiao 发表于 2019-4-16 18:55
内存分配倒还好说。重新定义一个链表式的块内存就可以了,我记得armfly也有自己写的内存分配策略,还挺好 ...

lwip有自己的内存管理方式,无需自己分配!我的意思是他内部模块的内存分宏的定义要掌握!

也许在明天 发表于 2019-4-18 14:49:27

楼主,有空研究下模组使用RL-TCPnet的PPP拨号连接,最近搞的一头雾水,ppp回复connect,后面发送数据提示失败

北极熊 发表于 2019-4-26 10:11:53

也许在明天 发表于 2019-4-18 14:49
楼主,有空研究下模组使用RL-TCPnet的PPP拨号连接,最近搞的一头雾水,ppp回复connect,后面发送数据提示失 ...

按照你的说法应该是接口没有对接好导致的!

lanzi668 发表于 2020-6-24 21:13:47

你好,方便分享下源码吗?

eric2013 发表于 2020-6-25 08:48:58

lanzi668 发表于 2020-6-24 21:13
你好,方便分享下源码吗?

基于RTX5+RL-TCPnet V7.X的PPP方式驱动4G模块EC20和2G模块M26的案例
http://www.armbbs.cn/forum.php?mod=viewthread&tid=96082&fromuid=58
(出处: 硬汉嵌入式论坛)

return_0 发表于 2021-3-23 11:54:12

请问楼主,MCU用的是串口还是USB接口和SIM800C相连的?
页: [1]
查看完整版本: STM32F407上FreeRTOS+Lwip用SIM800C实现PPP拨号上网