ETH_AUTONEGOTIATION_ENABLE
时间: 2024-03-31 08:30:42 浏览: 14
ETH_AUTONEGOTIATION_ENABLE是以太网接口的一个配置选项,用于启用自动协商功能。以太网接口通常支持多种速率和双工模式,例如10Mbps、100Mbps、1Gbps等,并且可以选择半双工或全双工模式。当ETH_AUTONEGOTIATION_ENABLE被启用时,以太网接口会与连接的设备进行自动协商,以确定最佳的速率和双工模式。
自动协商功能通过发送和接收特定的信号来进行通信,以确定连接的设备所支持的最高速率和最佳双工模式。一旦自动协商完成,以太网接口会自动配置为最佳的速率和双工模式,从而实现最佳的网络性能和可靠性。
相关问题
STM32配置配置ETH MAC的参数
在STM32中配置ETH MAC的参数需要以下步骤:
1. 确定ETH MAC的工作模式,可以选择MII或RMII模式。
2. 配置ETH MAC的时钟源,可以选择外部时钟源或者内部PLL时钟源。
3. 配置PHY芯片的地址,使ETH MAC能够与PHY进行通信。
4. 配置ETH MAC的MAC地址,以便其他设备能够识别该设备。
5. 配置ETH MAC的传输参数,如最大传输单元、发送和接收缓冲区大小等。
6. 启动ETH MAC,使其能够开始工作。
以下是一个简单的示例代码,可以帮助你更好地了解如何在STM32中配置ETH MAC的参数:
```
#include "stm32f4xx.h"
#include "stm32f4xx_eth.h"
void ETH_Configuration(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx | RCC_AHB1Periph_ETH_MAC_Rx, ENABLE);
ETH_DeInit();
ETH_StructInit(Ð_InitStructure);
ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
ETH_InitStructure.ETH_Speed = ETH_Speed_100M;
ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;
ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable;
ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;
ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Enable;
ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;
ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;
ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;
ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;
ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;
ETH_InitStructure.ETH_ReceiveBuffer = ETH_ReceiveBuffer_Ring;
ETH_InitStructure.ETH_TransmitBuffer = ETH_TransmitBuffer_Ring;
ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;
ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable;
ETH_InitStructure.ETH_ReceiveThresholdControl = ETH_ReceiveThresholdControl_64Bytes;
ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;
ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;
ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
ETH_InitStructure.ETH_RxDescAligned = ETH_RxDescAligned_Enable;
ETH_InitStructure.ETH_TxDescAligned = ETH_TxDescAligned_Enable;
while (ETH_Init(Ð_InitStructure, PHY_ADDRESS) != ETH_SUCCESS);
ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = ETH_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
```
在上面的代码中,我们首先开启了ETH MAC和相关的外设时钟,并使用ETH_DeInit函数将ETH MAC的所有寄存器恢复到默认值。然后,我们使用ETH_StructInit函数初始化了ETH_InitStructure结构体,并设置了各种ETH MAC参数。最后,我们使用ETH_Init函数将ETH MAC初始化,并使用ETH_DMAITConfig函数和NVIC_Init函数配置相关的DMA和中断。
dm9162 stm32驱动配置程序
DM9162是一款高性能以太网PHY芯片,常用于STM32的网络应用中。下面是一个基本的STM32驱动配置程序示例:
```c
#include "stm32f10x.h"
#include "dm9162.h"
void ETH_GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_5 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void ETH_DM9162_Configuration(void)
{
ETH_InitTypeDef ETH_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx | RCC_AHBPeriph_ETH_MAC_Rx, ENABLE);
ETH_DeInit();
ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable;
ETH_InitStructure.ETH_Watchdog = ETH_Watchdog_Enable;
ETH_InitStructure.ETH_Jabber = ETH_Jabber_Enable;
ETH_InitStructure.ETH_InterFrameGap = ETH_InterFrameGap_96Bit;
ETH_InitStructure.ETH_CarrierSense = ETH_CarrierSense_Enable;
ETH_InitStructure.ETH_Speed = ETH_Speed_100M;
ETH_InitStructure.ETH_ReceiveOwn = ETH_ReceiveOwn_Enable;
ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;
ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;
ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable;
ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Enable;
ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Enable;
ETH_InitStructure.ETH_BackOffLimit = ETH_BackOffLimit_10;
ETH_InitStructure.ETH_DeferralCheck = ETH_DeferralCheck_Enable;
ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Disable;
ETH_InitStructure.ETH_SourceAddrFilter = ETH_SourceAddrFilter_Enable;
ETH_InitStructure.ETH_PassControlFrames = ETH_PassControlFrames_BlockAll;
ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable;
ETH_InitStructure.ETH_DestinationAddrFilter = ETH_DestinationAddrFilter_Normal;
ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;
ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;
ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;
ETH_InitStructure.ETH_HashTableHigh = 0x0;
ETH_InitStructure.ETH_HashTableLow = 0x0;
ETH_InitStructure.ETH_PauseTime = 0x0;
ETH_InitStructure.ETH_ZeroQuantaPause = ETH_ZeroQuantaPause_Disable;
ETH_InitStructure.ETH_PauseLowThreshold = ETH_PauseLowThreshold_Minus4;
ETH_InitStructure.ETH_UnicastPauseFrameDetect = ETH_UnicastPauseFrameDetect_Enable;
ETH_InitStructure.ETH_ReceiveFlowControl = ETH_ReceiveFlowControl_Enable;
ETH_InitStructure.ETH_TransmitFlowControl = ETH_TransmitFlowControl_Enable;
ETH_InitStructure.ETH_VLANTagComparison = ETH_VLANTagComparison_12Bit;
ETH_InitStructure.ETH_VLANTagIdentifier = 0x0;
ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable;
ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable;
ETH_InitStructure.ETH_FlushReceivedFrame = ETH_FlushReceivedFrame_Enable;
ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable;
ETH_InitStructure.ETH_TransmitThresholdControl = ETH_TransmitThresholdControl_64Bytes;
ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable;
ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable;
ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable;
ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable;
ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable;
ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat;
ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat;
ETH_InitStructure.ETH_DescriptorSkipLength = 0x0;
ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_1_1;
ETH_Init(Ð_InitStructure, DM9162_PHYAddress);
ETH_DM9162_Init(DM9162_PHYAddress);
}
int main(void)
{
ETH_GPIO_Configuration();
ETH_DM9162_Configuration();
while (1)
{
// Your code here
}
}
```
在这个示例程序中,我们定义了两个函数 `ETH_GPIO_Configuration` 和 `ETH_DM9162_Configuration`。`ETH_GPIO_Configuration` 函数配置了STM32的GPIO引脚,使其能够连接到DM9162芯片上。`ETH_DM9162_Configuration` 函数初始化了以太网控制器,并配置了DM9162 PHY芯片。
最后,在 `main` 函数中,我们调用了这两个函数,并在主循环中添加了自己的代码。