|
一、准备 ST例程文档关于lwip的介绍如下: 由此可以看到LWIP有三种API,在本文中,使用Raw API。 HTTP协议是建立在TCP协议之上的一种应用,本文用到的TCP Raw API如下:
& Z3 M3 N* ?% r W2 L! Q; |二、移植官方例程官方例程在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:
; k, ^7 Q- Y2 L2 @/ J8 A7 U - GET / HTTP/1.1
. l. v* X4 H8 t - Host: 192.168.2.8
/ O! l, T8 X% ^: E1 h- E' b# Q - Connection: keep-alive
$ ?% k8 _0 y# y1 O - Upgrade-Insecure-Requests: 1
* }/ S' v! J0 B0 C0 V) B$ ] - User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
7 D6 ~* p h J# s" s, V - Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.82 I2 Q2 h9 e) U1 r; v F: [: U) z$ A
- Accept-Encoding: gzip, deflate7 M- H1 W( v2 d! W5 z: F$ W/ i
- Accept-Language: zh-CN,zh;q=0.9
# r5 p) {( {( C1 m' x( m+ Q
7 G) {( u* E6 v1 v/ d) R% z: C- 7 e4 i! n' e5 n
- get msg from 192:168:2:194 port:55330:! C& s2 @/ }; d, G" O) V$ K
- GET /STM32F4x7_files/ST.gif HTTP/1.1" g% I+ j' l9 r! V
- Host: 192.168.2.8
* I7 D9 b T) c T! ?; Q$ C' { - Connection: keep-alive
, C; l1 ]& ], F" N% p' 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
! w7 s3 z3 X1 e% [ - Accept: image/webp,image/apng,image/*,*/*;q=0.8
( @. X, D" u9 m: x: b3 E - Referer: http://192.168.2.8/
$ \% o7 b( h" j) ] - Accept-Encoding: gzip, deflate- ^2 V z2 M0 |2 i8 `3 f8 @
- Accept-Language: zh-CN,zh;q=0.93 ]* e$ E: P, D5 S8 J" y. [. c
- ' j8 f* a4 s3 d y( \# P0 s5 @
1 {7 \* M# D1 y9 ~- get msg from 192:168:2:194 port:55331:3 ]$ A; d4 G( N. f
- GET /STM32F4x7_files/stm32.jpg HTTP/1.1. O: p1 V4 C5 x/ h
- Host: 192.168.2.88 ~7 y$ |* q7 p0 z& \
- Connection: keep-alive
5 B' E, g9 {& m6 R& v - User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.368 }* t$ k; K& K. t" N
- Accept: image/webp,image/apng,image/*,*/*;q=0.8. M9 @. y2 \9 F Q6 r- x* s
- Referer: http://192.168.2.8/0 i5 c# m7 D8 ?2 j! Y9 g
- Accept-Encoding: gzip, deflate( O9 a7 ?0 f( L, s- k
- Accept-Language: zh-CN,zh;q=0.9
) W' w. m! o& c: @; |! ` - 1 V Q1 r& `; {2 D( o, M4 l# P! s
- 6 t- c s w9 `2 D& V8 |; j
- get msg from 192:168:2:194 port:55332:
! F, N4 H' \, D, @4 e, H0 A, X: m) h9 Y - GET /inchtml-pages-stm32_connectivity_files/pixel.gif HTTP/1.1% H% c E: ~+ j1 I
- Host: 192.168.2.89 T8 X6 s7 \% q2 i+ z
- Connection: keep-alive
6 D1 m1 L% z% d: N& \/ s) 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
& ~5 q5 o; h4 u$ K) } - Accept: image/webp,image/apng,image/*,*/*;q=0.8
+ ~7 N+ G; k2 y* B9 w q+ G - Referer: http://192.168.2.8/$ r# @5 T: m4 o9 L1 \% V
- Accept-Encoding: gzip, deflate
8 L" {: `' x& f - Accept-Language: zh-CN,zh;q=0.9
3 X2 S& d4 \+ v# N/ _ - % v7 P" y0 t# S: E
) {9 S& _) j. M& S' }- get msg from 192:168:2:194 port:55334:% \! y7 a ]4 ?# Y
- GET /favicon.ico HTTP/1.10 X- k+ Z+ x$ q
- Host: 192.168.2.8 p0 x9 S: k# C( x A! F
- Connection: keep-alive( Z" E: Z) o" a* p; 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/ I) `2 Y7 `1 q6 B m# L, O8 J9 k
- Accept: image/webp,image/apng,image/*,*/*;q=0.8- g F9 Q0 U( E. F! D$ O5 Y
- Referer: http://192.168.2.8/. Z2 D( t: q& E5 G( F! ]. G5 p3 m; s
- Accept-Encoding: gzip, deflate% i% q. m/ j% T# B2 }
- Accept-Language: zh-CN,zh;q=0.9
复制代码 , R. ]0 O2 D1 b- l
由此可以看出,打开了网页服务器地址,会给网页服务器发送GET / HTTP/1.1命令,网页服务器会根据这个命令找到index.html,然后给浏览器返回网页数据。由于网页数据中又包含了一些照片资源,因此浏览器再给网页服务器发送 - GET /STM32F4x7_files/ST.gif HTTP/1.1
W: p! z. G) r4 F8 l3 [ - GET /STM32F4x7_files/stm32.jpg HTTP/1.1* [: s- ]7 b. @) Q
- GET /inchtml-pages-stm32_connectivity_files/pixel.gif HTTP/1.10 T8 n3 _8 P/ f0 O; D* k2 q
- GET /favicon.ico HTTP/1.1
复制代码
& R8 @4 U# B4 h A# s) f+ l, [8 m- e以获取照片资源。 6 Z. V! c4 D) ~" U( M9 v0 N: D
四、最后本文测试了网页服务器功能,能正常打开预置网页,后续开发嵌入式网页可以根据ST例程进行修改,同时加上了SSI和CGI可以做到一些简单的交互。 n- I1 c) J+ m4 [2 z9 _/ y
|