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

STM32H723+Lwip+ETH+CUBE 完整配置

[复制链接]
STMCU小助手 发布时间:2022-12-16 12:00
开发环境:3 @& x( d# f6 e% k3 h2 ?7 ~
适用CUBE版本:STM32CubeIDE 1.9.0 及以上: w. G9 F8 z4 _% A) m- X
stm32芯片型号:H723ZET6) ^: ~& U4 W9 C" a' P
, V6 y0 C, |2 a% M' D7 m
一、配置部分
; h: N  d/ _1 s, }* V(一)常规配置,RCC和SYS: K" w" [) h, n! G/ i* x
RCC启用外部高速时钟
8 N4 @1 T' l' ^4 |6 s1 T) Y
$ K% [( E8 K8 r' p% F
682d9955e9cf43a0a65d9b4e456132fc.png
5 A* h/ l" ?$ b- j" ?* j3 t/ O4 z0 S# Q0 |6 S2 ], c. z
(二)串口
0 d+ Q: k& ?( b1 |
串口的配置和代码实现本文不加以说明
  h0 O2 z* P# w  T; H' K$ x7 q% |. f; X% c- g' o0 X' }
f8c167d859944e54baa895907399183f.png ' i! E7 z( N: ~' O! p5 H" p
  Y: k6 B- N& j4 i. s3 [. |

; C! ?/ z. e( I  E7 v/ R  o(三)ETH配置
  D$ s! p( J# {5 {MAC随意,不必和图中一样
! ?$ o, h; x( N' Y4 N7 _0 |" R% A% x; k2 k
5ea8cef005dd40baafdbecdfed7c3da1.png
, {8 D% Y( I- u8 G' x5 T1 b& Y, J; n  X7 a

" g/ C( ^1 D, s# o3 N# @(四)LWIP(重点来了)3 g# x9 j% G4 q+ ^
首先是LWIP的常规配置,设置IP,其他默认。
' r) K, L! k0 m- Z$ Q: C/ C, m; r. @7 Y) T
8d1d230137ec469b994b80d163e9e888.png
$ c" Y+ n- s- C; r
- s. f4 p, N5 n3 X. Z! z* D. k* \/ C( s
排坑一:H723系列不同于H7系列,官方库默认配置是0x30044000,我相信有不少朋友试过:代码编译正常,烧录正常,但是代码一执行就进入Handler。这是因为H723的内存不同于其他H7系列。H723的RAM_D2的地址范围是0x30000000~0x30008000,而其他的H7空间比这个大得多。
* P% K& Y: g  L
2 m4 `& J( I) p) Q
ef39f745958b4784bdb3100a262af769.png
5 R1 v  Y# D) t' b1 w2 R' N, h4 B
然后注意LWIP_NETIF_LINK_CALLBACK(检测网线插拔的)要使能就行,其他配置默认
2 p0 s) L6 G  @" M8 F+ A( S( [* T# F. R2 J  `$ I( g+ a! z) S4 ]4 s
f53768e37e804931ac641cac44c4cc48.png " Y6 Z' h$ ~4 q
+ j0 U6 A4 N/ Z2 _0 r" k
排坑二:你实际用的PHY不一定是LAN8742,但官方配置就是默认且必须选择LAN8742,恶心死我了,所以到时要去修改它源码的PHY地址,后面会说到在哪里改。
4 A& G9 L1 I: E# J/ x6 j/ M8 H/ g( Q9 l" ?
75303c76a1a8446085c396d2315ff064.png ) w  A& c9 G5 ~' [

0 r8 U4 V/ b5 k5 c4 n9 x然后这里也默认就行# t- j2 X* c: n# X

6 |) B$ O+ B$ s  S' Q1 ] 4117b0796281493f8dc8704fd96a01c0.png 0 W- ~+ M$ j) L+ x, T: y) k+ d* M

- m& b$ C! V' g5 X7 L" f8 a(五)PHY的复位引脚配置
5 p+ j3 C* u. ?/ X; f0 \" X我看很多教程都没详细写这一步,经常不知道这个复位是哪来的,实际上是必要的,除非硬件上设置了自动复位。设置一个引脚为输出模式,常态高电平。(具体哪个是复位引脚要看你们自己的硬件设计)
8 [2 b/ v7 F8 b. c8 M9 [
7 m' K! Z7 r: s2 S4 g
269af4c945d54d74b1e7b7e76abf5790.png ; ?/ B4 W$ A, h) o$ Z: a
. _, ]* F5 ?! k! q/ d3 {3 r$ m
并且常态设置为高电平+ o& d9 F; A9 Y
, ?; U- z# r) z
4534a37853b746ac891621786877ba75.png - b; G& h1 Y. F2 p

: S" b6 m6 V" @( [% w4 b# a(六)MPU配置
9 C0 o7 i3 J: [& O排坑三:H7系列的芯片想用LWIP必须配置MPU,而H723的配置与其他H7系列又有些不同,但哪里不同不需要管了,按我下面配置就完事
0 `6 s. R/ ]$ r) `: [' {
$ M  z# O) W% [" b% f, ?! A
410bbedee33847fea39d13c5e0d74f78.png # j" {  n5 W! O0 s

% O9 b# S% T& d% w& \5 y就这两个
' U1 d8 y+ F. _2 Y$ p( O$ `  P  J/ {; K
94279f8d188a4053aa74ba32c539f1ad.png
) ]- t5 K" [0 b: l! F4 D2 k

7 c2 p* T2 k. i* J8 Y6 D( d0 _7 g(七)时钟树配置' n) ?( P% T, g' l8 n& P. I! K& u
这个没啥好说的,常规操作。/ O0 V  [1 E0 ~; l

. m7 J* R: O: n1 Y' a7 _  j+ L2 e
f28a9fe3db8e4049a82fe04119718839.png
! s7 j4 Z: h8 v
4 N3 s6 _& Y* w* P' z1 z(八)生成代码
8 E, `; t9 D8 w6 }4 W这里可以改大点" @9 [! D1 o( Z" q+ E

& k, T/ G1 Q$ [- f  F  F: F
0a5246b5c9cb4bf3a225dd9548e65686.png
" m- q1 [2 h1 H0 x4 g
& e0 v- D3 [3 e然后勾选划分模块
0 d8 E& _7 j" M, G5 T5 m3 e$ U' H% {0 F. A$ H5 ~4 M
5f51d9a5ab004353a8ebee1b01840af8.png & `, w, r0 }2 I/ X' x

$ k' q. i5 w( J, Q5 b保存后就可以生成代码了。后面来到代码部分:  ^6 Z0 Z' a: P/ ~: b2 x

5 v4 u+ b* \$ c5 |
0 V" S, z4 E/ r, i
二、代码部分
/ c+ ^! [4 w3 S) [$ @0 s(一)main函数的修改
9 S3 b1 J8 l9 |# n% n9 Y& W* u! b# C使能D2SRAM1时钟:
, g7 d( _# |' _6 r( ]+ o2 q( e2 t; |' Q
5c020495c3e646a6bea6538a894f09a7.png
1 D1 Q7 |5 D& t" l- O
" D" F6 \3 f  K$ n- F* x5 L" R1 {后面再加上这几行,清空DVache和PHY复位- O& g- z8 {/ a- S2 h% L, E; n2 _
; v2 n5 L* R/ s3 x& \0 }: d
33b17d8e956e4b48bf8db8b1c305b39e.png
3 c0 j! S. z- z6 J9 i7 q
( y' Y7 \  p  i当然还有MX_LWIP_Process(),加在循环里面
" V/ U- j0 c% \! u+ U! v
& G! A+ D. C7 z8 Z0 ?
fcc193bfe8e544b196813935cebbb6fe.png $ ~7 ?) i" S6 a6 i: Z. t

# d8 A' G, M3 E' `8 M0 o

2 T% }8 A; T5 w& Q; n3 `(二) 修改phy地址
8 c8 e, [) N' \& l因为我用的phy地址是0x1,所以需要修改才能用,在这里修改:4 ^8 N# `) T* v2 v
' ~  U/ C- i5 V  ^% ^2 W
fbb3f33ead9f477a8e413962a5b6127a.png
3 i8 z- s* I- v6 _* `7 Y7 K% r/ L2 e2 R- t1 b; t7 F
4 S9 i' h) z( p# y- Z0 p
找到函数LAN8742_Init(lan8742_Object_t *pObj)
( v. j; k* r2 v% K& R在这个位置,强行修改phy的地址为0x1,很不好的是如果重新配置了ioc生成代码,又要重新在这里添加修改! Z; {" c1 T, j, p' x

  i# }# g0 T6 E2 n9 S
dc68a6399c2f4bea8a802e6ec2d9fc47.png 2 F6 v6 v9 e! T# ~% g. T
, S* Q- W% _% s# _' N: r
) p1 u- I9 c: Q4 |
(三)修改ld文件" }* e' P: z" G2 V8 Y
很多人都不知道要改这里,少了这里不管怎么样配置都无法正常使用以太网,巨恶心,就是这个文件:
% h, {2 l, ]+ d9 L! ^) M+ z
) d0 b- i3 x0 W" u8 F2 d$ d% t
5c78f4fa39cb438da4c8763446d9bd97.png
! }  \# q& ~9 A1 M1 n0 {5 q5 C% ~# o: O, p5 g

4 B, p* |( _% X0 f9 I, m拉到最下面的这个位置,添加以下代码(目的是将lwip的内存放进RAM_D2里面):
& J! z/ I  \. `; g2 ^" ?0 r. [5 Z3 r( J2 P
afe96e76510343a4b3ecfe18adae5f17.png
0 B) f9 k" w7 H7 g
$ ~: P1 _/ s4 z" _到这里,所有的配置就完成了,可以编译烧录,尝试ping网络:7 h4 c  u+ ~( q' m1 U" [' R" D' ?

# i3 |; `1 v) u% K/ s. t/ d) y6 S
8ea813603ac14c45aa277d503fe3c800.png
. }7 w# r+ r2 E5 ]% ~4 P0 U( u* L$ W
; e$ f" f; P5 V0 B搞定。
  M3 {- `" C. F( e4 s$ L————————————————% L0 @2 m6 n8 ?* T
版权声明:青云客_Hugh
% @; y; q! z: N3 l4 Z' q
1 L. W# {5 c4 c2 B1 w/ p; L" q' o' q, m9 p
赞 收藏 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 手机版