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

STM32H723+Lwip+ETH+CUBE 完整配置

[复制链接]
STMCU小助手 发布时间:2022-12-16 12:00
开发环境:, n' W9 P6 Z* f
适用CUBE版本:STM32CubeIDE 1.9.0 及以上% @. x) `5 m$ W+ ^. B1 F
stm32芯片型号:H723ZET6
' U% X( \- H* z# J) o$ q& X9 S$ U+ M; M) R. z2 L
一、配置部分
1 b% k  O& m! K4 A* x+ P9 O(一)常规配置,RCC和SYS3 W. N. g: _7 w$ V( g
RCC启用外部高速时钟
7 r, I& Q: ~: u7 w7 a
& N, `1 N: d0 D( S# i
682d9955e9cf43a0a65d9b4e456132fc.png
- N. n( I$ S( @4 j! M1 p* C' l2 }8 H4 X3 l2 g& m" B3 z4 b6 ?' B. c
(二)串口

6 q% G6 |+ Z/ e0 u+ j6 s0 o串口的配置和代码实现本文不加以说明
( S: J  A  w$ L: N8 d3 n
, |1 E% m* |9 B$ F* ]1 v3 d/ I
f8c167d859944e54baa895907399183f.png
3 m: I6 E. v5 t1 \- t2 g: i
  I( X2 N' l2 @. H. s* \
  X8 |- o8 b  [; U
(三)ETH配置' i/ Z- p" Z$ P8 S  V, H# D& @
MAC随意,不必和图中一样* `8 o6 b5 a; D

; R- }* `) ^- w/ ^
5ea8cef005dd40baafdbecdfed7c3da1.png $ X' J+ O5 u# z% U: ]3 s' O% ^/ i
4 D! T4 }! e6 ]0 X3 L, z

6 V9 z% S( }; `$ X2 |(四)LWIP(重点来了)
$ P+ `, I, Z! g1 R; X+ }" [" b% A首先是LWIP的常规配置,设置IP,其他默认。
: `3 s: n( n$ l$ I$ m# y: M7 w/ M" b: b: ~9 a. P! Z2 i, z
8d1d230137ec469b994b80d163e9e888.png
: d# }2 Z' ?( w3 |) G1 X
  Q5 B# t2 K, S& H
' g( y  A" h; d
排坑一:H723系列不同于H7系列,官方库默认配置是0x30044000,我相信有不少朋友试过:代码编译正常,烧录正常,但是代码一执行就进入Handler。这是因为H723的内存不同于其他H7系列。H723的RAM_D2的地址范围是0x30000000~0x30008000,而其他的H7空间比这个大得多。/ W  R; t4 ]+ ?+ q+ }. V' A

( s' f- O, I5 h9 p
ef39f745958b4784bdb3100a262af769.png ' P3 t& n3 L# C6 A6 w

5 Z, ?2 f" M9 S! g& {' o  c然后注意LWIP_NETIF_LINK_CALLBACK(检测网线插拔的)要使能就行,其他配置默认" c0 N: W: a; a5 p$ g$ r
- ^( t* J! G" h; a  c9 h2 _- u' t8 K: {( C
f53768e37e804931ac641cac44c4cc48.png
8 I8 |' `( `* F  T  p) _+ ^' J; _+ r- Q
3 {  g9 I$ j3 p& M( s排坑二:你实际用的PHY不一定是LAN8742,但官方配置就是默认且必须选择LAN8742,恶心死我了,所以到时要去修改它源码的PHY地址,后面会说到在哪里改。$ x& E' K! J  U) {0 `
$ w3 L# s% g+ T  C
75303c76a1a8446085c396d2315ff064.png
+ I  ]# O1 q+ @; w9 j

- B6 }; A5 A% y- r8 y然后这里也默认就行" W& _, W( p, R5 r; b2 Q+ J
4 Q- p; f  k0 P+ ^- j( k$ R) \- w
4117b0796281493f8dc8704fd96a01c0.png 1 V% r8 s3 S& B
; ^% u- D2 ~" {/ a
(五)PHY的复位引脚配置8 k' F+ T& `0 Q
我看很多教程都没详细写这一步,经常不知道这个复位是哪来的,实际上是必要的,除非硬件上设置了自动复位。设置一个引脚为输出模式,常态高电平。(具体哪个是复位引脚要看你们自己的硬件设计)
4 a& r% h! w6 L/ o: M; Q8 I- B9 R! B9 \+ A* O8 P
269af4c945d54d74b1e7b7e76abf5790.png 6 X  k2 `  }$ ^- P
& S% w1 u, Y+ C- t1 n9 e
并且常态设置为高电平6 G8 R" q: f0 Y. O

% u4 y2 w7 ?! e2 w- B7 l
4534a37853b746ac891621786877ba75.png * \# l7 ~- {1 |: B* r, F, B. h

# F$ e. C2 [7 W! W  y(六)MPU配置
4 ^; ?. O$ O  o. Z6 H排坑三:H7系列的芯片想用LWIP必须配置MPU,而H723的配置与其他H7系列又有些不同,但哪里不同不需要管了,按我下面配置就完事* [2 i+ l9 w0 g; r2 j) U

1 J6 T8 ?1 R) h( f
410bbedee33847fea39d13c5e0d74f78.png $ R. P  J2 m6 [. p! Z7 m; g
1 ~- I9 ^7 M- r& N$ g& [
就这两个
% p* _) M$ j- p* z
; Q8 d" P* N  h( D
94279f8d188a4053aa74ba32c539f1ad.png
) X- X9 C5 m+ ^& V7 [
6 U+ a6 h% K2 S2 {; U8 S' t- n) H
(七)时钟树配置' D1 A0 ~) _7 @5 V
这个没啥好说的,常规操作。2 F; z3 a  }& a

% C8 D6 S9 D0 S$ d8 q3 F3 z
f28a9fe3db8e4049a82fe04119718839.png
4 E0 y& S1 F( J; W, V3 \! Y. m
0 {' W0 ?* `8 d+ T+ ^(八)生成代码
- E" t% L9 S5 l( z7 J; l; Q4 O, }这里可以改大点
" f! Z& Y5 |. ~+ r5 S8 H2 ?6 T7 Y0 x* {  }" F+ R; t
0a5246b5c9cb4bf3a225dd9548e65686.png
+ K' M2 P8 ^0 L
5 K4 G; U/ i7 E4 ~  N6 ?; l然后勾选划分模块
9 }& {$ C  w+ u; ?; E( D" m, u9 y, a1 y; n$ R
5f51d9a5ab004353a8ebee1b01840af8.png 4 _! m% A' v8 x; b" c6 b

2 E1 M' X2 x! M1 U保存后就可以生成代码了。后面来到代码部分:' y9 J1 n: t  J6 P

& @4 z# Z: x$ v; d. q% I* s5 U. R

" e( ]* r- f; ]! d1 L$ J二、代码部分
+ \7 d! q3 A6 ^  W: h: |(一)main函数的修改
( d7 f. U7 B) {0 m% K1 v( H, }使能D2SRAM1时钟:4 q' a2 W3 `6 t
& {! Q9 L, q% W, c+ g9 M% u
5c020495c3e646a6bea6538a894f09a7.png - B" I0 L2 \3 e& ]& X5 U' M& O

6 i) B1 D2 U4 ^0 U后面再加上这几行,清空DVache和PHY复位3 o0 @1 Y. G2 d: Y3 F

$ ?4 @5 n; F- U* @
33b17d8e956e4b48bf8db8b1c305b39e.png 1 X/ Z  y& d2 a0 v

* P3 g7 c1 P2 K9 x7 Q当然还有MX_LWIP_Process(),加在循环里面1 G0 Z* J+ D% y& n# e8 J( ^) o
1 A. b2 C9 c: G% `/ g& v
fcc193bfe8e544b196813935cebbb6fe.png 1 x) r( m; B: x
! I& J6 X# t8 v
$ ~0 n+ Y" L: S( s5 f) c# i# B
(二) 修改phy地址/ b1 y( S+ E* W
因为我用的phy地址是0x1,所以需要修改才能用,在这里修改:
+ \* z6 [! I% p+ e( j
9 \; L9 T5 t; p* K2 H7 u
fbb3f33ead9f477a8e413962a5b6127a.png
# \0 ]' b  U+ G. I+ C3 D, v
9 m* x. l# m$ K+ [' m

  d9 x2 d1 l/ R( c/ H9 f2 s找到函数LAN8742_Init(lan8742_Object_t *pObj)
7 @' l6 y; h7 `$ T# A% e在这个位置,强行修改phy的地址为0x1,很不好的是如果重新配置了ioc生成代码,又要重新在这里添加修改
# f- t0 _. Z/ |+ o1 H) g" f* S9 C) Q
( [* [! m8 i& x! G; A% c3 n
dc68a6399c2f4bea8a802e6ec2d9fc47.png
: h2 C8 ~% V2 O- j- M  O, A; [7 a2 z" r) e' }8 `! ]  F

& l# f) F$ Q8 Q8 y0 \% R(三)修改ld文件
9 ]9 F6 d; Q* e很多人都不知道要改这里,少了这里不管怎么样配置都无法正常使用以太网,巨恶心,就是这个文件:
6 t% F; a* R- d# u; J0 p% j
5 [% O" Z2 `( m1 F( q
5c78f4fa39cb438da4c8763446d9bd97.png
$ k. c+ W; t9 q
* w: @8 |: u; O& I0 ~) L
' d' L4 d* s6 v/ G7 ]( D& |
拉到最下面的这个位置,添加以下代码(目的是将lwip的内存放进RAM_D2里面):
, f* [3 v( t$ s4 a# {
" J' o. G' B7 ~5 a
afe96e76510343a4b3ecfe18adae5f17.png
1 {' V( B% Z; z
( c# w( Q! G8 s; d# B到这里,所有的配置就完成了,可以编译烧录,尝试ping网络:
* u5 d' A4 k! r* X. r, e3 V4 z9 A- K3 y! ?/ h! \, I/ e
8ea813603ac14c45aa277d503fe3c800.png
& E5 ^8 G6 i# u1 f8 F: f# K$ A
; v+ W3 i  x2 R+ E搞定。& ]! X( |: H, v
————————————————
4 {5 ]6 L, ~3 q/ }2 u2 G7 v版权声明:青云客_Hugh) z, h0 J5 @' C2 e- V# ]$ F
3 N6 C/ m# v1 v% G7 v7 z
% t$ r& F# j' {( F
收藏 评论0 发布时间:2022-12-16 12:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版