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

STM32H723+Lwip+ETH+CUBE 完整配置

[复制链接]
STMCU小助手 发布时间:2022-12-16 12:00
开发环境:
7 A4 y# C1 ]" ?' N( F4 f1 G适用CUBE版本:STM32CubeIDE 1.9.0 及以上
; B' N2 f6 p4 o$ k+ K7 U9 [' Bstm32芯片型号:H723ZET62 c2 U% O% D5 Y& t( v
6 N# q! ]2 ~, \1 C7 w1 \
一、配置部分3 E: w: ^. {& h
(一)常规配置,RCC和SYS
6 O3 `4 c$ m& \# a1 FRCC启用外部高速时钟! ?: _5 u$ Q( N% u& M
3 L2 m( X( m( ^4 t: r- n, R
682d9955e9cf43a0a65d9b4e456132fc.png
! C% m# `: V: m" L1 g# Q0 Z" C8 H! m! }3 `' R7 f' }6 Z- I
(二)串口

9 m( }5 T6 c0 h; F5 F# |串口的配置和代码实现本文不加以说明
8 J: \# I3 f  Z* Q$ S/ p% P- Z9 ]7 @* x( ]
f8c167d859944e54baa895907399183f.png 9 F) f2 C! K, n* @1 b

) t5 k6 Q  I- P

$ ?5 y" e2 e, U9 |(三)ETH配置
9 ?0 G  U. l! UMAC随意,不必和图中一样
) J9 v- e8 b* i$ `. N, ^: m; s9 O- }$ t* q& }
5ea8cef005dd40baafdbecdfed7c3da1.png * J: g& U/ {1 }- m

) B. s5 @  ]+ S# }
) k" I0 ]8 ?& v1 J6 _! R
(四)LWIP(重点来了)) E7 O0 b6 V) D9 I
首先是LWIP的常规配置,设置IP,其他默认。
# O' f  z3 u' j6 J3 ]9 j$ ?6 h, R: B+ F; C6 B; n! L7 s0 G$ q4 |
8d1d230137ec469b994b80d163e9e888.png
, F% j. Y( H# {2 P4 E' K1 d6 r1 M/ S, c
1 N; T! v4 o: I$ G6 L
排坑一:H723系列不同于H7系列,官方库默认配置是0x30044000,我相信有不少朋友试过:代码编译正常,烧录正常,但是代码一执行就进入Handler。这是因为H723的内存不同于其他H7系列。H723的RAM_D2的地址范围是0x30000000~0x30008000,而其他的H7空间比这个大得多。
. z' ]. ^7 n  X" A7 p/ m/ |- [- n4 c% N/ b9 N+ ?6 r) e3 _+ j& U5 @
ef39f745958b4784bdb3100a262af769.png
: Z# b) [% j7 {3 e! l
% \+ s0 H7 s0 G' G; l7 v  N8 V然后注意LWIP_NETIF_LINK_CALLBACK(检测网线插拔的)要使能就行,其他配置默认  Q, e7 T% g6 W# l( d/ C7 r
' e  _- _0 H" |5 ?2 q  E
f53768e37e804931ac641cac44c4cc48.png & @  Y3 Q3 w' f) z: P
- ]- o0 u: [2 G$ P
排坑二:你实际用的PHY不一定是LAN8742,但官方配置就是默认且必须选择LAN8742,恶心死我了,所以到时要去修改它源码的PHY地址,后面会说到在哪里改。
7 G* z; d$ F, s& h2 f. E1 `0 W& }0 Q
75303c76a1a8446085c396d2315ff064.png 1 W+ H. Q  `; u; Y6 x: ]) x4 N
- j1 e7 ?& ~" _' Z' M( L3 E
然后这里也默认就行0 f" K- p  l4 `, {/ X

, U2 _  Y, _5 e8 J: H& ~+ i: } 4117b0796281493f8dc8704fd96a01c0.png
  j  O6 V& o- T: C; I0 x- [, _
9 _5 J, P$ V2 m; R  X) R1 w
(五)PHY的复位引脚配置
8 X8 E. V8 U. b我看很多教程都没详细写这一步,经常不知道这个复位是哪来的,实际上是必要的,除非硬件上设置了自动复位。设置一个引脚为输出模式,常态高电平。(具体哪个是复位引脚要看你们自己的硬件设计)
* j$ A) x3 Z) s' ]7 |! [' J( f- ^6 \7 }1 M! G% Z' B( ~7 l6 F
269af4c945d54d74b1e7b7e76abf5790.png % N) L1 q# O& f4 z* G" \% O, H

# q; A' K' A$ d. D- m- u并且常态设置为高电平/ z1 T3 e* c! w: ]( G& j
. d- o6 t/ B* u' f5 |! n* ~
4534a37853b746ac891621786877ba75.png
5 y' s0 ]- z$ S4 h5 x# W0 L) R" O3 i9 U  Z* i2 ?+ U% R' }$ n5 a
(六)MPU配置7 F' ^8 x+ Y: R- w$ T( \5 Z% D7 b/ s
排坑三:H7系列的芯片想用LWIP必须配置MPU,而H723的配置与其他H7系列又有些不同,但哪里不同不需要管了,按我下面配置就完事0 n6 S% c1 T1 i0 ]5 S; n
3 r! p; K; I$ S* Y$ V$ u& {
410bbedee33847fea39d13c5e0d74f78.png
5 r, W6 q! G; l: R0 E1 A* A' d1 i+ {! @9 {- j/ Y
就这两个% F2 |  h, d. e! N9 X7 d+ b
, w( z0 A( a0 L% C/ W/ d. I- x6 H
94279f8d188a4053aa74ba32c539f1ad.png : c3 {. p" A! c3 V" G
$ g- j6 Q% [) h
(七)时钟树配置
( S$ p$ G2 Q/ h3 d( V4 N这个没啥好说的,常规操作。
' h( ~) x0 s+ K
( F- V( ~7 @! k/ r% W6 k3 m7 s  I+ e
f28a9fe3db8e4049a82fe04119718839.png : A+ b7 x" F- Q' L* X
; h' Y9 a. ^" j& o1 X
(八)生成代码9 ~* f1 b7 V0 k$ y% G. G  o
这里可以改大点
& @5 [, K$ V" R: {. Y1 _8 Y7 z4 b8 w4 Q
0a5246b5c9cb4bf3a225dd9548e65686.png
/ j3 B6 q: }! B, s- x! }% z3 @3 ^* R; h) j3 U
然后勾选划分模块
+ L. y1 b5 Y8 W* x( d
' c) d, O) Q6 S
5f51d9a5ab004353a8ebee1b01840af8.png
( n4 l/ v0 ]/ C2 x5 I* z# u& K. o. y# y
保存后就可以生成代码了。后面来到代码部分:( f  ]) F2 e4 W7 R

$ x0 q6 D$ K3 T
8 l" n/ t8 }* e1 G
二、代码部分8 W) N! w2 i* x
(一)main函数的修改. A; `' y, T- ]  K- w! y+ x
使能D2SRAM1时钟:* T# }5 x# P) |$ v0 I: N

* T- C; Z) e5 D- a( M
5c020495c3e646a6bea6538a894f09a7.png # U9 m+ z9 W" N7 |7 S. ]
# }$ |! r: b/ g6 k
后面再加上这几行,清空DVache和PHY复位( K6 E* {' l; T9 v$ D

% G  p) @; z- h7 c; _$ ]
33b17d8e956e4b48bf8db8b1c305b39e.png / n3 n  h' @+ u6 l; _1 ^
& P. N+ V/ U( ~6 k) K. A
当然还有MX_LWIP_Process(),加在循环里面5 I  J  w$ o$ G8 l8 @1 m

7 j0 Q+ N- J; F0 X" h6 w) j9 {) n
fcc193bfe8e544b196813935cebbb6fe.png   W& k) a7 G$ D' w& z/ }& I. G
# q6 e' K. q) Y9 w
8 O$ z& a# Y; S% j- d. j6 T, Y
(二) 修改phy地址4 C) M! t+ a# k
因为我用的phy地址是0x1,所以需要修改才能用,在这里修改:
5 d& j0 G' E* a; D/ }; W& g4 r! `! F! p! v  |
fbb3f33ead9f477a8e413962a5b6127a.png
7 M, O: e0 W, `- H: D* k; X0 y; H2 U1 [

9 F) B' p5 p# ?, Z9 z, [$ X- N找到函数LAN8742_Init(lan8742_Object_t *pObj)
, f6 t1 ~, b+ h: ^在这个位置,强行修改phy的地址为0x1,很不好的是如果重新配置了ioc生成代码,又要重新在这里添加修改
" ]  ], T4 j8 l
2 M- a; A+ R( d# _. a( T- Q0 [
dc68a6399c2f4bea8a802e6ec2d9fc47.png
( n- @. U& a4 e: B7 [
0 T) o% G8 j, d7 ]" H/ g7 e
3 b, |$ i, b: U2 d# h- Z0 f
(三)修改ld文件  y+ V1 {6 ?, v" O
很多人都不知道要改这里,少了这里不管怎么样配置都无法正常使用以太网,巨恶心,就是这个文件:0 J" z1 W3 u/ ]. E
- v5 ^  @% `+ C/ u1 P5 z2 i' o
5c78f4fa39cb438da4c8763446d9bd97.png
( A& l) K2 I9 U* p6 M
! q6 I$ H( H3 ]) ]$ }
, f+ B" R& y+ o5 N: R
拉到最下面的这个位置,添加以下代码(目的是将lwip的内存放进RAM_D2里面):5 Q7 K1 f' g4 l) v9 r2 o
  `$ U  B4 p5 n8 A. N
afe96e76510343a4b3ecfe18adae5f17.png % u* _9 Z1 d$ `, d) s; K) ^3 y
6 W! P  {# j# L- E* j
到这里,所有的配置就完成了,可以编译烧录,尝试ping网络:
/ c! q8 x% l* O' ^- M# e' ?+ k1 I' @/ F
8ea813603ac14c45aa277d503fe3c800.png ! S% `5 ?  H. e
9 L; E, P6 x7 g' o8 t
搞定。
$ g( n" z% Q9 O  ^, Z/ O————————————————
4 K& n7 g) B8 C6 o( j版权声明:青云客_Hugh
$ f( X5 @. d2 }. v$ t& C! B  z2 [. V& a% U$ ^3 A/ N: S
$ J  o& W7 I0 B3 ?3 f7 ]) b
收藏 评论0 发布时间:2022-12-16 12:00

举报

0个回答

所属标签

相似分享

官网相关资源

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