硬汉嵌入式论坛

 找回密码
 立即注册
查看: 8499|回复: 12
收起左侧

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

[复制链接]

2

主题

5

回帖

11

积分

新手上路

积分
11
发表于 2019-4-15 15:41:33 | 显示全部楼层 |阅读模式
本帖最后由 北极熊 于 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









用STM32+FreeRTOS+SIM800C+LWIP+PPP拨号写的Ping应用例子!

用STM32+FreeRTOS+SIM800C+LWIP+PPP拨号写的Ping应用例子!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106702
QQ
发表于 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






回复

使用道具 举报

0

主题

105

回帖

105

积分

初级会员

积分
105
发表于 2019-4-15 18:06:32 | 显示全部楼层
向楼主学习。
之前就一直在考虑怎么把这些GPRS模块用稳定
尝试了自己写AT,也用过rtthread的at框架,感觉都有各种不足
PPP想了一段时间,一直没付诸实践
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

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

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

使用道具 举报

0

主题

105

回帖

105

积分

初级会员

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

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

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2019-4-16 16:01:39 | 显示全部楼层
barryxiao 发表于 2019-4-16 13:51
嗯。在rtthread里边用at_socket转换成socket操作之后也挺不错的。
但还是会出现经常性的tcp连接超时,按 ...

AT指令的封装操作起来过于繁琐,并且指令返回需要自己去判断,这点操作系统上使用势必有点臃肿!移植lwip的ppp后写tcp/udp之类的应用就如同在windows下,很方便,无需关心底层。但重要的是要掌握lwip的内存分配策略,负责会很容易造成系统崩溃!
回复

使用道具 举报

0

主题

105

回帖

105

积分

初级会员

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

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

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2019-4-16 21:13:53 | 显示全部楼层
barryxiao 发表于 2019-4-16 18:55
内存分配倒还好说。重新定义一个链表式的块内存就可以了,我记得armfly也有自己写的内存分配策略,还挺好 ...

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

使用道具 举报

3

主题

38

回帖

47

积分

新手上路

积分
47
发表于 2019-4-18 14:49:27 | 显示全部楼层
楼主,有空研究下模组使用RL-TCPnet的PPP拨号连接,最近搞的一头雾水,ppp回复connect,后面发送数据提示失败
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

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

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

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2020-6-24 21:13:47 | 显示全部楼层
你好,方便分享下源码吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106702
QQ
发表于 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?m ... 6082&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2021-3-23 11:54:12 | 显示全部楼层
请问楼主,MCU用的是串口还是USB接口和SIM800C相连的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 09:31 , Processed in 0.344822 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表