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 一、配置部分 (一)常规配置,RCC和SYS: K" w" [) h, n! G/ i* x RCC启用外部高速时钟
4 z0 S# Q0 |6 S2 ], c. z (二)串口0 d+ Q: k& ?( b1 | 串口的配置和代码实现本文不加以说明 . f; X% c- g' o0 X' }
Y: k6 B- N& j4 i. s3 [. | (三)ETH配置 MAC随意,不必和图中一样 4 N7 _0 |" R% A% x; k2 k
& Y, J; n X7 a (四)LWIP(重点来了)3 g# x9 j% G4 q+ ^ 首先是LWIP的常规配置,设置IP,其他默认。 : C/ C, m; r. @7 Y) T
! z* D. k* \/ C( s 排坑一:H723系列不同于H7系列,官方库默认配置是0x30044000,我相信有不少朋友试过:代码编译正常,烧录正常,但是代码一执行就进入Handler。这是因为H723的内存不同于其他H7系列。H723的RAM_D2的地址范围是0x30000000~0x30008000,而其他的H7空间比这个大得多。
' b1 w2 R' N, h4 B 然后注意LWIP_NETIF_LINK_CALLBACK(检测网线插拔的)要使能就行,其他配置默认 * T# F. R2 J `$ I( g+ a! z) S4 ]4 s
+ j0 U6 A4 N/ Z2 _0 r" k 排坑二:你实际用的PHY不一定是LAN8742,但官方配置就是默认且必须选择LAN8742,恶心死我了,所以到时要去修改它源码的PHY地址,后面会说到在哪里改。 / M8 H/ g( Q9 l" ?
然后这里也默认就行# t- j2 X* c: n# X
(五)PHY的复位引脚配置 我看很多教程都没详细写这一步,经常不知道这个复位是哪来的,实际上是必要的,除非硬件上设置了自动复位。设置一个引脚为输出模式,常态高电平。(具体哪个是复位引脚要看你们自己的硬件设计)
. _, ]* F5 ?! k! q/ d3 {3 r$ m 并且常态设置为高电平+ o& d9 F; A9 Y , ?; U- z# r) z
(六)MPU配置 排坑三:H7系列的芯片想用LWIP必须配置MPU,而H723的配置与其他H7系列又有些不同,但哪里不同不需要管了,按我下面配置就完事
就这两个 ( O$ ` P J/ {; K
(七)时钟树配置' n) ?( P% T, g' l8 n& P. I! K& u 这个没啥好说的,常规操作。/ O0 V [1 E0 ~; l
(八)生成代码 这里可以改大点" @9 [! D1 o( Z" q+ E
然后勾选划分模块 5 T5 m3 e$ U' H% {0 F. A$ H5 ~4 M
保存后就可以生成代码了。后面来到代码部分: ^6 Z0 Z' a: P/ ~: b2 x 0 V" S, z4 E/ r, i 二、代码部分 (一)main函数的修改 使能D2SRAM1时钟: ( ]+ o2 q( e2 t; |' Q
后面再加上这几行,清空DVache和PHY复位- O& g- z8 {/ a- S2 h% L, E; n2 _ ; v2 n5 L* R/ s3 x& \0 }: d
当然还有MX_LWIP_Process(),加在循环里面
(二) 修改phy地址 因为我用的phy地址是0x1,所以需要修改才能用,在这里修改:4 ^8 N# `) T* v2 v ' ~ U/ C- i5 V ^% ^2 W
/ L2 e2 R- t1 b; t7 F 4 S9 i' h) z( p# y- Z0 p 找到函数LAN8742_Init(lan8742_Object_t *pObj) 在这个位置,强行修改phy的地址为0x1,很不好的是如果重新配置了ioc生成代码,又要重新在这里添加修改! Z; {" c1 T, j, p' x
, S* Q- W% _% s# _' N: r ) p1 u- I9 c: Q4 | (三)修改ld文件" }* e' P: z" G2 V8 Y 很多人都不知道要改这里,少了这里不管怎么样配置都无法正常使用以太网,巨恶心,就是这个文件:
1 n0 {5 q5 C% ~# o: O, p5 g 拉到最下面的这个位置,添加以下代码(目的是将lwip的内存放进RAM_D2里面): 2 ^" ?0 r. [5 Z3 r( J2 P
到这里,所有的配置就完成了,可以编译烧录,尝试ping网络:7 h4 c u+ ~( q' m1 U" [' R" D' ?
搞定。 ————————————————% L0 @2 m6 n8 ?* T 版权声明:青云客_Hugh 1 w/ p; L" q' o' q, m9 p |
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号
【STM32H735DK测评】Ethernet+lwip DHCP获取IP地址
STM32H743基于CubeMx5.0配置手册
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
微信公众号
手机版
太感谢了,查了一大堆资料,看了一大堆博客,终于看这篇文章搞定了,这是唯一一个讲到修改ld文件的文章,2025了,cube的这个大坑还没修复。