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

【STM32以太网在线培训】+ F769 WebServer

[复制链接]
Tcreat 发布时间:2017-7-23 12:11
本帖最后由 Tcreat 于 2017-7-23 12:13 编辑
$ w! d# N7 M* a+ G" n
  V! f* h# y3 l$ t       首先感谢社区和ST组织的这次以太网在线培训活动,因为当天是工作日,所以没有全程的在线学习观看,只是在上午开播时观看了一会,当时在线观看的人员比较多,而且气氛比较活跃,所以今天利用周末时间回看学习下,顺便利用手上现有的F7 Discovery测试下。            
( c; B2 n; n, E( p, l  k) D3 T        学习本身是一个循序渐进的过程,对应从未接触过以太网的初学者,一天的培训不可能到达具备实战的能力,但是可以让初学者快速的了解以太网的架构、组成以及工作机制,而且让初学者在后期的学习和实践中做到心中有数和有的放矢!6 }, c$ j  [; R2 Y7 i. F6 a2 ]
        经过一天的培训,从对以太网的未知到初步的了解和架构的认知,但是这些还是需要一定的时间去学习消化和实践,现在想要独立编程或者移植一个以太网工程可能还是有些心有余悸或者是心有余而力不足,但是为了巩固上午看的视频,还是要动手做点什么,于是开始找官方的例程,官方下载了STM32Cube_FW_F7_V1.4.0的固件库,里面有LwIP_HTTP_Server_Socket_RTOS的例程,编译后下载到F7 Discovery板,然后通过网络连接到电脑,电脑始终和开发板不能正常连接,同时开发板显示DHCP超时:
1.jpg

$ O# c4 ?( r0 E3 ]( K1 |1 Y
5 a& @0 S1 E# z       查看工程文件的readme说明,发现如果需要动态分配IP时,开发板是不能直接连接电脑的,需要将开发板连接到路由器自动分配IP地址,如果开发板和电脑直接连接电话,需要使用静态IP地址,同时要将电脑的IP地址设置在和开发板的IP地址在一个网段内的不同IP,既然找到原因后,那么就再次开启探索之旅:
. B; K) A! N0 A9 N% {
- B$ {' w0 r4 |3 y" H       方法一:将开发板接入路由器,上电后DHCP分配成功,同时电脑这边可以ping也可以直接输入开发板的地址浏览加载好的页面
8 }. B/ V8 k& X2 Y
2.jpg 3.jpg 4.jpg

9 `) u; }  c2 h! D" |+ S+ p$ U8 D/ b
方法二:将开发板直接连接电脑,因为官方例程默认的静态IP地址是192.168.0.10,所以这里需要将电脑的IP地址指定为192.168.0.X,这样才能保证开发板和电脑正常连接:
1.jpg 2.jpg 3.jpg

% Z0 D: f- O4 F9 r5 w+ |, q  N' p7 M, Q$ }3 ?
官方IP地址设置代码:static void Netif_Config(void)6 b! ^/ d; o& Z8 X' k- U$ ?7 S
{
3 e& V* m  V; J2 G  ip_addr_t ipaddr;% U% i' L8 l& p( i  [; J6 x
  ip_addr_t netmask;3 Z. b* S% J0 K( |
  ip_addr_t gw;        
* t$ D7 D6 S% k7 w, e' I0 D0 y' ]- }& j* V  C: @4 U+ ^
  /* IP address setting */( P: M. ?: U3 d
IP4_ADDR(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3);  d' p" I6 u: q1 Q: G$ L
  IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3);  _! ]/ |# I: o6 o4 K# j1 E7 C& O
  IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3);

$ d. e( _* I6 d7 m9 X( J! f) \3 E3 P# Y& ^) N3 g
  /* - netif_add(struct netif *netif, ip_addr_t *ipaddr,/ R* _# N8 A" ?6 n
  ip_addr_t *netmask, ip_addr_t *gw,) g% x, N" ~, h0 {8 E) N
  void *state, err_t (* init)(struct netif *netif),
+ U* B; C2 U* p# Q* I* H  err_t (* input)(struct pbuf *p, struct netif *netif))# k& `0 o. K- N' l
& N6 U1 e: M, |$ K5 E6 W! Z* K
  Adds your network interface to the netif_list. Allocate a struct
5 o+ M4 `: f$ }! i  netif and pass a pointer to this structure as the first argument.. i0 G+ r4 d) Y0 i: h9 I/ k' s
  Give pointers to cleared ip_addr structures when using DHCP,
8 q# B: o0 P6 w  or fill them with sane numbers otherwise. The state pointer may be NULL.& M  e: j4 p% [7 k6 a

  F- \5 e6 b% s% L* F  G  The init function pointer must point to a initialization function for1 B. r  h1 S, h' y5 D" C+ ~
  your ethernet netif interface. The following code illustrates it's use.*/
1 B* _2 h9 t7 e% b; b; M1 H& v
: i1 e+ t6 a4 c) B  D  netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);: G7 a+ R2 \8 [5 A% f

/ ~- a7 I8 K. k6 V* I  /*  Registers the default network interface. */7 |* G, i( d$ y! {
  netif_set_default(&gnetif);
' P! a  ]+ u+ ?# ]
' i1 N; P5 q0 y& H) a  if (netif_is_link_up(&gnetif))
) \% @1 L& j6 L1 h5 J  {+ L2 o0 @6 ?2 d
    /* When the netif is fully configured this function must be called.*/% e7 g) ^4 ~) {+ f
    netif_set_up(&gnetif);3 r! [* W& ]- c( {+ v
  }5 G3 n$ R$ s  U9 C3 y# E$ B+ E3 n
  else7 S9 v  V+ o# C+ n3 P: F
  {
# @  |5 \$ }) d' P) k+ H5 v    /* When the netif link is down this function must be called */7 x3 O; ^8 t& }+ }
    netif_set_down(&gnetif);
1 x* y$ Z3 B+ A" y* `8 T' f  }
7 q" i% n- v& ^5 w4 [}
+ z3 l  E+ b2 D' M  F5 r$ J" `0 j7 c' w
IP地址参数宏定义:
& P; W+ E+ W, p7 I6 y$ J* W7 Z/*Static IP ADDRESS*/7 T. T* E7 Z' E% k3 ^- K
#define IP_ADDR0   192+ Q# o1 \& b8 x+ t& c4 i
#define IP_ADDR1   168
- _! _1 x" S* j4 e; w  F#define IP_ADDR2   0
& C; }4 F1 _! u( v#define IP_ADDR3   10
  T+ G- @) Y7 X8 E5 ]# P( p: l  \& ]/ N: {/ d$ F
/*NETMASK*/
! D6 C) i0 K7 `#define NETMASK_ADDR0   2556 o. f" C& \* l* l7 v1 Y( ]( |3 A! S
#define NETMASK_ADDR1   255
8 h9 I3 r$ a& y( Z. ]4 w  n3 c#define NETMASK_ADDR2   2550 K3 z' I8 \' E+ n
#define NETMASK_ADDR3   0- u' N( R( S" v& J

- L  L% q  l; a& D9 B/*Gateway Address*/) }1 R. n) ]$ h6 _0 M! p0 M
#define GW_ADDR0   192' O3 ^& A1 P  K; ~- |# N9 @: @  `
#define GW_ADDR1   168, s; q& K' J9 N' ~$ M. k; @
#define GW_ADDR2   06 ~' `1 J  l" ?% i0 ^+ n
#define GW_ADDR3   1

$ O3 T6 K/ R- A8 O' V$ A
1 A( v/ S6 f. W/ z

' k) Y4 F- n8 R9 B  f7 ^

6 ^$ s; q4 g* b+ Z- G. T7 h; Z7 q至此官方以太网WebServer例程测试成功,这里不在上传代码,需要了解代码的 可以直接官方下载即可  : P- `  f/ I+ T+ g3 ?6 h

6 J& Y! J5 U8 h' L' _# N3 I
  i& u, O9 e0 g0 \
6 @+ E/ O% h1 ^# ?) `: O# l
赞 收藏 2 评论4 发布时间:2017-7-23 12:11

举报

4个回答
Stm32McuLover 回答时间:2017-7-23 12:47:52
哎呦,大神换图像了,差点没认出来
Tcreat 回答时间:2017-7-23 13:00:56
哈佛祖安智 发表于 2017-7-23 12:478 ?. _: Z; f9 @! i4 `8 D+ C. B8 ?
哎呦,大神换图像了,差点没认出来

# E4 i; F! u" P( x" l4 X; i
MrJiu 回答时间:2017-7-24 08:40:56
太牛逼啦!!!围观!!!
zero99 回答时间:2017-7-24 09:51:17
朱总辛苦了!
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版