ST系列MCU EtherCAT协议栈框架结构详解

引言:本文基于ST系列协议栈程序,详细阐述了标准库下的EtherCAT协议栈整体框架结构。文中将重点介绍协议栈的组织架构、核心模块功能以及移植注意事项,为开发者提供清晰的协议栈使用指南。

一、标准库协议栈整体框架结构

ST系列协议栈标准库框架主要包含两大核心部分:Libraries和EtherCAT,这两部分又包含多个细分模块。

  1. Libraries(库函数)

1.1 CMSIS

包含与STM32微控制器内核相关的文件,提供对ARM Cortex-M内核的访问接口。

1.2 STM32FXXX_StdPeriph_Driver

包含与STM32FXXX处理器外设相关的底层驱动,为应用层提供硬件抽象接口。

  1. EtherCAT(EtherCAT协议相关模块)

2.1 MDK-ARM

  • 包含Stack_size、Vectors、Reset_Handler、NMI_Handler等文件

  • 包含uvprojx工程文件

  • 提供开发环境配置

2.2 User

包含与STM32定时器、ADC、外部中断和FSMC等配置相关的文件。

2.3 EtherCAT

包含了与EtherCAT通信协议与应用层控制相关的文件。

2.4 Src(源文件目录)

包含与EtherCAT通信协议有关的源文件,各文件功能如下:

  • Aoeappl.c:包含AOE邮箱接口

  • Bootmode.c:包含boot模式虚拟接口

  • Coeappl.c:COE应用层接口模块;处理对象字典中索引为0x1000、0x1001、0x1008、0x1009、0x100A、0x1018、0x10F1、0x1C00、0x1C32、0x1C33等通用对象,实现对象字典的初始化、添加、移除和清除等操作

  • Diag.c:包含诊断对象处理

  • Ecataoe.c:包含AOE邮箱接口

  • Ecatappl.c:EtherCAT从站应用层接口,整个协议栈运行的核心模块,处理EtherCAT从站状态机和过程数据接口,实现输入/输出过程数据对象的映射处理、ESC与处理器本地内存的输入/输出过程数据交换

  • Ecatcoe.c:包含COE邮箱接口函数

  • Ecateoe.c:包含EOE邮箱接口函数

  • Ecatfoe.c:包含FOE邮箱接口函数

  • Ecatslv.c:处理EtherCAT状态机模块;状态机转换请求由主站发起,主站将请求状态写入ALControl寄存器,从站采用查询方式获取状态转换事件,通过AL_ControlInd()函数处理状态机转换,配置SM通道开启/关闭,检查SM通道参数

  • Ecatsoe.c:包含一个演示SOE的简短示例

  • El9800appl.c:提供与应用层接口的函数和主函数

  • Emcy.c:包含紧急接口

  • Eoeappl.c:包含一个如何使用EOE服务的例子

  • Foeappl.c:包含一个如何使用FOE的例子

  • Mailbox.c:处理EtherCAT邮箱服务模块,包括邮箱通信接口初始化、邮箱通道参数配置、根据当前状态机开启/关闭邮箱服务、邮箱通信失败后的重复发送请求、邮箱数据的读写等

  • Objdef.c:访问COE对象字典模块,实现读写对象字典、获取对象字典入口及具体处理函数

  • Sdoserv.c:SDO服务处理模块,处理所有SDO信息服务

2.5 Inc(头文件目录)

包含与EtherCAT通信协议有关的头文件,各头文件功能如下:

  • applInterface.h:定义应用程序接口函数

  • bootmode.h:声明在引导状态下需要调用的函数

  • cia402appl.h:定义与cia402相关的变量、对象和轴结构

  • coeappl.h:对coeappl.c文件中的函数进行声明

  • ecat_def.h:定义从站样本代码配置

  • ecataoe.h:定义和AOE相关的宏、结构体,并对ecataoe.c文件中的函数进行声明

  • ecatappl.h:对ecatappl.c文件中的函数进行声明

  • ecatcoe.h:定义错误码、COE服务和COE结构相关的宏,并对ecatcoe.h文件中的函数进行声明

  • ecateoe.h:定义与EOE相关的宏和结构体,并对ecateoe.c文件中的函数进行声明

  • ecatfoe.h:定义与FOE相关的宏和结构体,并对ecatfoe.c文件中的函数进行声明

  • ecatslv.h:对数据类型、从站状态机状态、ESM转换错误码、应用层状态码、从站工作模式、应用层事件掩码和全局变量进行定义

  • ecatsoe.h:定义与SOE相关的宏和结构体,并对ecatsoe.c文件中的函数进行声明

  • el9800appl.h:对对象字典中索引为0x800、0x1601、0x1802、0x1a00、0x1c12、0x1c13、0x6000、0x6020、0x7010、0x8020、0xf000、0xf0100、0xffff等特定对象进行定义

  • esc.h:对EtherCAT从站控制器芯片中寄存器的地址和相关掩码进行说明

  • mailbox.h:定义邮箱通信相关的宏和结构体,并对mailbox.c文件中的函数进行声明

  • mcihw.h:通过并行接口来访问ESC的定义和宏

  • objdef.h:定义某些数据类型,对支持同步变量的类型进行宏定义,定义描述对象字典的结构体类型

2.6 Port(外围端口初始化与驱动)

包含与从站外围端口初始化和驱动相关的文件:

Mcihw.c:包含对微控制器GPIO、定时器、ADC及外部中断等外设初始化程序,同时提供读取和写入EtherCAT从站控制器芯片中寄存器的函数

二、标准库编程整体框架结构

根据标准库函数编写的程序可分为CMSIS、MDK-ARM、Doc、User、Hardware、Src、Stack、STM32Fxxx_StdPeriph_Driver、SYSTEM几部分,程序有如下几个部分组成:

  1. Start(启动文件)
  • system_stm32fxxx.c:包含片上核外外设的地址和中断定义

  • core_cm3.c:包含用于访问内核寄存器的名称、地址定义

  • startup_stm32fxxx_hd.s:STM32微控制器的启动文件

  1. Src(源文件)
  • foeappl.c:包含一个如何使用FOE的例子

  • coeappl.c:COE应用层接口模块

  • ecatappl.c:EtherCAT从站应用层接口,整个协议栈运行的核心模块

  • aoeappl.c:包含AOE邮箱接口

  • eoeappl.c:包含一个如何使用EOE服务的例子

  • el9800appl.c:提供了与应用层接口的函数和主函数

  1. Hardware(硬件初始化)
  • el9800hw.c:对从站开发板的外设和GPIO进行初始化,定义读取和写入从站控制器芯片DPRAM中寄存器的函数,实现中断入口函数的定义

  • SPI1.c:对微控制器的SPI外设进行配置

  • ADC1.c:对微控制器的ADC和DMA通道进行配置

  • EXTI.c:对微控制器外部中断进行配置

  • Timer.c:对微控制器定时器及其中断进行配置

  1. Stack(协议栈核心处理)
  • ecatslv.c:处理EtherCAT状态机模块

  • mailbox.c:处理EtherCAT邮箱服务模块

  • objdef.c:访问COE对象字典模块

  • sdoserv.c:SDO服务处理模块

  • ecatcoe.c:包含COE邮箱接口函数

  • bootmode.c:包含boot模式虚拟接口

  • diag.c:包含诊断对象处理

  • ecataoe.c:包含AOE邮箱接口

  • ecateoe.c:包含EOE邮箱接口函数

  • ecatfoe.c:包含FOE邮箱接口函数

  • ecatsoe.c:包含一个演示SOE的简短示例

  • emcy.c:包含紧急接口

  • fc1100hw.c:包含1100的外围配置文件

  1. Library(标准外设库)

包含标准外设库文件:

  • misc.c:提供外设对内核中NVIC(中断向量控制器)的访问函数

  • stm32fxxx_adc.c:包含与STM32FXXX的ADC外设编写的库函数文件

  • stm32fxxx_dma.c:包含与STM32FXXX的DMA外设编写的库函数文件

  • stm32fxxx_exti.c:包含与STM32FXXX的EXTI外设编写的库函数文件

  • stm32fxxx_fsmc.c:包含与STM32FXXX的FSMC外设编写的库函数文件

  • stm32fxxx_gpio.c:包含与STM32FXXX的GPIO外设编写的库函数文件

  • stm32fxxx_pwr.c:包含与STM32FXXX的PWR外设编写的库函数文件

  • stm32fxxx_rcc.c:包含与STM32FXXX的RCC外设编写的库函数文件

  • stm32fxxx_spi.c:包含与STM32FXXX的SPI外设编写的库函数文件

  • stm32fxxx_syscfg.c:包含与STM32FXXX的SYSCFG外设编写的库函数文件

  • stm32fxxx_tim.c:包含与STM32FXXX的TIM外设编写的库函数文件

  • stm32fxxx_usart.c:包含与STM32FXXX的USART外设编写的库函数文件

三、程序修改与移植注意事项

  1. 移植MCU

1.1 替换库函数

根据需要移植的MCU更换相应的库函数,将更换后的库函数路径放进程序中。例如,以STM32F103替换STM32F407为例,将所有含stm32f4xx的.c和.s文件都替换成stm32f10x.c和.s文件。

1.2 更改芯片型号和名称

更改MCU型号:以STM32F103替换STM32F407为例,将芯片型号由STM32F407ZGTx改为STM32F103VB。

更改预处理宏定义:将宏定义内的名称由STM32F40_41xxx改为STM32F10x_MD。

1.3 更改程序

编译后根据报错信息更改程序,修改完成后将程序下载到开发板内,再根据具体需求进一步修改。例如,以STM32F103替换STM32F407的EXTI中断配置为例,根据报错信息和结构体更改初始化程序。

  1. SPI的读写函数

在进行读写指令之前,使用SPI_Cmd()函数对SPI的外设进行失能后再使能,确保读写功能正常使用。

结语

ST系列MCU的EtherCAT协议栈框架结构清晰,模块化设计便于开发者理解和使用。通过合理组织各模块,开发者可以高效地实现EtherCAT从站功能,同时也能方便地进行MCU移植和功能扩展。在实际开发过程中,需要特别注意SPI外设的正确配置,以及在移植过程中对库函数和芯片型号的准确替换,以确保协议栈能够稳定运行。

相关推荐
J_Xiong01172 小时前
世界动作模型(WAM):让机器人学会“先想象,再行动“的下一代具身大脑
机器人·wam
上海云盾安全满满2 小时前
海外服务器使用高防CDN的优势
运维·服务器
Mortalbreeze2 小时前
进程间通信 ---- System V 共享内存
linux·运维·服务器
国科安芯2 小时前
低噪声LDO如何破解测试测量与医学成像的电源困局
网络·单片机·嵌入式硬件·安全性测试
hyunbar2 小时前
腾讯云OpenClaw服务器配置AI绘画完整指南
服务器·ai作画·腾讯云
许彰午2 小时前
开发转兼职DBA(五):从救火到防火——参数、内存、监控、备份
数据库·dba
草木红2 小时前
Redis 语法基础入门
数据库·redis·缓存
fiveym2 小时前
Debian 12 PXE 安装报错:Bad archive mirror 复合型故障排查全记录
运维·服务器·debian·php
一条破秋裤3 小时前
【0527】Jetson Nano U-Boot 有线网卡与 VMware 直连网络调试笔记
网络·笔记