1. 项目背景与核心需求
最近在做一个工业控制项目,需要用到APM32F107V6这款国产MCU的以太网功能。作为替代STM32F107的国产方案,极海半导体的这款芯片性价比确实不错,但官方资料里关于DP83848CVV物理层芯片的驱动实现写得比较简略。在实际调试过程中,我踩了不少坑,这里把完整的驱动实现过程记录下来,给后来者做个参考。
这个方案的核心价值在于:
- 国产MCU+PHY芯片组合,完全自主可控
- 百兆以太网通信满足大多数工业场景需求
- 硬件设计简单,BOM成本可控
2. 硬件设计要点
2.1 原理图设计注意事项
在画原理图时,有几个关键点需要特别注意:
-
时钟电路设计:
- APM32F107V6需要外部提供25MHz时钟给DP83848CVV
- 建议使用±50ppm精度的有源晶振
- 时钟走线要尽量短,避免干扰
-
变压器选型:
- 推荐使用带中心抽头的H1102NL等工业级网络变压器
- RJ45接口要选择带LED指示灯的型号方便调试
-
电源设计:
- DP83848CVV需要3.3V供电
- 建议使用LDO单独供电,纹波要小于50mV
- 每个电源引脚都要加0.1μF去耦电容
2.2 PCB布局布线要点
实际布线时我总结了这些经验:
-
阻抗控制:
- 差分线阻抗要控制在100Ω±10%
- 建议使用4层板,差分对走在内层
-
等长处理:
- TX/RX差分对长度差要小于5mm
- 组内差分线长度差小于0.5mm
-
隔离设计:
- 变压器初级和次级之间要留够3mm间距
- 模拟地和数字地单点连接
3. 软件驱动实现
3.1 初始化流程
驱动初始化要按这个顺序进行:
c复制void ETH_Init(void)
{
// 1. 使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,
