[STM32F4] STM32F4 MAC 配置

[复制链接]
 楼主| jerry尧 发表于 2025-4-19 22:51 | 显示全部楼层 |阅读模式
我用 STM32CubeIDE 生成代码。唯一有效的 MAC 地址是 02:00:00:00:01。此地址配置在static (void low_level_init(struct netif *netif) 函数中的 LWIP\Target\ethernetif.c 文件。如果我将其更改为其他任何内容,则板卡ping不通。
在 /* USER CODE BEGIN MACADDRESS */ 部分中,尝试为板子分配另一个 MAC 地址,但板卡ping不通。如果在这个将 MAC 地址分配为 02:00:00:00:00:01,板卡能ping通。
在 stm32fxx_hal_conf.h 文件中的第 1 节:以太网外围设备配置中,还有另一个对 MAC 地址的引用。这是显示的内容:
#define MAC_ADDR0  2U
#define MAC_ADDR1  0U
#define MAC_ADDR2  0U
#define MAC_ADDR3  0U
#define MAC_ADDR4  0U
#define MAC_ADDR5  1U
但是,我将 #define 语句更改为任何内容,系统仍然能ping通。
究竟如何设置板子的 MAC 地址?

回复就哭哭 发表于 2025-4-30 23:46 | 显示全部楼层
确保在所有相关配置文件中都使用相同的 MAC 地址。

如果你在 ethernetif.c 中手动设置了 MAC 地址,确保它与 HAL_ETH_Init() 使用的地址一致。
公羊子丹 发表于 2025-5-26 07:23 | 显示全部楼层
看起来 CubeMX 生成的 MAC 地址实际是从 ethernetif.c 里赋值的,改宏没用是因为代码里没用到。
周半梅 发表于 2025-5-26 07:25 | 显示全部楼层
你可以在 low_level_init() 函数里打个断点,看实际生效的 MAC 是哪个,八成就是那里强行赋的值。
帛灿灿 发表于 2025-5-26 07:26 | 显示全部楼层
STM32 的 MAC 地址不能随便写个地址,有些值在网络层可能会被认为是无效或者冲突的。
童雨竹 发表于 2025-5-26 07:27 | 显示全部楼层
MAC 第一个字节的最低位不能为1,不然就是组播地址,设备就不认你了。你可以试试 02:00:00:00:00:02 这类。
万图 发表于 2025-5-26 07:28 | 显示全部楼层
其实你只要改 netif->hwaddr 这个结构成员就行了,那几个 define 根本没用。
Wordsworth 发表于 2025-5-26 07:29 | 显示全部楼层
我之前也被这坑过,以为定义了就生效,结果根本没用到,还得手动改 C 文件。
Bblythe 发表于 2025-5-26 07:30 | 显示全部楼层
有时候 lwIP 初始化太早也会导致 MAC 地址设置失败,可以延后设置试试。
Pulitzer 发表于 2025-5-26 07:31 | 显示全部楼层
CubeIDE 生成的代码结构有点绕,最好全局搜一下 MAC_ADDR 看哪些地方真用了。
Uriah 发表于 2025-5-26 07:32 | 显示全部楼层
ping 不通也可能是 IP 地址不在同一网段,确认下 IP 分配也没错。
Clyde011 发表于 2025-5-26 07:32 | 显示全部楼层
实在不放心你可以打印实际设置的 MAC 地址验证一下,看看是不是你写的生效了。
t60yz 发表于 2025-5-31 23:43 | 显示全部楼层
有些自动生成的代码或者网络栈初始化代码里可能会重新写MAC地址。

搜索全项目是否有其它对 netif->hwaddr 的赋值。

确保没有从别的地方读默认值覆盖你改的。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

70

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

46

主题

70

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部