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

STM32H723+Lwip+ETH+CUBE 完整配置

[复制链接]
STMCU小助手 发布时间:2022-12-16 12:00
开发环境:+ l8 V, h+ |/ F
适用CUBE版本:STM32CubeIDE 1.9.0 及以上
; [* x# P3 b: g4 \, C  ^stm32芯片型号:H723ZET6* c! w8 E8 `/ ?
' e: B3 y  T+ f5 ]3 \" y
一、配置部分) s/ s. ^1 C: P4 x& F
(一)常规配置,RCC和SYS
& @) R9 X( p; H, H% u: sRCC启用外部高速时钟9 X# ^! @* y, I2 i9 I" ]

+ x  z/ Z1 q5 B2 M% x
682d9955e9cf43a0a65d9b4e456132fc.png
; |( w% ]. o9 ?& P
5 A% X, D6 q- }* a4 [( ~(二)串口

, o- T6 f; ^8 B' @, A* J串口的配置和代码实现本文不加以说明* N( A+ \0 K; F4 O+ n2 S( `

, I6 ^/ L3 H+ `; N) R& ~0 [7 V
f8c167d859944e54baa895907399183f.png ! a; {- R9 k3 D. A3 A0 ^

: D1 W# ]* N4 v% a
) N: E2 l% n3 e) l% C
(三)ETH配置
, }  K1 K" m7 aMAC随意,不必和图中一样# |! F2 ]# m5 x& t

! B" b" D2 d- v* z, S9 ~) H% ^! n
5ea8cef005dd40baafdbecdfed7c3da1.png 2 U4 v0 F8 N$ v
3 L  L* ]4 f7 Y# c( X- M
& M1 F" h2 c/ S- E' x3 ?1 A! e. n
(四)LWIP(重点来了)
3 L/ o) G* c' G% A0 G- K首先是LWIP的常规配置,设置IP,其他默认。
1 g0 R/ D0 ^- i  h+ O& b" V3 Q$ }. x$ E4 s& f
8d1d230137ec469b994b80d163e9e888.png 9 R* p% }" G2 u* r; p; j/ w
/ k. j0 o+ D+ s( Z  c

. Z( m+ m! d1 O& `
排坑一:H723系列不同于H7系列,官方库默认配置是0x30044000,我相信有不少朋友试过:代码编译正常,烧录正常,但是代码一执行就进入Handler。这是因为H723的内存不同于其他H7系列。H723的RAM_D2的地址范围是0x30000000~0x30008000,而其他的H7空间比这个大得多。
5 K9 w4 q. }% H/ V# {6 b. F2 M( Y: c7 c) E# |
ef39f745958b4784bdb3100a262af769.png
" g$ G$ R+ i; W% Y0 L9 b0 ?2 s4 Z: ]4 _
然后注意LWIP_NETIF_LINK_CALLBACK(检测网线插拔的)要使能就行,其他配置默认
/ Q% L  \3 P- @3 g3 K. `) U# L  v+ ]4 t9 P
f53768e37e804931ac641cac44c4cc48.png
, n+ s  Y7 ^' A+ ^4 @2 R$ D6 Q% h0 S% H
排坑二:你实际用的PHY不一定是LAN8742,但官方配置就是默认且必须选择LAN8742,恶心死我了,所以到时要去修改它源码的PHY地址,后面会说到在哪里改。  S( v& ]% K: A7 ^9 C$ t3 U0 n
" a8 W- e$ P6 r% {5 d
75303c76a1a8446085c396d2315ff064.png
) S1 v& q' v% y/ u5 c

$ H. ]1 U* j& r$ I7 P+ L, Z然后这里也默认就行0 a2 _4 a; g; m6 o$ ?7 d

% G; E1 r5 K+ L 4117b0796281493f8dc8704fd96a01c0.png . I6 w7 O2 G: e: n& I0 e
0 ^/ [( z; \9 O' A! J8 j* V
(五)PHY的复位引脚配置& G* K! ~4 [- d0 P' l9 f
我看很多教程都没详细写这一步,经常不知道这个复位是哪来的,实际上是必要的,除非硬件上设置了自动复位。设置一个引脚为输出模式,常态高电平。(具体哪个是复位引脚要看你们自己的硬件设计)- W( D4 K1 J% Y$ }2 y' Z
9 j  r9 P+ _' k
269af4c945d54d74b1e7b7e76abf5790.png
# Y+ {9 N& |2 ^/ p- p* W3 z3 R: B, J8 |
并且常态设置为高电平
4 W! W  s* |" C$ ]/ D
; n- J" m4 L4 z( ]; F. |
4534a37853b746ac891621786877ba75.png
( U% Q3 l" b" P4 P( z8 x. Y0 v: U6 d( G2 c5 Y
(六)MPU配置3 m4 u6 U2 k2 V' U. l: p
排坑三:H7系列的芯片想用LWIP必须配置MPU,而H723的配置与其他H7系列又有些不同,但哪里不同不需要管了,按我下面配置就完事0 o. z4 E1 m. u6 x( a

2 c4 k" _4 j; R/ |+ X) [; i
410bbedee33847fea39d13c5e0d74f78.png
# T5 V+ d% u* `
0 I+ m! E) w9 L/ [1 m" z- p) Q& s就这两个6 k7 ^8 W/ i9 Z5 y  Z

  u5 v# V/ U6 P! O, _
94279f8d188a4053aa74ba32c539f1ad.png
* p% k- _8 I5 ?& K  [
, _5 Z6 ^5 `8 @4 O8 Q) O
(七)时钟树配置7 J$ A7 G- G* d6 X: A
这个没啥好说的,常规操作。! D7 [6 q" K( P9 h7 w- i1 ~1 I0 a- Y
* a+ u- M' r9 l* K5 W3 x" z
f28a9fe3db8e4049a82fe04119718839.png
6 Z2 K* w& s$ u6 t+ H* V! S" K* Z
8 t" s4 w% H! I3 C# B! C(八)生成代码; G: \* B! V( f8 D( J5 ~
这里可以改大点8 B! m8 L+ a3 ~" S

' M  N2 ^  t7 A. C$ E% X' N6 i
0a5246b5c9cb4bf3a225dd9548e65686.png ' ^1 A2 A+ b3 G' q

4 k6 N' Y- B$ ~: k# z4 w然后勾选划分模块' H8 i, i9 z" n" G# R7 q1 g

" z/ A* a0 ^) ?# ^
5f51d9a5ab004353a8ebee1b01840af8.png / d, Z# W& N! D6 ?

9 M1 q& |% {' ~" w2 S3 k6 e保存后就可以生成代码了。后面来到代码部分:
2 a' Y, }# [8 ^: C
$ i( e% R1 U- w; d

& K0 I9 s0 A% E& @: D二、代码部分
+ ^( p. m  f% z8 _, M  |(一)main函数的修改
  Z% X/ J9 o6 ]$ g# ~# i使能D2SRAM1时钟:7 G3 B  v# q! N% S3 K7 }
& k9 d( R8 a4 k' \
5c020495c3e646a6bea6538a894f09a7.png
; f/ c! i6 V- r! O
4 v& e! T* A8 @- G1 E& ]  o后面再加上这几行,清空DVache和PHY复位
2 n5 O& Z$ h' |0 p" p% ^2 @
( q& K( \" D7 P! n7 d. u
33b17d8e956e4b48bf8db8b1c305b39e.png 8 J" o. V! s3 U) b0 @% h$ D2 c, c' @

9 [7 y. b0 ]7 P) I" I* A当然还有MX_LWIP_Process(),加在循环里面2 f, V# s% u; f9 S
% Y3 ~8 z! t7 Y3 I2 V+ y& E
fcc193bfe8e544b196813935cebbb6fe.png & @1 |( M/ z  v) Y

) O. f1 S8 w- l2 }0 g, r& b

% U- ]$ p$ v0 d(二) 修改phy地址6 ~% g" Z( i( H% q
因为我用的phy地址是0x1,所以需要修改才能用,在这里修改:! L6 \% {) x, ^  Z

/ G$ g- p: c9 K* J' N
fbb3f33ead9f477a8e413962a5b6127a.png 9 R" ~1 X: u, B! w& v6 E4 c4 B. \
) N" A! \, K% y, s. z, w2 u  D
. i  R) y- M3 U7 [; M% d; l( ]- _
找到函数LAN8742_Init(lan8742_Object_t *pObj): [4 L$ g% D# H) ]( U
在这个位置,强行修改phy的地址为0x1,很不好的是如果重新配置了ioc生成代码,又要重新在这里添加修改
! u1 V0 R" ?; W. E7 x* o5 N+ \' A& W+ E) H$ e# [5 Q/ s" _# x  C
dc68a6399c2f4bea8a802e6ec2d9fc47.png
) s, o* Z& N- y5 [! h. Q: A! Y. W* S4 G7 F
6 O5 J1 f$ z* L
(三)修改ld文件
7 P/ z5 K4 |* J+ R8 \% J很多人都不知道要改这里,少了这里不管怎么样配置都无法正常使用以太网,巨恶心,就是这个文件:
  n; }- H5 D# W0 `* C1 r: b" v/ u* }4 H3 @
5c78f4fa39cb438da4c8763446d9bd97.png
* _& l; s* X; m: `
, u1 U  y4 |1 u( h
: ]: K+ {( \( K4 D$ v" d2 t: i
拉到最下面的这个位置,添加以下代码(目的是将lwip的内存放进RAM_D2里面):( c! Z# i4 H8 D

, V+ D$ ~9 q+ d* K2 E; y
afe96e76510343a4b3ecfe18adae5f17.png 2 i& I6 K! B, Z! X6 B9 O2 _0 l1 X
. a( d' R* Z# A0 x4 X! e. E
到这里,所有的配置就完成了,可以编译烧录,尝试ping网络:
5 R( w; O: F% {- U0 w. H
2 D9 F8 d" k- `) ^
8ea813603ac14c45aa277d503fe3c800.png ; @* M/ B7 _* W" e

$ k" t( D" c# C4 H! v搞定。
: M  M" r1 S4 D. R# c/ x8 Q————————————————$ ~/ p" |. d+ }1 I0 E: O/ K7 P' _
版权声明:青云客_Hugh
; v! [8 s% m& I  Z* S
8 G1 j! o# u( o7 u& U9 a' Q# V- b4 c1 y: T0 c4 }
收藏 1 评论1 发布时间:2022-12-16 12:00

举报

1个回答
鸷鸟 回答时间:2025-11-1 23:44:40

太感谢了,查了一大堆资料,看了一大堆博客,终于看这篇文章搞定了,这是唯一一个讲到修改ld文件的文章,2025了,cube的这个大坑还没修复。

所属标签

相似技术帖

官网相关资源

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