本文详细介绍将CANOpen协议移植到不同硬件平台的过程和方法,包括准备工作、软件架构分析、代码实现与调试技巧。
CANopen是一种基于CAN(Controller Area Network)的高层通信协议,在工业自动化设备之间的网络通信中广泛应用。将该协议栈移植到新的硬件平台通常需要遵循以下步骤:
1. **实现CAN收发功能**:
- 必须具备基本的驱动程序,以控制CAN控制器进行数据发送和接收。
- 发送时需正确设置标识符(ID)、数据长度(DLC)及数据字段;接收则常采用中断方式处理。
2. **配置时钟**:
- 设置一个定时器中断作为最小时间单位。例如每10us触发一次,计算周期如总线时钟为84MHz、预分频器值为83、Period设为9,则定时时间为10微秒。
3. **移植CANopen库文件**:
- 使用开源的CANopen库(如canfestival),包含必要的头文件和源代码。
- 需要移植src目录下的源代码,但排除symbols.c文件。
4. **生成对象字典**:
- 对象字典用于存储设备配置信息。使用objdictedit工具基于Python 2.7及Gnosis Utils创建该字典,并将其添加到项目中供主机方参考。
5. **配置对象字典参数**:
- 定义节点角色(主站或从站),设置心跳、PDO和SDO等参数,确保生成的文件正确无误。
6. **实现CAN发送函数**:
- 编写将数据包封装成CAN报文并发送的功能。
7. **调整接收中断回调函数**:
- 修改用于处理接收到的数据及解析它们的中断处理程序。
8. **定时器中断管理**:
- 调整定时器中断处理器以同步时间。
移植过程中可能会遇到的问题包括波特率设置错误、实时性问题以及对象字典配置不当等。解决这些问题需要深入了解CANopen协议规范,熟悉所用库,并且对目标硬件平台有深刻的理解。
通过以上步骤可以成功地将CANopen协议栈移植到新的硬件平台上,实现设备间的通信功能。