PAGE1
PAGE1
STM32F4系列的以太网通信
以太网控制器概述
STM32F4系列微控制器集成了一个以太网控制器,该控制器支持10/100Mbps的以太网通信。以太网控制器通过硬件实现以太网协议栈的低层功能,包括MAC(媒体访问控制)层和PHY(物理层)接口。此外,STM32F4还提供了一个DMA(直接内存访问)控制器,用于高效地传输数据。
以太网控制器的主要功能
MAC层:实现以太网协议的媒体访问控制功能,包括帧的接收和发送、地址过滤、CRC生成和校验等。
PHY接口:通过MII(介质独立接口)或RMII(简化介质独立接口)与外部PHY芯片通信,实现物理层的数据传输。
DMA控制器:通过DMA传输数据,减轻CPU的负担,提高数据传输效率。
硬件过滤:支持单播、多播和广播地址的过滤,减少不必要的数据处理。
时间戳功能:支持精确的时间戳功能,用于网络时间协议(NTP)等应用。
唤醒功能:支持通过以太网唤醒MCU,适用于低功耗应用。
以太网通信的硬件配置
外部PHY芯片的连接
STM32F4系列微控制器通常通过RMII接口与外部PHY芯片连接。RMII接口使用较少的引脚,适合成本敏感的应用。以下是RMII接口的引脚配置:
STM32F4引脚|功能|连接到PHY芯片引脚|
|————–|——————|——————|
PA1|RMII_REF_CLK|RMII_REF_CLK|
PA2|RMII_MDIO|RMII_MDIO|
PA3|RMII_MDC|RMII_MDC|
PA7|RMII_CRS|RMII_CRS|
PB11|RMII_TXD1|RMII_TXD1|
PG11|RMII_TXD0|RMII_TXD0|
PG13|RMII_TXEN|RMII_TXEN|
PG14|RMII_RXD0|RMII_RXD0|
PG15|RMII_RXD1|RMII_RXD1|
PD8|RMII_RXER|RMII_RXER|
电源和时钟配置
电源:确保STM32F4和外部PHY芯片的电源供应稳定,通常需要5V和3.3V电源。
时钟:以太网控制器需要一个50MHz的时钟信号,通常通过外部晶振或内部时钟源提供。
初始化步骤
启用以太网控制器的时钟:通过RCC(复位和时钟控制)模块启用以太网控制器的时钟。
配置以太网引脚:使用GPIO(通用输入输出)模块配置RMII接口的引脚。
初始化以太网控制器:配置MAC和DMA控制器的参数,初始化以太网控制器。
配置外部PHY芯片:通过MDIO接口配置外部PHY芯片,确保其正常工作。
以太网通信的软件配置
配置以太网控制器
启用时钟
在初始化以太网控制器之前,需要先启用其时钟。以下代码示例展示了如何通过RCC模块启用以太网控制器的时钟:
//启用以太网控制器的时钟
voidETH_InitClock(void){
//使能以太网和以太网MAC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC|RCC_AHB1Periph_ETH_TX|RCC_AHB1Periph_ETH_RX,ENABLE);
}
配置引脚
使用GPIO模块配置RMII接口的引脚。以下代码示例展示了如何配置RMII接口的引脚:
//配置RMII接口的引脚
voidETH_InitGPIO(void){
GPIO_InitTypeDefGPIO_InitStructure;
//配置PA1(RMII_REF_CLK)
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA,GPIO_InitStructure);
GPIO_PinA