【CANopen】关于STM32的CanFestival移植

系列文章目录


文章目录

  • 系列文章目录
  • 一、准备工作
  • 二、源码移植
    • 1、新建CubeMX工程
    • 2、移植CanFestival源码
    • 3、去除源码中的多余项
    • 4、源码修改
  • 三、底层驱动适配
  • 四、字典工具
    • 1、字典的使用


使用STM32F407单片机

一、准备工作

  1. CanFestival下载

在这里插入图片描述
在这里插入图片描述

二、源码移植

1、新建CubeMX工程

默认都会,略

2、移植CanFestival源码

在CubeMX生成代码路径下创建一个文件夹,将源码目录下的include和src两个文件夹复制进去

在这里插入图片描述
在这里插入图片描述

3、去除源码中的多余项

首先是include文件夹,如图所示,其中,timers.h大概率会和CubeMX中生成的文件名重名,所以需要重命名这个文件夹改名后需要修改src\timer.cinclude\sdo.h中的头文件引用
在这里插入图片描述

接下来是src文件夹,如图
在这里插入图片描述

4、源码修改

  1. config.h
    在这里插入图片描述
  2. dcf.c

在这里插入图片描述

三、底层驱动适配

CAN和定时器的配置在CubeMX中配置。配置完成后需要我们完成的函数一共有三个:

uint8_t canSend(CAN_PORT notused, Message *message)
void setTimer(TIMEVAL value)
TIMEVAL getElapsedTime(void)

另外,需要在定时器中断中清除CAN软件定时器的计数值。

需要注意的点:

  1. CAN的过滤器配置还是需要手动配置的;
  2. CAN的过滤器配置为0;
  3. 定时器的配置,需要按照timerscfg.h中的配置,如图,定时器计数值+1的时间和定时器的时钟和分频值有关。
    在这里插入图片描述

四、字典工具

使用字典之前需要先安装python和wxpython,实测3.8版本打开字典闪退,换用2.7版本可用,其他版本未使用。

进入CanFestival源码objdictgen文件夹中

Gnosis_Utils-current.tar.gz解压,复制gnosis文件夹到CanFestival源码objdictgen文件夹中

然后双击打开objdictedit.py,出现如下界面为成功:

在这里插入图片描述

1、字典的使用

新建一个字典,测试一下CanFestival移植是否成功
在这里插入图片描述
在这里插入图片描述
然后点击文件->建立字典,将字典生成c和h文件,将这两个文件添加进工程。

注意修改CO_Data类型引用的名字

初始化调用下面这三个函数既可

setNodeId(&master_Data,0x02);//设置node-id
setState(&master_Data, Initialisation);//canopen初始化
setState(&master_Data, Operational);//canopen进入操作状态

完成以上后,既可在接收端收到id为0x700的报文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/286341.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

gorm.PrepareStmt模式使用不当问题查询

一、背景 xx服务内存持续上涨。内存占用10%以内,在QPS无明显变化的前提下,内存占用50%左右。 dump了一下heap内存,发现主要是 InitUserCacheRefresh 任务代码占用 正常来说,dao层查完数据库之后,对象应该会释放&…

设计模式:简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式、工厂方法模式、抽象工厂模式 1. 为什么需要工厂模式?2. 简单工厂模式2.1. 定义2.2. 代码实现2.3. 优点2.4. 缺点2.5. 适用场景 3. 工厂方法模式3.1. 有了简单工厂模式为什么还需要有工厂方法模式?3.2. 定义3.3. 代码实现3.4. 主要优点3.5.…

Python怎么修改进程名称

目录 一、进程名称的概念 二、Python修改进程名称的方法 三、代码示例与使用说明 四、注意事项 五、适用场景 六、总结 Python是一种强大的编程语言,广泛应用于各种应用程序的开发。在Python中,修改进程名称可以通过多种方式实现。下面我们将深入探…

红队打靶练习:SAR: 1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 小结 目录探测 1、gobuster 2、dirsearch WEB CMS 1、cms漏洞探索 2、RCE漏洞利用 提权 get user.txt 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface:…

【Linux C | 文件操作】获取文件元数据的几个函数 | stat、fstat、lstat

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

吸烟者问题-第三十一天

目录 问题描述 解决问题 是否需要设置一个专门的互斥信号量? 结论 问题描述 该题属于”生产者-消费者”问题,更详细的说应该是“可生产多种产品的单生产者-多消费者” 解决问题 1、 关系分析:找出题目中描述的各个进程,分析…

(一)输出输入

文章目录 输出printf输出格式控制常见的几种格式输出小数输出很奇特指定位数对齐方式 代码现象 输入scanf输入格式控制输入坑代码现象 %c 格式控制的坑混合类型输入问题 输出printf 输出格式控制 如:%(占位符/格式字符) printf(“a%d”,a); 常见的几种格式输出 …

海外网红营销:母婴品牌提升影响力和市场份额的绝佳途径

随着全球化的加速和社交媒体的普及,越来越多的母婴品牌开始寻求海外市场拓展。在这个过程中,海外网红营销成为了品牌方们青睐的策略之一。本文Nox聚星将和大家探讨母婴品牌如何利用海外网红营销来提升品牌影响力并拓展市场份额。 母婴品牌的核心消费者是…

BIOS:计算机中的特洛伊木马

内容概述: 由于主板制造商在计算机启动时用来显示品牌徽标的图像分析组件相关的问题,多个安全漏洞(统称为 LogoFAIL)允许攻击者干扰计算机设备的启动过程并安装 bootkit。x86 和 ARM 设备都面临风险。主板固件供应链安全公司 Bin…

02--数据定义语言DDL

1、数据定义语言DDL 1.1 操作数据库-DDL 创建数据库 create database 数据库名称; 创建数据库,并指定字符集 create database 数据库名称 character set 字符集名; 查询所有数据库的名称 show databases; 查询某个数据库的字符集:查询某个数据库的创建语句及字…

【Matlab】ELM极限学习机时序预测算法(附代码)

资源下载: https://download.csdn.net/download/vvoennvv/88681649 一,概述 ELM(Extreme Learning Machine)是一种单层前馈神经网络结构,与传统神经网络不同的是,ELM的隐层神经元权重以及偏置都是随机产生的…

tecplot360 提取某一点随时加变化的参数

tecplot360 提取某一点随时加变化的参数 效果过程录制宏打开所有数据(都进来所有的data数据) 效果 如下,红点处随时间变化的温度曲线 过程 简单理解就是将所有计算的data帧中固定点的参数取出来 所以先录制宏,然后应用宏自动取…

大模型时代下AIGC新浪潮

大模型时代下AIGC新浪潮 文章目录 大模型时代下AIGC新浪潮1. **相关概念**2. **迎接大模型时代**3. **ChatGPT引爆AIGC产业**4. **从产业链宏观看AIGC**1. **上游:基础层**2. **中游:技术层/模型层**1. **模型层介绍**2. **预训练大模型分类与介绍** 3. …

品优购实战案例

1. 开发工具 VScode 、Photoshop(fw)、主流浏览器(以Chrome浏览器为主) 2. 技术栈  利用 HTML5 CSS3 手动布局,可以大量使用 H5 新增标签和样式  采取结构与样式相分离,模块化开发  良好的代码规范有…

js常用事件演示

目录 JS事件的具体方法 窗口事件 表单事件 键盘事件 鼠标事件 知识小拓展 JS事件的具体方法 我们用到JavaScript的时候js的事件就显得特别重要了 事件名说明onsubmit当表单提交时触发该事件onclick鼠标单击事件ondblclick鼠标双击事件onblur元素失去焦点onfocus元素获得…

Eureka服务注册与发现中心

简介 Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理 在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现…

打印菱形和金字塔类型(总结)

首先,在之前的学习中,我们了解了菱形的打印,今天我们来对金字塔和菱形这类打印图形的问题,我们来做一个总结。 这个总结的来源是这今天做了一道题 这道题的答案如下 这个题做起来并不难,拓展到这类问题中,…

【驱动序列】简单聊聊开发驱动程序的缘由和驱动程序基本信息

大家好,我是全栈小5,欢迎来到《小5讲堂》,这是《驱动程序》专栏序列文章。 这是2024年第4篇文章,此篇文章是结合了C#知识点实践序列文章,博主能力有限,理解水平有限,若有不对之处望指正&#xf…

面向对象(类和对象,对象内存图,成员变量和局部变量,封装,构造方法)

1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象类是对象的数据类型,类是具有相同属性和行为的一组对象的集合简单理解:类就是对…

cJSON代码解读

1、背景 cJSON用了很久,但是对它一直不太了解。这次向添加对long long类型的支持,一直出问题。因为有以前添加两位小数float的经历,我觉得会很轻松,没想到翻车了。于是有了这边文档,阅读了部分博主对cJSON的解析&…