你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

简单的状态机框架,让所有人快玩转WIFI以及GPRS模块  

[复制链接]
技术范儿 发布时间:2016-11-21 13:40
     前段时间,在NXP帮别人简单的封装了一套ESP8266的WIFI的库,直接用的AT指令挂到单片机上面跑的,临时做的用的是STA模式,TCPClient,由于买的模块各种问题(市面上很多ESP8266的模块,买回来请注意把指令都测试一下),连不上路由,在社区共享给后也没有人提出反馈。。。。。。所以临时就这么搁置了,指令通过串口测试了各个状态之间切换正常。不保**完没有BUG,但是提供了一个简洁的状态机框架,轻松改下即可用到GPRS、蓝牙等加他AT指令集的模块,希望对大家有帮助
9 J# ~- ~. v% s. q

ESP8266.zip

下载

12.23 KB, 下载次数: 583

源代码

赞 收藏 3 评论23 发布时间:2016-11-21 13:40

举报

23个回答
会飞的雪花 回答时间:2017-9-22 22:35:11
void ESP8266HalRevData(uint8_t inPut)3 Y8 {9 z* L9 Z
{
; W. h% x6 A* W! X& i+ z7 ^" i+ j      
- ?2 M  `& ^* O8 x, I8 a        if(ESP8266Step.Step < IDLE)
% O) p# u6 t" ^0 @# X8 a- b6 q        {5 {) i8 S& b6 F( @5 J
                ESP8266Step.ReveBuff[ESP8266Step.HalRevSize++] = inPut;4 T; V6 v9 N5 N- _
        if(ESP8266Step.HalRevSize == MAXREVESIZE)
4 Q, n: _  k: g: y% u& ~" o$ a        {
; F- z6 r8 F( }, `, P4 Z. X/ w/ U            memset(ESP8266Step.ReveBuff,0,MAXREVESIZE);; C" y5 a0 S& b* O
            ESP8266Step.HalRevSize = 0;$ w2 r9 X+ p9 A# f  ]7 x6 X
        }
3 ~$ O9 Y4 E* q% {; M+ x, Q        }
3 G2 w1 o* R5 l5 N" l, m* f        else if(ESP8266Step.Step >= IDLE)
  D+ L2 P& k6 }, j7 M/ J        {& p, o1 q3 t% C3 p9 |: ]
        TCPTransmission.TcpRxBuff[TCPTransmission.TcpRxSize++] = inPut;' n' O8 P5 J% S  {% O

& h  y  g& R# k; X4 L! t
$ l, u# o; y) U3 w1 l3 k            TCPTransmission.TcpRevTime = GetTime();: W( m! w% @: I1 Z! ?- A
        TCPTransmission.RevFlag = 0xff;! i  ?7 w/ {! a9 c# X- n
        }+ n" H1 I) F9 \$ V- {& A, ~
               
8 n+ c& f9 ]* l+ X% u* K" f; L}- c& r1 i1 `7 t6 G5 `" W
//接收数量没做限制,有数组越界风险。
; o$ ^5 }! a# r//增加限制及处理1 i/ t6 ~/ L  j
新代码如下" _4 W3 b" j. X* X1 w8 @' I
void ESP8266HalRevData(uint8_t inPut)
* b) |) H5 a/ e3 t{
) q! s' P# g. ]5 j8 z      $ T7 U" w( `% q% Y# ~: p% c6 H' W4 N: ~
        if(ESP8266Step.Step < IDLE)
# s. W1 f8 R  k8 N# `8 |: r        {
$ w0 I- f+ _+ H; d( r                ESP8266Step.ReveBuff[ESP8266Step.HalRevSize++] = inPut;8 u9 ], N* [* o6 l
        if(ESP8266Step.HalRevSize == MAXREVESIZE)
/ Q. J+ R! w4 w. [! o' ]4 S4 s        {
% p- N/ D; b. d1 w) i5 ]5 C            memset(ESP8266Step.ReveBuff,0,MAXREVESIZE);- w" z& v7 p$ @* u$ f  s
            ESP8266Step.HalRevSize = 0;
/ D6 m0 _1 r7 _. |6 H% I3 n' s        }1 t/ O% Y5 M' u; L
        }5 B% l6 B5 N' C5 Y& H
        else if(ESP8266Step.Step >= IDLE)
& w+ c7 \# {* v1 A3 U" e1 K; V) @        {0 B  V: i" B6 R/ ^5 m
        TCPTransmission.TcpRxBuff[TCPTransmission.TcpRxSize++] = inPut;/ ?# |/ C4 d& N: `+ w( q
                    if(TCPTransmission.TcpRxSize >= MAXREVESIZE)" C+ _1 r8 |  H- O- V( A
        {
1 H. l/ n7 K+ Q; I# A  ]            memset(ESP8266Step.ReveBuff,0,MAXREVESIZE);. V/ U* P/ q5 _: B4 O* ]/ E
            TCPTransmission.TcpRxSize = 0;2 N4 L. k( R( U' L" f
                                          TCPTransmission.RevFlag = 0;
0 Y& X# Z# g4 k  J        }* J6 ?1 o9 q! ]2 i+ N
                                else
- R3 ^- h5 z+ z5 q. y; L/ r                                {
' a1 k& W+ m: c5 g$ [                                        TCPTransmission.TcpRevTime = GetTime();2 b. {1 t+ ~/ M
          TCPTransmission.RevFlag = 0xff;% v! B1 _! w; Y
                                }             
# w0 y' v" w: v* c. X- r        }               
. H% s& ?( z$ l: {( S}
5 H8 T. I7 P" v( G
/ {& R1 N2 N' O- [6 h欢迎批评指正
4 O8 e! i, F# j, b' U; y! Q+ q5 f$ a  m- f9 V" L" v$ {0 r
技术范儿 回答时间:2016-11-21 13:58:39
zhangxu56726 发表于 2016-11-21 13:53
! _  u/ J+ I% h5 U3 c8 K7 M请问,你的这个能连上路由吗?

$ \& q9 |- ]+ D1 J3 i这套是我根据买的模块测试的一个流程。我的模块偶尔可以连上,连不上的时候咋都连不上,不知道是不是模块问题,你可以试试,有BUG就自己改吧,年底了项目紧没时间折腾了
liuxy236@tom.co 回答时间:2016-11-21 22:37:27
好东西,顶                       
zhangxu56726 回答时间:2016-11-21 13:53:20
请问,你的这个能连上路由吗?
mhl920 回答时间:2016-11-21 16:16:22
谢谢分享
peter001 回答时间:2016-11-22 00:49:11
谢谢分享
zengyi703-16313 回答时间:2016-11-22 07:12:28
谢楼主分享
sun2005 回答时间:2016-11-22 08:21:24
谢谢!分享, s& O& Y9 k8 E4 u5 Q7 d
andypanfan 回答时间:2016-12-15 19:37:21
谢谢分享
huaiqiao 回答时间:2016-12-15 20:51:23
改天用esp8266的小黄板看看呢
scx111 回答时间:2017-3-2 16:44:54
谢谢分享
zbber 回答时间:2017-3-2 20:46:10
谢谢分享,谢谢楼主,支持分享" d) ^. s, z6 E5 F/ R
yoghen 回答时间:2017-7-27 11:19:14
AT 指令不使用状态机,则同时处理的功能就比较单一。使用状态机,我又头大。谢谢分享
me浩 回答时间:2017-7-27 11:47:56
7 O6 t: \9 n; P) l1 C( F: ?
谢谢分享
会飞的雪花 回答时间:2017-9-22 20:32:45
感谢,这个状态机我看懂了,非常的全面。
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版