一、准备 ST例程文档关于lwip的介绍如下: 由此可以看到LWIP有三种API,在本文中,使用Raw API。 HTTP协议是建立在TCP协议之上的一种应用,本文用到的TCP Raw API如下: 1 `- I* N6 j. L" A3 M7 L5 F
二、移植官方例程官方例程在stsw-stm32070\STM32F4x7_ETH_LwIP_V1.1.1\Project\Standalone\httpserver目录下,拷贝以下文件到我们工程: fs.c/h是文件的操作 fs.data.c/h存放了网页的数据 httpd.c/h是网页服务器 httpd_cgi_ssi.c 是cgi和ssi的处理 将httpd_cgi_ssi.c中关于硬件操作的代码删掉,或者找到宏LWIP_HTTPD_SSI和宏LWIP_HTTPD_CGI将SSI和CGI功能禁掉,然后在主程序中增加httpd_init()。 上电运行后可以看到ST官方例子的网页: 三、打印网页接收数据在httpd.c中的http_recv函数中增加以下黄色部分代码: 然后当在浏览器打开192.168.2.8时,串口输出以下数据: - get msg from 192:168:2:194 port:55329:
" O3 \7 W- P9 o; u% p8 J/ Y! \ - GET / HTTP/1.1+ Z% D2 [2 `' y6 H( }. y
- Host: 192.168.2.8' o5 N+ t' s i$ q
- Connection: keep-alive& q- x9 v' E. J; V K
- Upgrade-Insecure-Requests: 1
9 A0 A. m. K9 J" {. J! z) z - User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
0 G# t: @' P) u. l2 Z - Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
" M& ^4 d; |& Z/ K7 k- y - Accept-Encoding: gzip, deflate O h4 x* j1 T: p
- Accept-Language: zh-CN,zh;q=0.9' T; m. N3 w' n/ o8 H+ I+ e
/ u7 H% u' Z8 A- 5 Z S5 \' ?+ v# L- d: b1 z+ d/ W
- get msg from 192:168:2:194 port:55330:
( o6 e! r8 l8 s, W - GET /STM32F4x7_files/ST.gif HTTP/1.1
6 I' @0 I( m* v, b9 L+ W9 L$ G - Host: 192.168.2.8: j6 d) E! g! Z# S
- Connection: keep-alive
% t' e% Q0 [, V: { - User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
3 y/ _ @* J6 L$ I U4 t0 \ - Accept: image/webp,image/apng,image/*,*/*;q=0.8! h% x$ N% F r, z9 A& R
- Referer: http://192.168.2.8/
! l! W1 X& O3 o- I - Accept-Encoding: gzip, deflate* W4 r: J4 ~# O2 X
- Accept-Language: zh-CN,zh;q=0.93 q6 p9 }0 g1 d# B/ I p
I! ]) j3 v/ D/ x2 H ]& v
' ]+ z, P/ d" ]+ ~0 E- get msg from 192:168:2:194 port:55331:1 O: K( @9 K _* V& k
- GET /STM32F4x7_files/stm32.jpg HTTP/1.1
; ^ W2 k) E% t- O( C - Host: 192.168.2.8
. |* k& E- v, v) M2 i - Connection: keep-alive
H/ a5 Z! C% A2 q - User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
4 I! u; q# O! b - Accept: image/webp,image/apng,image/*,*/*;q=0.8
! U0 e& F: Y# d' y$ \ - Referer: http://192.168.2.8/
+ {/ E H- R1 l# ~ s% W - Accept-Encoding: gzip, deflate
. u1 j* k& J! G' e4 ^ - Accept-Language: zh-CN,zh;q=0.9
2 W, m4 o f+ E( z" c6 _8 O7 z - e5 q' l Y, e. e6 h# A3 n
/ t* J0 p% T4 R4 Z4 ], a' L- get msg from 192:168:2:194 port:55332:
" H. }( q O0 _' G; E1 j - GET /inchtml-pages-stm32_connectivity_files/pixel.gif HTTP/1.1
E6 r3 f# _% N9 v" v - Host: 192.168.2.8
( d. M1 B" {. F% G4 O, _4 B2 h. U - Connection: keep-alive& g0 o8 s/ G% W8 N
- User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
0 a8 w: D [ H" x! |( { - Accept: image/webp,image/apng,image/*,*/*;q=0.8
7 b" i `% q, W9 b - Referer: http://192.168.2.8/* C \, T) P- {
- Accept-Encoding: gzip, deflate
3 d4 d d# w$ e8 S. L k% N - Accept-Language: zh-CN,zh;q=0.90 Q! n9 L$ F+ `! u5 |# y4 m
* j0 z1 h9 ]" P! W. N2 S- + u# L( y$ g; U& u: Y
- get msg from 192:168:2:194 port:55334:2 U# X+ q: H. h. Z. I: Q- m0 m2 V
- GET /favicon.ico HTTP/1.14 C4 c! F% Q+ y6 ^
- Host: 192.168.2.8
! C# g" S3 H! A! Q6 V+ B - Connection: keep-alive
$ Y: C8 e3 M( q* ]4 K/ g- T+ X - User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36+ W( \' V9 [ _% Y# D0 C% Y9 _
- Accept: image/webp,image/apng,image/*,*/*;q=0.8* a% S$ b" U: g+ S, M1 _4 [1 `
- Referer: http://192.168.2.8/- ]' ]. g" w/ v3 X
- Accept-Encoding: gzip, deflate
/ X8 b" o0 b0 x& ^5 l5 Z8 m9 I( v4 q - Accept-Language: zh-CN,zh;q=0.9
复制代码
# U: x; D' D) s1 O$ u由此可以看出,打开了网页服务器地址,会给网页服务器发送GET / HTTP/1.1命令,网页服务器会根据这个命令找到index.html,然后给浏览器返回网页数据。由于网页数据中又包含了一些照片资源,因此浏览器再给网页服务器发送 - GET /STM32F4x7_files/ST.gif HTTP/1.1
, g- F4 T9 w% Q+ f' m! ]1 C( F - GET /STM32F4x7_files/stm32.jpg HTTP/1.1! N& U1 K% p5 d0 H
- GET /inchtml-pages-stm32_connectivity_files/pixel.gif HTTP/1.15 |0 }+ [3 ?0 M1 g$ }$ {" H
- GET /favicon.ico HTTP/1.1
复制代码 + S7 _; {4 [( W
以获取照片资源。 & i: R) F1 K0 ~) h" P* F/ I
四、最后本文测试了网页服务器功能,能正常打开预置网页,后续开发嵌入式网页可以根据ST例程进行修改,同时加上了SSI和CGI可以做到一些简单的交互。 ! v, v) e5 T. C5 S6 w6 D" g
|