基于STM32F407-LAN9252的EtherCAT从站协议移植过程

这篇具有很好参考价值的文章主要介绍了基于STM32F407-LAN9252的EtherCAT从站协议移植过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

EtherCAT移植过程

前言:刚拿到一个EtherCAT的开发需求,本来想安心当个CV战士的,结果在网上找了一圈,只有https://www.hexcode.cn/article/5e3ee9a835616641b2daef97 这篇写的相对详细,看来偷不了懒了,只有自己重新整理开发了。

1、需求

基于STM32F407芯片、LAN9253芯片(自带PHY芯片),验证8路I/O程序的通信。

2、使用到的工具

  • 协议栈生成:Excel(编辑协议栈预文件),SSC-5.11(生成ESC协议栈文件),XMLSpy(查看XML文件);
  • 代码编写:CubeMX,Keil5;
  • 程序验证:TwinCAT3.0。

3、SSC构建协议栈文件和XML

3.1、配置SSC 协议栈/XML

SSC-5.11和SSC-5.12生成的协议栈文件差别有点大,SSC-5.11更适配MicroChip官网提供的SSC SDK。打开SSC,选择8bit I/O模板,点击“OK”生成Excel文件(需要保证Excel文件是非加密状态)。

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

SSC-5.11和SSC-5.12生成的Excel文件区别在于5.12有一段0xFxxx的片区,用于通道数量的填写。5.11生成的协议栈不用在意这个,状态转换的时候会忽略这个步骤。(所以不能用非同一SSC配出来的XML和协议栈!)

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

打开5.11生成的Excel文件,配置如下:

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

0x6000定义的是输入,0x7000定义的是输出,配置完成后保存,退出。

这个时候有的SSC会自动加载Excel文件,如果没有自动加载,点击Tool->Application->Import,加载刚才配置的Excel文件。

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

RT2000是自定义的SSC协议栈名称,右边显示的是所使用到的SSC协议栈版本。附一张5.12配出的文件:

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

可以很明显的看出协议栈里的很多文件已经变更了,5.11版的协议栈和官方给的SDK更适配。参考“AN_ET9300.pdf”文件,SSC选项设置如下:

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

选项设置好后点击Project->Create New Slave File,生成XML文件和协议栈文件夹。

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

3.2、修改SSC 协议栈/XML

由于SSC是针对倍福公司的软硬件生成协议栈,而我们使用的是基于LAN9252芯片和STM32F4芯片的程序架构,所以需要更改一些东西:

  • XML的EEPROM类型;
  • 协议栈增加LAN9252.c/LAN9252.h文件。

3.2.1、XML-> EEPROM

打开XML文件,Descirptions->Devices->Device->Eeprom->ConfigData:

800E00CC8813f000000000800000

保存,找到TwinCAT3路径的XML路径:C:\TwinCAT\3.1\Config\Io\EtherCAT,把TwinCAT3自带的XML模板全删了,然后把自己生成的XML文件丢进去。

3.2.2、增加LAN9252.c/LAN9252.h文件

Micrchip官网下载SDK(“LAN9252-PIC32-SDK-1.1”),里面有这个两个文件,我们只需要里面的代码架构,里面的内容都可以自己写。

4、创建MDK工程,移植协议栈

4.1、CubeMX创建STM32F407工程

此过程中,我们需要开启以下引脚功能:

  • 外部晶振;
  • SPI1;
  • 1个定时器中断;
  • 3个外部中断(一个主中断,两个时钟同步中断,该程序使用的是DC同步,如果是用Free同步或者是SM同步,则只需要开一个主中断,主中断和定时器中断的优先级一样且要高于时钟同步中断);
  • 所使用的的I/O引脚。
  • 串口(非必须)。

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

点击Project Manager,添加工程名,选择MDK-ARM,点击Create Code生成对应的MDK工程。

4.2、移植协议栈

把第3章生成的协议栈添加进MDK文件树中,如下图:

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

RT2000.c是SSC生成的“从站APPlication”文件,I/O引脚映射和应用层逻辑在这个文件里面修改;

LAN9252.c是SDK里面的,用于完成MCU和LAN9252芯片之间的通信建立。

重点就在这两个文件里面,除此之外,在spi.c文件里面创建对应的spi读写函数就行了。

接下来按照顺序,先修改spi,在修改LAN9252,最后修改APPlication文件。

4.2.1、SPI.c

根据SDK文件里面的SPIDriver,创建SPI发送/SPI接收函数,其实也可以直接Copy过来用,删除SPIOpen(),SPIPut(),修改一下SPIWrite()和SPIRead()对应的读写HAL函数,补一下(void)。最后修改一下

SPI_CS的置高/置低HAL函数:

#define DESELECT_SPI    HAL_GPIO_WritePin(SPI1_NSS_GPIO_Port,SPI1_NSS_Pin,GPIO_PIN_SET)

#define SELECT_SPI        HAL_GPIO_WritePin(SPI1_NSS_GPIO_Port,SPI1_NSS_Pin,GPIO_PIN_RESET)

#define CSHIGH()        DESELECT_SPI

#define CSLOW()            SELECT_SPI

4.2.2、LAN9252.c

由于SDK里面的文件是针对MicrChip公司自家的PIC32芯片,所以改动内容有点多,但都是把PIC32的函数格式改成HAL函数格式。

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

这里,关于定时器,我Cubemx配置的是tim2,在移植过程中,担心基本定时器不够用,后面改起来麻烦,就直接在代码里自己换成了tim7。这里可以根据需要,换成自己的定时器。

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

然后是中断服务函数:

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

Lan9252.c->HW_EscWirte()里面,修改如下:

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

删除这个函数之后的所有函数,那些函数是PIC的中断函数,我们已经自定义了。

4.2.3、RT2000.c – APP程序

这个文件中,根据需要修改我们的程序逻辑就好。

4.2.3.1 停止输出

UINT16 APPL_StopOutputHandler(void)

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

4.2.3.2 输入地址映射

void APPL_InputMapping(UINT16* pData)

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

4.2.3.3 输出地址映射

void APPL_OutputMapping(UINT16* pData)

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

4.2.3.4 APP应用逻辑

void APPL_Application(void)

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

4.3、补充说明

4.3.1、UINT16_VAL 和 UINT32_VAL

这是PIC芯片的库文件包含,如果不想做太多更改,在自己的spi.h文件中直接添加如图联合体:

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

4.3.2、MEM_ADDR长度

UINT16用SPIWriteWord()

UINT32用SPIWriteDWord()

4.3.3、HW_Init()

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

像 #if USE_SPI 这样的筛选函数,直接删掉。

5、程序验证

使用TwinCAT3创建程序,更新EEPROM:

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

基于STM32F407-LAN9252的EtherCAT从站协议移植过程

至此,EtherCAT从站协议栈移植完毕。

代码部分:基于STM32F407-LAN9252的EtherCAT从站协议移植过程,代码部分https://blog.csdn.net/qq_41580996/article/details/130292031

TwinCAT调试过程中出现的错误码,参考倍福官方给的详解:

https://infosys.beckhoff.com/english.php?content=../content/1033/ethercatsystem/1072497163.html&id=

点赞-收藏-over。文章来源地址https://www.toymoban.com/news/detail-491158.html

到了这里,关于基于STM32F407-LAN9252的EtherCAT从站协议移植过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F407 移植 FreeRTOS

    本实验是基于正点原子 STM32F407ZG 探索者开发板完成的,所以需要一个STM32F407ZG 探索者开发板 用于移植的基础工程(下面会讲) FreeRTOS源码(下面会讲) 本实验所有用到的代码:基于正点原子STM32F407的FreeRTOS移植工程.zip 1.1 移植前准备 1.1.1 基础工程 由于后续需要用到 LED、

    2024年02月08日
    浏览(55)
  • STM32F407移植OpenHarmony笔记1

    参考文档: OpenAtom OpenHarmony width=device-width,initial-scale=1.0 https://docs.openharmony.cn/pages/v3.2/zh-cn/device-dev/get-code/gettools-acquire.md/ 搭建环境 安装linux系统: Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-91-generic x86_64) 下载源代码:我选择的是V3.2.4版本 https://repo.huaweicloud.com/openharmony/os/3.2.4/code-v3.2.4-Rele

    2024年01月25日
    浏览(44)
  • 匿名上位机V7.12协议编程(基于STM32F407+CubeMX+UART外设通信)

    本篇以STM32F407VET6主控为基础进行论述。 文章的目的在于记录和引导, 传递一些编写通信类功能会用到的基本思想 ,以及组合这些功能的思想。 匿名上位机V7版本的功能在本篇没有全部写出来,而是针对本上位机常用的功能举例来描述。 相信读者通过仔细阅读笔者的思想引

    2023年04月14日
    浏览(48)
  • STM32开发之Modbus协议(RTU从站)

    说明 1、本文不做协议格式的讲解,只做实现,如需了解协议格式,自行搜索 2、本文不依赖于硬件相关的资源,建立在硬件通讯之上,通过回调的形式和对应的硬件进行关联 3、相关协议内容参照,上一篇RTU主站 宏定义(modbus_core_define) crc校验(modbus_core_crc) 头文件 源文件

    2024年02月11日
    浏览(28)
  • 十四.EtherCAT开发之ST MCU STM32F407ZGt6+ AX58100的开发FOE应用

    STM32F407ZGt6与AX58100是 SPI连接,工作在SPI模式。 FoE(File Access over EtherCAT)可实现EtherCAT节点之间的文件传输。 boot mode与FOE支持 FOE 说是要在状态机的boot mode下运行,实际测试了在OP模式也能收数据。可能是为了稳定,减少出错把,毕竟是升级固件。 14.1.1 XML支持字段 XML名称—AX58

    2024年02月10日
    浏览(29)
  • STM32F407移植1588v2(ptpd)

    硬件: STM32F407ZGT6开发板 软件: VSCode arm-none-eabi-gcc openOCD st-link 在github搜到一个在NUCLEO-F429ZI开发板上移植ptpd的example,因为和F407差别很小,所以就打算用这个demo移植到手头的开发板上。因为目前只需要slave,所以只调试了slave。据介绍,master好像原作者没有充分测试过。 源项

    2024年02月09日
    浏览(37)
  • GD32F450+LAN8720A,#FreeRTOS_Plus_TCP 网络协议栈移植教程

    (此博文在2023年10月写完后,在2023年11月有更新,更新内容包括博文内容与代码文件,代码效果不变,但更新后的逻辑更合理) FreeRTOS-Plus-TCP 是一种适用于 FreeRTOS 的可扩展的开源和线程安全 TCP/IP 堆栈。 FreeRTOS-Plus-TCP 提供了一个熟悉的 基于标准 Berkeley 套接字的接口, 简单易用

    2024年01月16日
    浏览(37)
  • STM32F407+LWIP+DP83848以太网驱动移植

      最近有个项目上需要用到网络功能,于是开始移植网络相关代码。在移植的过程中感觉好难,网上找各种资料都没有和自己项目符合的,移植废了废了好的大劲。不过现在回头看看,其实移植很简单,主要是当时刚开始接触网络,各种新的知识和概念扑面而来,加上LWI

    2024年02月12日
    浏览(27)
  • STM32 F407探索者移植正点原子LCD例程(CubeMx)

    先说明本次实验所使用的硬件型号,本次实验使用正点原子F407探索者V3.4版本,屏幕尺寸为4.3寸 TFTLCD。 本文章主要讲解如何移植正点原子的官方LCD代码,并不涉及太多理论知识。然后,官方的LCD代码应该是更新过了,因为之前也移植过一次其他板子的,好像也不是酱紫,所以

    2024年04月17日
    浏览(89)
  • stm32f407移植LVGL8.3.1实况(所有bug调试现场,最终成功点灯)

    声明: 本文主要参考 stm32移植lvgl_NULL_1969的博客-CSDN博客_lvgl stm32 及 STM32移植LVGL8.0.2超详细的保姆级教程附移植好的工程文件 ,底层驱动主要采用正点原子触摸屏实验和定时器实验 1.1 主要硬件接口 1.1.1 触摸屏 主要需要触摸屏来实现屏幕的显示及触摸。 触摸屏需要底层的接

    2024年01月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包