高性价比高实时Ethercat现场总线工业运动控制方案
#ethercat#st32
以上代码保持不变,仅作说明。
4.2 OSHW(硬件抽象层)
- GPIO:用于控制 EtherCAT 从站的 LED、复位 引脚。使用
HAL_GPIO_WritePin完成高低电平切换。 - 计时器:DC 模式需要精确的 分布式时钟(Distributed Clock)同步,建议使用 TIM1(高级计时器)配合 输入捕获(Input Capture)来捕获从站的时钟脉冲。
- DMA:Ethernet MAC 的收发缓冲区采用 DMA 方式,需在
HAL_ETH_Init时配置ETH_DMA_TX_DESC_CNT与ETH_DMA_RX_DESC_CNT,确保足够的描述符数量。
4.3 NICDRV(网络驱动)
- 初始化:调用
HAL_ETH_Init完成 MAC、PHY 的初始化。注意 PHY 的 自动协商 必须成功,否则会导致帧丢失。 - 收发函数:SOEM 通过
nicdrv_receive与nicdrv_send与底层驱动交互。实现时需处理 零拷贝(Zero‑Copy)以降低 CPU 负载。 - 中断:Ethernet 中断(
ETH_IRQn)用于通知帧到达,ISR 中仅设置标志位,实际处理在nicdrv_receive中完成,避免长时间占用中断。