|
||
---|---|---|
.. | ||
build | ||
board_init.c | ||
board_init.h | ||
clock_init.c | ||
clock_init.h | ||
CO_driver_target.h | ||
CO_driver.c | ||
CO_eeprom.c | ||
CO_eeprom.h | ||
CO_OD.c | ||
CO_OD.h | ||
main.c | ||
pin_init.c | ||
pin_init.h | ||
readme.md |
co_with_eeprom
实验过程
- 初始化系统和外设时钟及引脚定义
- 初始化 TIM, FlexCAN, I2C 和 CANopen 协议栈
- 启动 CAN 收发中断,启动 1ms 定时器,启动 CANopen 协议栈,CANopen 节点以 500 kbps的比特率上线
实验现象
节点上线向 CAN 网络发送节点上线报文:
CAN-ID(hex) | Length | Data(hex) |
---|---|---|
70A | 1 | 00 |
之后以 1000ms 的时间间隔向 CAN 网络发送节点心跳报文:
CAN-ID(hex) | Length | Data(hex) |
---|---|---|
70A | 1 | 7F |
本样例实现了 CANopen OD_H1010 存储当前对象字典中 EEPROM 属性参数和 ROM 属性参数功能以及 CANopen OD_H1011 恢复默认 ROM 属性参数功能。
我们在 MCU 外部 EEPROM 中将其分为三部分来存储数据。第一部分用于存放对象字典中 EEPROM 属性参数数据,第二部分用于存放对象字典中 ROM 属性参数数据,第三部分用来存放 MBR(Master Boot Record)数据。
当本节点设备从 CAN 总线接收到 OD_H1010 存储当前参数指令,即如下报文:
CAN-ID(hex) | Length | Data(hex) |
---|---|---|
60A | 8 | 23 10 10 01 73 61 76 65 |
当前的对象字典中属于 ROM 存储属性的对象字典参数存储到 MCU 外部的 EEPROM 中,并在以后的运行中都使用保存在外部 EERPOM 中的对象字典参数启动。
当本节点设备从 CAN 总线接收到 OD_H1011 恢复默认参数指令,即如下报文:
CAN-ID(hex) | Length | Data(hex) |
---|---|---|
60A | 8 | 23 11 10 01 6C 6F 61 64 |
属于 ROM 属性的对象字典参数将恢复为初始默认参数,并在以后的运行中都使用默认 ROM 属性的对象字典参数。
可以向当前节点发送如下指令查询当前节点的上电次数来验证 co_with_eeprom 样例是否正常工作:
CAN-ID(hex) | Length | Data(hex) |
---|---|---|
60A | 8 | 40 06 21 00 00 00 00 00 |
当本节点设备从 CAN 总线接收到上述报文时便会回复下如报文:
CAN-ID(hex) | Length | Data(hex) |
---|---|---|
58A | 8 | 43 06 21 00 01 00 00 00 |
该报文表示当前节点共有 1次上电记录。