logo资料库

CANOPEN心跳报文在一二级核心板上的应用.docx

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
Canopen 心跳报文在我司一二级核心板上的实现 1、前言 基于 Canopen 协议太过庞大,理解起来和二次开发起来稍显困难,而我司实 际项目上使用到的 Canopen 相关知识,只有心跳报文,节点 ID,节点掉线重连, 节点 ID 上报等相关功能;故我司采用取其精华,去其糟粕的原则,自定符合我 司实际项目中的 Canopen 协议,现将该协议相关内容展现如下; 2、具体实施 (1) 配置管脚:(PA11 -> CANL PA12 -> CANH) (2) Can 单元设置: (3) Can 波特率设置: (4) 过滤器配置: 节点(一级)在接收报文时,根据标识符(CAN ID)的值决定软件是否需要 该报文;若需要,就拷贝到 SRAM 里,若不需,报文就被丢弃且无需软件干扰。
(5) FIFO0 消息挂号中断允许: (6) 中断服务函数 (7) Can 发送函数 3、CAN ID 值结构分析
例:给定一个 CAN ID,如 0x1800f001(扩展 ID),CAN ID 的值本身包含两部分, 即基本 ID 与扩展 ID,基本格式中不存在扩展 ID,而扩展格式中 ID0 ~ ID17 为扩 展 ID,ID18 ~ ID28 为基本 ID; 因此:CAN ID 值 0x1800f001 用二进制表示为: 0b 0001 1000 0000 0000 1111 0000 0000 0001 注:红色部分为扩展 ID,蓝色部分为基本 ID 故,我们在 CAN 发送函数中,在 CanTxMsg 结构体中,着重配置 ExtId 和 IDE CAN 发送函数解析:Can_Send_Msg(&Data,len,0x09,(local_extid&0x3fc00)|0x01) Data:发送的数据 len:发送数据长度 0x09:数据类型 StdId(11 位) 正常数据 (local_extid&0x3fc00)|0x01: 该一级板的节点 ID(8 位)+ 该一级板上的具体硬件功能(10 位)= ExtId(18 位) local_extid = 0x01<<10: 一级核心板节点 ID (0x01 代表该核心板编号) 0x01:具体硬件编号(如:按键 0x01) 基本 ID(StdId) 正常数据:0x09 节点掉线重连: 0xfe 4、框架图 节点掉线:0xfd
分享到:
收藏