0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CANOpen系列教程14_协议源码移植 (二)

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-06 15:06 次阅读

1写在前面

该系列教程上一篇文章《协议源码移植(一)》算是对CANOpen移植的准备工作,如果想要理解移植过程的知识,其实还有许多内容得了解。

本文挑一些重点来讲述,从协议源码添加到工程,源代码理解,到最后输出效果。

提示:该系列教程基于:CanFestival架构、STM32F1芯片FreeRTOS操作系统Keil MDK-ARM开发环境。

2

添加源码、路径

本节内容针对初学者做出简要描述,相关内容可参看文章《Keil系列教程02_新建基础软件工程》。

2.1 添加组、文件

简单来说,就是在你已建好的工程中添加与CANOpen相关的组和文件,如下图:

2.2 添加路径

添加CANOpen源码的inc头文件等相关路径,编译的时候才能找到对应文件。

3

添加代码及分析

移植的重要过程就是添加、删除和修改源代码这一步骤。从教程上一篇文章下载,并看过源代码的朋友就会发现,其实我们需要添加的代码并不多,主要就是需要实现几个底层的驱动函数。

下面将重要的几点罗列出来。

1.修改canfestival.h文件

上文说了一下:添加三行语句,防止递归包含。

这里就是CANOpen定义的底层驱动接口,接口函数具体代码需要我们自己实现。

canSend这个函数被CANOpen源代码调用的最多,我们最好不修改函数接口,同时需要我们实现(我在canopen_drv.c中实现的)。

其它initTimer、 canInit等函数接口,在源码中没有调用,我也没有按照这套接口来实现(初始化我在bsp下实现的)。

2.底层驱动初始化代码

上面说的initTimer、 canInit初始化,我这边为了与我代码一致,使用TIM_Initializes、CAN_Initializes替代。

分别位于bsp_timer.c 和 bsp_can.c下面,实现的具体内容这里不描述,具体可以下载源码工程参看。

3.定时器调度相关接口

其中setTimer和getElapsedTime这两个函数会被timer.c协议源文件调用。在timer.h里面有什么(如下图),但函数体没有实现,需要我们自己实现。

同时,TimeDispatch函数已经实现,定义在timer.c,但需要被定时调用(调度)。

4.CAN发送接口函数canSend

这个CAN发送函数相当重要,接口最好不要自定义,因为scr下面多个源文件都调用了该函数。

同时,发送函数会被定时调度。所以,如果你调度方式像我例程那样,使用定时器中断的方式实现。那么,你就要考虑在中断函数里面发送的情况。

以上就是CANOpen移植,底层驱动相关的一些接口实现和说明。这部分内容,CanFestival框架提供源码是定义在drivers下面,比如STM32F1的就是cm3下面的cm3.c:

我单独提出来实现这些驱动函数是因为我跑了一个FreeRTOS系统。当然,你的驱动也可按照drivers下面那样实现。

5.其它

A.发送和接收缓存

我这边是通过队列来实现发送和接收缓存,而cm3.c是通过MessBuf_Write和MessBuf_Read来实现缓存。

B.中断接收

我使用CAN中断接收数据,和定时器中断调度。

提示:我中断入口函数是宏定义实现的,需要包含宏定义头文件。

#define CAN_RX_IRQHandler USB_LP_CAN1_RX0_IRQHandler

#define CANOPEN_TIM_IRQ_Handler TIM2_IRQHandler

C.配置节点

配置节点ID,节点的状态,这里只是简单的Demo,没有添加应用代码。

4

工程下载及运行效果

1.下载工程“CANOpen工程模板(含主、从站-心跳)”

https://pan.baidu.com/s/1LzD0Epc-Z8vlHsb-sD3WVw

提取码:l2dc

2.运行效果

我提供的例程是一个只有心跳(间隔时间我们配置为1000ms)Demo工程。所以,启动之后,你会发现总线上间隔1秒有一个心跳。

下图是我通过CAN分析仪抓取的CAN总线数据(如果你没有分析仪,可以用我《系列教程6》提供的例程,通过串口打印)

先启动一会儿主站,然后关闭,再启动从站的数据,重要信息我都标记出来了。

A.上线报文:ID:0x700 Data:0

B.网络管理:ID:0x000 Data:00代表管理所有节点 Data:80代表复位节点

C.心跳报文:ID:0x700 Data:05代表Operational操作状态

提示:主站具有网络管理,而从站没有。同时,数据值(如81、05)的含义可参看CiA 301手册网络管理的章节(后期进行讲述)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2775

    浏览量

    464565
  • CANopen
    +关注

    关注

    8

    文章

    272

    浏览量

    43834
  • STM32F
    +关注

    关注

    1

    文章

    40

    浏览量

    18336
收藏 人收藏

    评论

    相关推荐

    2025必备知识,CANopen转EtherCAT协议允许配备啥协议的电气设备

    CANopen转EtherCAT稳联技术(WL-COP-ECAT)协议允许配备 CANopen 的设备在基于 EtherCAT 的工业以太网网络上使用。
    的头像 发表于 12-29 09:50 195次阅读
    2025必备知识,<b class='flag-5'>CANopen</b>转EtherCAT<b class='flag-5'>协议</b>允许配备啥<b class='flag-5'>协议</b>的电气设备

    AGV行业设备协议新生态:canopen转Profinet网关揭秘!

    在AGV行业快速发展的今天,如何实现设备的高效连接和通信成为了许多企业关注的焦点。开疆智能Canopen转Profinet网关KJ-PNG-205的应用恰好解决了这一问题,它通过将传统的Canopen协议转换为现代工业网络中广泛
    的头像 发表于 12-09 17:13 354次阅读
    AGV行业设备<b class='flag-5'>协议</b>新生态:<b class='flag-5'>canopen</b>转Profinet网关揭秘!

    CANopen协议架构和应用原理

    稳健的通信协议和接口在工业电机控制应用中发挥着重要作用。在工业驱动应用中,当需要多个处理器元件来持续通信以完成复杂任务时,CANopen因其易于集成、高度可配置,以及支持高效、可靠的实时数据交换等特性,受到了众多工程师青睐。本文从低功耗电机控制应用的角度深入探讨
    的头像 发表于 11-04 13:49 507次阅读

    MODBUS TCP 转 CANOpen

    产品概述 SG-TCP-COE-210 网关可以实现将 CANOpen 接口设备连接到 MODBUS TCP 网络中。用户不需要了解具体的 CANOpen 和 Modbus TCP 协议即可实现
    的头像 发表于 09-24 13:59 343次阅读
    MODBUS TCP 转 <b class='flag-5'>CANOpen</b>

    DeviceNet转CANopen协议网关(DeviceNet转CANopen

    一,设备主要功能 捷米特JM-DNT-COP网关实现DeviceNet总线和CANopen网络连接起来。本网关连接到DeviceNet总线中作为从站使用,连接到CANopen总线中作为主站
    的头像 发表于 09-10 10:16 393次阅读
    DeviceNet转<b class='flag-5'>CANopen</b><b class='flag-5'>协议</b>网关(DeviceNet转<b class='flag-5'>CANopen</b>)

    EtherNet/IP转CANopen主站协议转换网关

    ,通过网关向CANopen协议的输送装置发送指令,将组装好的部件输送至下一工位。 ,典型应用拓扑图 三,
    的头像 发表于 09-02 11:21 282次阅读
    EtherNet/IP转<b class='flag-5'>CANopen</b>主站<b class='flag-5'>协议</b>转换网关

    EtherNet/IP转CANopen主站协议网关(JM-EIP-COP)

    ,通过网关向CANopen协议的输送装置发送指令,将组装好的部件输送至下一工位。 ,典型应用拓扑图 三,
    的头像 发表于 08-26 14:53 354次阅读
    EtherNet/IP转<b class='flag-5'>CANopen</b>主站<b class='flag-5'>协议</b>网关(JM-EIP-COP)

    EtherCAT从站转CANopen主站协议网关(JM-ECT-COP)

    到EtherCAT网络。 应用广泛:应用于支持CANopen接口的变频器、步进电机、伺服驱动器、仪表、PLC、DCS、FCS等等。在机器人的生产和应用中,多个部件和子系统可能使用不同的通信协议。例如,机器人关节
    的头像 发表于 08-15 17:36 537次阅读
    EtherCAT从站转<b class='flag-5'>CANopen</b>主站<b class='flag-5'>协议</b>网关(JM-ECT-COP)

    EtherNet转CANopen协议转化网关功能与配置详解

    关,将各种CANopen接入到EtherNet/IP网络中。 ,设备应用拓展图 EtherNet转CANopen协议转化网关 三,设备技术指
    的头像 发表于 07-25 12:03 360次阅读
    EtherNet转<b class='flag-5'>CANopen</b><b class='flag-5'>协议</b>转化网关功能与配置详解

    Profinet转CANopen协议转化网关

    连接到Profinet总线中做为从站使用,连接到CANopen总线中做为主站使用。 ,YC-PN-COP拓扑图 Profinet转CANopen协议转化网关 三,技
    的头像 发表于 07-22 14:34 413次阅读
    Profinet转<b class='flag-5'>CANopen</b><b class='flag-5'>协议</b>转化网关

    LwIP协议源码详解—TCP/IP协议的实现

    电子发烧友网站提供《LwIP协议源码详解—TCP/IP协议的实现.pdf》资料免费下载
    发表于 07-03 11:22 3次下载

    STM32H743怎么在FreeRTOS中移植canopen?

    STM32H743怎么在FreeRTOS中移植canopen?
    发表于 07-03 06:32

    CANopen协议移植编译,一直编译不过的原因?

    CO_Data ObjDict_Data = CANOPEN_NODE_DATA_INITIALIZER(ObjDict); IAR编译提示Error[Pe253]: expected a
    发表于 04-26 06:03

    【米尔-瑞萨RZ/G2UL开发板】5.CAN通讯进阶CANopen

    1 CANopen协议 从 OSI 的 7 层网络模型的角度来看同,CAN(Controller Area Network)现场总线仅仅 定义了第 1 层(物理层,见 ISO11898-2 标准
    发表于 03-31 16:19

    CANopen转Profinet网关连接西门子PLC与变流器通讯

    CANopen转Profinet网关(XD-COPNm20)在智能领域,变流器的应用非常广泛,变流器一般会采用CANopen协议。现场采用台达的变流器(支持CANopen
    的头像 发表于 03-16 11:05 751次阅读
    <b class='flag-5'>CANopen</b>转Profinet网关连接西门子PLC与变流器通讯