打印
[STM32]

CANfestival协议栈分析

[复制链接]
591|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 经济建设为中心 于 2022-11-2 11:15 编辑


CANfestival--3
二、移植准备
移植前,先让大家认识一下移植的一些准备条件。
2.1 硬件
两块带有MCU、CAN控制器和收发器的板卡。
该移植教程以STM32F1(自带CAN控制器),带有CAN收发器的开发板为例来讲述。
//条件允许的情况下,可以购买一个CAN总线分析仪。没有分析仪的朋友,可以用我《CANOpen系列教程06》提供的一个例程来抓取CAN总线数据。
因例程在中断里用串口打印传输数据。所以,用例程抓取的CAN总线传输速率不能太快(建议低于20帧/秒)。
2.2 MCU资源
1.CAN:CAN总线通信(必备);
2.TIM:CANOpen协议调度(必备);
3.UART:调试信息(选配);
4.GPIO:板卡状态指示灯(选配);

一、CanFestival特征
1.工具:提供对象字典GUI图形化编辑器、代码生成,以及脚本等配套工具;
2.多平台:库源代码是ANSI标准C,支持多平台编译和开发;
3.CANopen标准:支持DS-301、302、305等标准的CANOpen协议。
2.3 解析Canfestival源码
源文件目录
主要需要的三个.c .h源文件目录:
drivers:底层驱动,针对个硬件的驱动;
include:.h头文件,针对个处理器的头文件;
src:.c源代码,与处理器无关的CAN open协议栈ANSI-C源代码;
objdictgen:object dictionary generate.一个带有图形化界面的对象字典生成工具(编辑器)
examples:例程,初学者可以参考,用于测试程序
CANfestival源代码分为四大部分:目标接口、CAN接口、CanFestival库文件以及主/从节点的应用。其中,CanFestival库文件是整个协议的核心,包括调度管理,节点管理(对象字典访问objacces.c、状态机state.c) ,CANopen协议(服务数据对象sdo.c、过程数据对象pdo.c、同步对象sync.c、自动波特率对象lss.c、网络管理对象nmtMaster.c和nmtSlave.c)。这些文件在移植时是不需要修改的。主/从节点的应用包括节点状态反馈和设备对象字典的定义。目标接口包括节点硬件的驱动以及对于操作系统的接口,这也是进行移植时主要修改的对象。

canfestival最主要的思想有两个.
—个是字典思想.
所有的参数和配置都是存在字典里面的.在主函数中实际上就是切换运行状态.程序就会按照字典的配置进行接收数据,并把数据存入相应的字典索引.
例如:
如果用canfestival编写—个驱动器程序.
驱动器作为从机,会接收数据,
接收到速度指令,位置指令等.
这些指令中的数据是什么格式,都在字典中有定义,最终从指令中解析出来的速度或位置数据.都会存入道驱动器的字典中.
如果想要从驱动器中读取当前的电流,速度,加速度等信息.
驱动器会根据索引,读取自身字典中的数据,并通过实现配置好的pdo通道传输出去.
另一个是软件定时器思想.
canfestival中所有的事件都是基于软件定时器的.
发送pdo,发送sdo,发送同步帧都是需要创建一个软件定时器.
然后,软件定时器溢出之后,进入回调函数.
在回调函数中进行发送pdo,sdo或同步帧.
如果要循环发送,就会创建—个循环的软件定时器.
如果要发送—次.就创建—个触发—次的定时器.

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

12

帖子

1

粉丝