STM32H743 以太网配置问题

STM32H743 MII模式初始化问题

STM32H743 以太网配置为RMII接口时,调用HAL_ETH_Init(ETH_HandleTypeDef *heth)函数能正常返回。

如果改成:MII接口后,调用HAL_ETH_Init函数就会返回错误。仿真确定是软件复位超时。
并且,在其他什么都不变的情况下,我只需要将heth.Init.MediaInterface = HAL_ETH_MII_MODE;修改为heth.Init.MediaInterface = HAL_ETH_RMII_MODE;就不错返回错误。

/* Wait for software reset */
  while (READ_BIT(heth->Instance->DMAMR, ETH_DMAMR_SWR) > 0U)
  {
    if (((HAL_GetTick() - tickstart) > ETH_SWRESET_TIMEOUT))
    {
      /* Set Error Code */
      heth->ErrorCode = HAL_ETH_ERROR_TIMEOUT;
      /* Set State as Error */
      heth->gState = HAL_ETH_STATE_ERROR;
      /* Return Error */
      return HAL_ERROR;
    }
  }

请问有没有大佬知道是怎么回事?

### STM32H743以太网配置教程及HAL库代码示例 #### 使用STM32CubeMX生成基础代码 STM32CubeMX是一款强大的图形化工具,用于初始化和配置STM32微控制器的外设。对于STM32H743以太网功能的配置,可以通过以下方式实现: 1. **打开STM32CubeMX并导入目标芯片** 创建一个新的工程并将目标设备设置为STM32H743。 2. **启用以太网外设** 在Pinout & Configuration界面中找到ETHEthernet)模块,并将其状态设置为Enabled[^1]。 3. **配置时钟源和其他参数** 配置RCC时钟树以确保以太网所需的时钟频率正确无误。通常情况下,默认配置即可满足需求。 4. **中间件的选择——LwIP协议栈** 进入Middleware选项卡,在LwIP部分勾选Enable LwIP Protocol Stack。随后调整相关参数,例如MAC地址、IP地址分配策略等[^4]。 5. **物理层(PHY)驱动选择** 如果使用的PHY芯片是LAN8742,则无需额外修改;如果是DP83848或其他不兼容型号,则需手动编辑生成后的代码文件中的PHY注册表映射关系[^4]。 #### HAL库核心函数解析 以下是利用HAL库完成基本网络数据收发的关键操作说明及其对应的C语言代码片段: - 初始化以太网接口: ```c void MX_ETH_Init(void) { /* Initialize ETH according to the configuration defined in the Ethernet section */ heth.Instance = ETH; heth.Init.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE; // 启用自动协商机制 heth.Init.PhyAddress = 0x00U; // 物理层设备地址 heth.Init.MACAddr[0] = 0x00U; // 设置MAC地址前六字节 ... if (HAL_ETH_Init(&heth) != HAL_OK){ Error_Handler(); // 错误处理逻辑 } } ``` - 数据发送流程: ```c uint8_t TxBuffer[] = { ... }; // 待传输的数据缓冲区 HAL_StatusTypeDef status; status = HAL_ETH_TransmitFrame(&heth, sizeof(TxBuffer)); // 发送指定长度帧至远程主机 if(status != HAL_OK){ // 处理失败情况下的异常分支 } ``` - 接收外部消息: ```c uint8_t RxBuffer[ETHERNET_FRAME_SIZE]; // 定义接收缓存大小 HAL_StatusTypeDef result; result = HAL_ETH_ReceiveFrame(&heth, RxBuffer); // 将接收到的内容存储到RxBuffer数组里 if(result == HAL_OK){ ProcessReceivedData(RxBuffer); // 对有效载荷执行后续业务运算 } else { HandleErrorCondition(); // 记录日志或者尝试重新连接 } ``` 以上展示了如何借助于ST官方提供的HAL API简化复杂底层寄存器交互过程的同时提高了程序可读性和移植效率[^2]。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值