STM32H743 SOEM EtherCAT基于STM32H743芯片和SOEM的EtherCAT主站源码 提供配套CUBE工程。
SOEM协议栈使用1.3.1版本。
可配套NUCLEO-H743ZI开发板使用。
支持DC同步。
可配合汇川IS620N、三洋RS3、赛孚德ASD620B、埃斯顿ProNet、迈信EP3E、台达A2-E、伟创SD700、松下A5B/A6B和欧姆龙G5系列驱动器使用
移植 SOEM 到嵌入式平台的过程就是重写 SOEM 抽象层的过程。在此之前,
先了解一下以太网口电路。
STM32F767 片上集成了一个 EMAC(802.3),在 F767 开发板上,通过 RMII外接一个 PHY 芯片,型号是 LAN8742A-CZ-TR。EMAC 支持 MII 或者 RMII 与PHY 芯片连接。MII 需要 16 个数据和控制信号引脚与外部 PHY 连接,而 RMII只需要 7 个数据引脚[42]。RMII 接口引脚图和开发板上 RMII 接口电路图如下[43]:
PHY 芯片时钟源并不是 MAC 和 PHY 之间的 50MHz 时钟信号RMII_REF_CLK,是 PHY 芯片自己的 25MHz 时钟供应信号。PHY 芯片LAN8742A 通过 25MHz 时钟输入,在 REF_CLK 上驱动输出一个 50MHz 信号;加上两组数据发送和接收信号,可以达到 100Mbps 的全双工通信。
STM32F767 具有 216MHz 的 CPU 频率,内含多个硬件定时器,可提供微秒级别精度的系统时钟[44]。传统方式下,使用 tick 机制实现系统时钟,选取一个硬件定时器如 TIM6 实现系统时间。TIM6 的计数器长度是 16 比特。计数器时钟设定为 1MHz,即计时周期是 1us。在这样的设定下,16 比特的计时器最多计时 65535 微秒(65 毫秒),然后卷绕到 0。设定计数器计数到 50000 则产生一次中断,每次中断 tick 增加 1,计数器重新回到 0 计数。通过 ticks 数和计数器 CNT 数组合后系统时间值为:icks*50000+TIM6->CNT。
按照这种机制实现系统时钟,则代价是每隔 50ms 中断一次,对系统造成干扰。为了彻底免除这个干扰,采用硬件定时器级联技术,用两个 32 位的定时器30实现 64 比特系统时间。STM32F767 提供了 14 个硬件定时器,其中 TIM2 和 TIM5是 32 比特长度的硬件定时器,本文将 TIM2 和 TIM5 二者级联起来,如图所示
STM32 HAL eth 驱动及使用STM32 为所有外设提供了 HAL(硬件抽象层)驱动,以方便应用使用外设,减少开发时间。但 HAL 驱动也有一定的局限性,例如在对 MAC 单元进行参数配置时,无法使能混杂模式,但是驱动程序可以直接对硬件寄存器编程来解决该问题。
(1)定义一个 ETH_HandleTypeDef handle 结构。ETH_HandleTypeDef 代表一个以太网硬件设备,STM32F767 集成了一个 Ether MAC,所以定义一个全局变量即可。在 lw_emac.c 中如下定义:ETH_HandleTypeDef ethHandle,若 MAC中断使能,则在中断处理中使用 ethHandle 变量;若不使能中断,则采用轮询方式接收数据帧,本文移植使用轮询方式。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)