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

【经验分享】stm32+lwip:网页服务器测试

[复制链接]
STMCU小助手 发布时间:2022-1-22 18:58
一、准备
ST例程文档关于lwip的介绍如下:
1358342-20180908134248433-1691113005.png
由此可以看到LWIP有三种API,在本文中,使用Raw API。
HTTP协议是建立在TCP协议之上的一种应用,本文用到的TCP Raw API如下:
1358342-20180908141416484-854611288.png

& Z3 M3 N* ?% r  W2 L! Q; |
二、移植官方例程
官方例程在stsw-stm32070\STM32F4x7_ETH_LwIP_V1.1.1\Project\Standalone\httpserver目录下,拷贝以下文件到我们工程:
1358342-20180908144711829-559064597.png
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官方例子的网页:
1358342-20180908144730414-639602941.png
三、打印网页接收数据
在httpd.c中的http_recv函数中增加以下黄色部分代码:
1358342-20180908144758307-491609248.png
然后当在浏览器打开192.168.2.8时,串口输出以下数据:
  1. get msg from 192:168:2:194 port:55329:
    ; k, ^7 Q- Y2 L2 @/ J8 A7 U
  2. GET / HTTP/1.1
    . l. v* X4 H8 t
  3. Host: 192.168.2.8
    / O! l, T8 X% ^: E1 h- E' b# Q
  4. Connection: keep-alive
    $ ?% k8 _0 y# y1 O
  5. Upgrade-Insecure-Requests: 1
    * }/ S' v! J0 B0 C0 V) B$ ]
  6. 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
  7. 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
  8. Accept-Encoding: gzip, deflate7 M- H1 W( v2 d! W5 z: F$ W/ i
  9. Accept-Language: zh-CN,zh;q=0.9
    # r5 p) {( {( C1 m' x( m+ Q

  10. 7 G) {( u* E6 v1 v/ d) R% z: C
  11. 7 e4 i! n' e5 n
  12. get msg from 192:168:2:194 port:55330:! C& s2 @/ }; d, G" O) V$ K
  13. GET /STM32F4x7_files/ST.gif HTTP/1.1" g% I+ j' l9 r! V
  14. Host: 192.168.2.8
    * I7 D9 b  T) c  T! ?; Q$ C' {
  15. Connection: keep-alive
    , C; l1 ]& ], F" N% p' V
  16. 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% [
  17. Accept: image/webp,image/apng,image/*,*/*;q=0.8
    ( @. X, D" u9 m: x: b3 E
  18. Referer: http://192.168.2.8/
    $ \% o7 b( h" j) ]
  19. Accept-Encoding: gzip, deflate- ^2 V  z2 M0 |2 i8 `3 f8 @
  20. Accept-Language: zh-CN,zh;q=0.93 ]* e$ E: P, D5 S8 J" y. [. c
  21. ' j8 f* a4 s3 d  y( \# P0 s5 @

  22. 1 {7 \* M# D1 y9 ~
  23. get msg from 192:168:2:194 port:55331:3 ]$ A; d4 G( N. f
  24. GET /STM32F4x7_files/stm32.jpg HTTP/1.1. O: p1 V4 C5 x/ h
  25. Host: 192.168.2.88 ~7 y$ |* q7 p0 z& \
  26. Connection: keep-alive
    5 B' E, g9 {& m6 R& v
  27. 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
  28. Accept: image/webp,image/apng,image/*,*/*;q=0.8. M9 @. y2 \9 F  Q6 r- x* s
  29. Referer: http://192.168.2.8/0 i5 c# m7 D8 ?2 j! Y9 g
  30. Accept-Encoding: gzip, deflate( O9 a7 ?0 f( L, s- k
  31. Accept-Language: zh-CN,zh;q=0.9
    ) W' w. m! o& c: @; |! `
  32. 1 V  Q1 r& `; {2 D( o, M4 l# P! s
  33. 6 t- c  s  w9 `2 D& V8 |; j
  34. get msg from 192:168:2:194 port:55332:
    ! F, N4 H' \, D, @4 e, H0 A, X: m) h9 Y
  35. GET /inchtml-pages-stm32_connectivity_files/pixel.gif HTTP/1.1% H% c  E: ~+ j1 I
  36. Host: 192.168.2.89 T8 X6 s7 \% q2 i+ z
  37. Connection: keep-alive
    6 D1 m1 L% z% d: N& \/ s) N
  38. 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) }
  39. Accept: image/webp,image/apng,image/*,*/*;q=0.8
    + ~7 N+ G; k2 y* B9 w  q+ G
  40. Referer: http://192.168.2.8/$ r# @5 T: m4 o9 L1 \% V
  41. Accept-Encoding: gzip, deflate
    8 L" {: `' x& f
  42. Accept-Language: zh-CN,zh;q=0.9
    3 X2 S& d4 \+ v# N/ _
  43. % v7 P" y0 t# S: E

  44. ) {9 S& _) j. M& S' }
  45. get msg from 192:168:2:194 port:55334:% \! y7 a  ]4 ?# Y
  46. GET /favicon.ico HTTP/1.10 X- k+ Z+ x$ q
  47. Host: 192.168.2.8  p0 x9 S: k# C( x  A! F
  48. Connection: keep-alive( Z" E: Z) o" a* p; z
  49. 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
  50. Accept: image/webp,image/apng,image/*,*/*;q=0.8- g  F9 Q0 U( E. F! D$ O5 Y
  51. Referer: http://192.168.2.8/. Z2 D( t: q& E5 G( F! ]. G5 p3 m; s
  52. Accept-Encoding: gzip, deflate% i% q. m/ j% T# B2 }
  53. Accept-Language: zh-CN,zh;q=0.9
复制代码
, R. ]0 O2 D1 b- l
由此可以看出,打开了网页服务器地址,会给网页服务器发送GET / HTTP/1.1命令,网页服务器会根据这个命令找到index.html,然后给浏览器返回网页数据。由于网页数据中又包含了一些照片资源,因此浏览器再给网页服务器发送
  1. GET /STM32F4x7_files/ST.gif HTTP/1.1
      W: p! z. G) r4 F8 l3 [
  2. GET /STM32F4x7_files/stm32.jpg HTTP/1.1* [: s- ]7 b. @) Q
  3. GET /inchtml-pages-stm32_connectivity_files/pixel.gif HTTP/1.10 T8 n3 _8 P/ f0 O; D* k2 q
  4. 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
赞 收藏 评论0 发布时间:2022-1-22 18:58

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版