CanFestival移植到stm32f103zet

本文介绍如何使用Beremiz等工具编辑CANopen对象字典,并详细讲解了PDO配置流程及注意事项。此外,还提供了STM32平台上的CanFestival库移植指南。

源码参考:https://github.com/sallenkey-wei/CanFestival-transplanted2stm32

一、对象字典的编辑:

可以参考canopen学习资料中的一个pdf文档:

《PDO SDO应用实例分析(编辑对象字典是可以参考).pdf》

1.安装三个软件:

         python-2.7.10.amd64.msi

         wxpython2.8-win64-unicode-2.8.12

          Beremiz-1.1_RC5.exe

我已备份到github上:https://github.com/sallenkey-wei/CanFestival-transplanted2stm32/releases

安装包在 “相关软件工具”->”CanFestival移植用工具” 中,也可自行百度下载,安装详情参考readme.txt,如果安装完不能使用可以尝试更低版本的Beremiz(亲测可以使用),如1.02版本

2.安装完成后打开Beremiz安装目录X:\Program Files (x86)\Beremiz\CanFestival-3\objdictgen\在此文件夹中打开命令行,运行./objdictedit.py即可打开对象字典编辑器,然后就可以编辑对象字典了

3.使用./objdictedit.py打开对象字典,路径在CanFestival源码中,如下图:

上图中两个对象字典分别对应主机和从机,打开主机对象字典后之后如下图:

我调试时使用的功能很简单,主机只定义一个Receive PDO 、从机只定义了一个Transmit PDO,如下图

注意图中框选的部分COB ID used by PDO 主机和从机一定要保持一致(我一般习惯生成c文件后直接在c文件中修改成一致),才能让RPDO和TPOD一一对应,通信才能有效,可以参考文档:

《PDO SDO应用实例分析(编辑对象字典是可以参考).pdf》中的例程

另外Transmission Type都是0x01的意思是发送方在接收到1个sync包之后开始发送TPDO,接收方在接收到TPDO后会查找对象字典中是否有对应的RPDO,若有,则将TPDO携带的数据更新到此RPDO,编辑好通信参数还要看一看mapping参数,它用来指定PDO发送或者接收的数据存放的位置坐标,实际也是对象字典的一块区域,如下图:

这里一个PDO我只留了两个变量正好8字节,我个人理解这里可以大于8字节,因为一个PDO最多可以携带8字节数据,但是,这8字节的数据可以映射到对象字典中的多个变量,默认的对象字典中有10个变量。

编辑完PDO Mapping还要编辑Master的sync包相关参数,因为上述过程已经配置PDO为接收到1个sync触发发送,所以Master应该发送sync到slave,slave接收到此sync后将发送上述配置好的TPDO到Master,其实多个PDO可以设置不同的sync参数,例如需要及时更新的PDO可以设置接收1个sync就发送,不需要及时更新的PDO可以设置接收100个sync再发送。sync发送周期配置如下:

0x000c350十进制为5000,协议中单位是微秒,但实际移植过程中初始化定时器的最小时间单位为1ms,所以实际单位不清楚(未深究,不影响使用)

配置完上述参数,点击新建->建立字典,导出成c文件即可

二、代码移植

我自己转载的连接如下https://blog.youkuaiyun.com/xiaoyink/article/details/89077046

按照以下教程也可

http://www.openedv.com/thread-246479-1-1.html

http://bbs.21ic.com/icview-878522-1-1.html

https://www.cnblogs.com/tdyizhen1314/p/4348725.html

 

以上都是移植教程,大同小异,按照上述步骤做完之后,编译还是会报错,要在dcf.c文件中第58行加一句话:

#define inline __inline

 

完成后即可通信,可以使用USBCAN-2A 分析仪观测Can总线上的每一帧。

### 移植方法 对于将STM32F103C8T6上的项目移植STM32F103ZET6,主要工作集中在调整启动文件、修改头文件定义以及配置开发环境设置等方面。 #### 修改启动文件 需要替换原有的`startup_stm32f103xb.s`为适用于较大内存型号的`startup_stm32f103xe.s`。这是因为不同容量级别的MCU有不同的启动代码来适配其内部资源布局[^1]。 ```assembly ; Example of replacing the startup file content @ Replace this line with correct one according to target MCU type. THUMB ``` #### 更新头文件 同样地,在项目的驱动库路径`\Drivers\CMSIS\Device\ST\STM32F1xx\Include`下找到并用新的`stm32f103xe.h`替代旧版本的`.h`文件。这一步骤确保编译器能够识别新目标设备的具体特性与寄存器映射关系[^2]。 #### 调整IDE配置选项 打开集成开发环境中对应的工程属性页面: - **Device Selection**: 更改为匹配的目标器件型号 `STM32F103ZE`. - **Clock Configuration**: 如果源程序依赖外部晶体,则需确认两者使用的频率一致;通常情况下保持默认即可满足需求。 - **Preprocessor Definitions**: 将宏定义更新为支持更大Flash/RAM规模的新值,即移除原有针对较小存储空间的相关预处理指令,并加入如`STM32F103xE`这样的标识符以便于条件编译机制生效[^3]. --- 通过上述操作可以实现从较低端产品线向更高端产品的顺利迁移,使得原应用程序能够在性能更强的硬件平台上运行而不必重写大量底层接口逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值