STM32之DP83848

/******************************************************************************
* 文 件  名 称:BspDp83848.c
* 文件功能概述:实现DP83848的接口
* 文 件  作 者:xxx
* 版        本:V1.0.0.0
* 修 订  记 录:2017-6-30创建
******************************************************************************/
#include "BspDp83848.h"

/*
 * 用于记录DP83848的地址信息
 */
static uint16 stDP83848Addr = 0xFFFF;

/*
 * 用于记录DP83848的连接速度 :10M或100M
 */
static uint16 stDP83848LinkSpeed = 0;

/*
 * 用于记录DP83848的工作模式:半双工或全双工
 */
static uint16 stDP83848Mode = 0;

#define DP83848_DelayMs DelayMs
/*******************************************************************************
 * 函 数 名:static void DP83848_DelayMs(uint16 Ms)
 * 参    数:uint16 Ms : 延时单位
 * 返    回:无
 * 创 建 人:xxx
 * 创建时间:2017-6-30
 * 详    述:DP83848使用的延时函数
 * 修改记录:2017-6-30创建
*******************************************************************************/
//static __inline void DP83848_DelayMs(uint16 Ms)
//{
//  DelayMs(Ms);
//} 

/*******************************************************************************
 * 函 数 名:static sint8 DP83848_AutoDiscover(void)
 * 参    数:uint16 *pPhyAddr:phy芯片地址指针
 * 返    回:0:正常返回 非0:发生错误
 * 创 建 人:xxx
 * 创建时间:2017-6-30
 * 详    述:自动发现PHY芯片的地址
 * 修改记录:2017-6-30创建
*******************************************************************************/
static sint8 DP83848_AutoDiscover(void)
{
  uint16 ChipAddr = 0;
  uint16 ChipData = 0;
  
  for(ChipAddr=0; ChipAddr<0xff; ChipAddr ++)
  {
    MiiRead(ChipAddr, PHY_PHYIDR1, &ChipData);
    if((0xFFFF!=ChipData) && (0x0000!=ChipData))
    {
      DP83848_Print("The DP83848's addr read is 0x%x\r\n", ChipAddr);
      stDP83848Addr = ChipAddr;
      break;     
    }
  }
  
  if(ChipAddr >= 0xff)
  {
    return -1;
  }
  else
  {
    return 0;
  }
}

/*******************************************************************************
 * 函 数 名:sint8 DP83848WireIsLinked(uint16 chip_addr)
 * 参    数:uint16 chip_addr   : PHY芯片地址
 * 返    回:0:未建立连接  1:已经建立连接
 * 创 建 人:xxx
 * 创建时间:2017-6-30
 * 详    述:判断phy芯片是否已经建立连接
 * 修改记录:2017-6-30创建
*******************************************************************************/

sint8 DP83848WireIsLinked(uint16 chip_addr)
{
  uint16 result = 0;
  
  MiiRead(chip_addr, PHY_STS, &result);
  
  if(result & PHYx_LINK_STATUS)
  {
    return 1;
  }
  else
  {
    return 0;
  }
    
}

/*****************************
DP83848是一款高性能的以太网PHY芯片,广泛用于与STM32微控制器配套的以太网通信应用中。为了在STM32上驱动DP83848,我们需要进行如下几个步骤: 1. 硬件连接:首先,需要将DP83848芯片与STM32微控制器进行硬件连接。通常,DP83848的MII接口与STM32的ETH接口相连,通过RMII或RGMII接口进行通信。此外,还需要将DP83848的所需电源和时钟信号接入。 2. 硬件配置:在连接好硬件之后,需要对STM32的相关引脚进行配置。通过寄存器设置,将对应的引脚配置为以太网功能。 3. 配置以太网模块:在STM32上配置以太网模块的参数,以便与DP83848进行通信。可以使用STM32 HAL库提供的函数进行配置,或者自定义驱动代码进行配置。 4. 初始化DP83848:在STM32上进行DP83848的初始化工作,包括设置PHY地址和进行复位操作等。这些初始化的步骤会根据具体的应用需求进行配置。 5. 数据传输:一旦DP83848STM32成功初始化,就可以使用STM32的以太网功能进行数据传输。可以使用STM32提供的以太网库函数,如发送和接收函数,进行数据传输操作。 需要注意的是,在驱动DP83848之前,我们需要确保STM32的时钟和引脚配置正确,以及正确配置以太网模块的参数。此外,还需要根据具体应用需求对DP83848进行相应的配置和初始化操作。 简言之,驱动DP83848需要进行硬件连接、硬件配置、以太网模块配置、DP83848初始化和数据传输等步骤。最终,STM32微控制器可以通过以太网功能与DP83848进行通信,实现以太网通信应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值