canOpen学习六之canOpen应用实现主从机PDO循环同步通信
一、从机代码
从机字典
/* index 0x1400 : Receive PDO 1 Parameter. */UNS8 slave_objdict_highestSubIndex_obj1400 = 6; /* number of subindex - 1*/UNS32 slave_objdict_obj1400_COB_ID_used_by_PDO = 0x200; /* 512 */UNS8 slave_objdict_obj1400_Transmission_Type = 0x0; /* 0 */UNS16 slave_objdict_obj1400_Inhibit_Time = 0x0; /* 0 */UNS8 slave_objdict_obj1400_Compatibility_Entry = 0x0; /* 0 */UNS16 slave_objdict_obj1400_Event_Timer = 0x0; /* 0 */UNS8 slave_objdict_obj1400_SYNC_start_value = 0x0; /* 0 */subindex slave_objdict_Index1400[] = {{ RO, uint8, sizeof (UNS8), (void*)&slave_objdict_highestSubIndex_obj1400, NULL },{ RW, uint32, sizeof (UNS32), (void*)&slave_objdict_obj1400_COB_ID_used_by_PDO, NULL },{ RW, uint8, sizeof (UNS8), (void*)&slave_objdict_obj1400_Transmission_Type, NULL },{ RW, uint16, sizeof (UNS16), (void*)&slave_objdict_obj1400_Inhibit_Time, NULL },{ RW, uint8, sizeof (UNS8), (void*)&slave_objdict_obj1400_Compatibility_Entry, NULL },{ RW, uint16, sizeof (UNS16), (void*)&slave_objdict_obj1400_Event_Timer, NULL },{ RW, uint8, sizeof (UNS8), (void*)&slave_objdict_obj1400_SYNC_start_value, NULL }};/* index 0x1600 : Receive PDO 1 Mapping. */UNS8 slave_objdict_highestSubIndex_obj1600 = 1; /* number of subindex - 1*/UNS32 slave_objdict_obj1600[] = {0x20010008 /* 536936456 */};subindex slave_objdict_Index1600[] = {{ RW, uint8, sizeof (UNS8), (void*)&slave_objdict_highestSubIndex_obj1600, NULL },{ RW, uint32, sizeof (UNS32), (void*)&slave_objdict_obj1600[0], NULL }};/* index 0x1800 : Transmit PDO 1 Parameter. */UNS8 slave_objdict_highestSubIndex_obj1800 = 6; /* number of subindex - 1*/UNS32 slave_objdict_obj1800_COB_ID_used_by_PDO = 0x180; /* 384 */UNS8 slave_objdict_obj1800_Transmission_Type = 0x5; /* 1 */UNS16 slave_objdict_obj1800_Inhibit_Time = 0x0; /* 0 */UNS8 slave_objdict_obj1800_Compatibility_Entry = 0x0; /* 0 */UNS16 slave_objdict_obj1800_Event_Timer = 0x0; /* 0 */UNS8 slave_objdict_obj1800_SYNC_start_value = 0x0; /* 5 */subindex slave_objdict_Index1800[] = {{ RO, uint8, sizeof (UNS8), (void*)&slave_objdict_highestSubIndex_obj1800, NULL },{ RW, uint32, sizeof (UNS32), (void*)&slave_objdict_obj1800_COB_ID_used_by_PDO, NULL },{ RW, uint8, sizeof (UNS8), (void*)&slave_objdict_obj1800_Transmission_Type, NULL },{ RW, uint16, sizeof (UNS16), (void*)&slave_objdict_obj1800_Inhibit_Time, NULL },{ RW, uint8, sizeof (UNS8), (void*)&slave_objdict_obj1800_Compatibility_Entry, NULL },{ RW, uint16, sizeof (UNS16), (void*)&slave_objdict_obj1800_Event_Timer, NULL },{ RW, uint8, sizeof (UNS8), (void*)&slave_objdict_obj1800_SYNC_start_value, NULL }};/* index 0x1A00 : Transmit PDO 1 Mapping. */UNS8 slave_objdict_highestSubIndex_obj1A00 = 1; /* number of subindex - 1*/UNS32 slave_objdict_obj1A00[] = {0x20000008 /* 536870920 */};subindex slave_objdict_Index1A00[] = {{ RW, uint8, sizeof (UNS8), (void*)&slave_objdict_highestSubIndex_obj1A00, NULL },{ RW, uint32, sizeof (UNS32), (void*)&slave_objdict_obj1A00[0], NULL }};/* index 0x2000 : Mapped variable pdo1TransmitDate */subindex slave_objdict_Index2000[] = {{ RW, uint8, sizeof (UNS8), (void*)&pdo1TransmitDate, NULL }};/* index 0x2001 : Mapped variable pdo1ReceiveDate */subindex slave_objdict_Index2001[] = {{ RW, uint8, sizeof (UNS8), (void*)&pdo1ReceiveDate, NULL }};
主要是索0x1800中的值UNS8 slave_objdict_obj1800_Transmission_Type = 0x5; /* 1 */
设置成1-253代表接收到1-253个同步帧从机发送PDO通信。
主程序:
int main(void)
{ u8 key; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168); //初始化延时函数uart_init(115200); //初始化串口波特率为115200LED_Init(); //初始化LED KEY_Init(); //按键初始化 cantimer_init(10-1,8400-1); can_init(CAN_SJW_1tq,CAN_BS2_6tq,CAN_BS1_7tq,6,CAN_Mode_Normal);//CAN初始化环回模式,波特率500Kbps setNodeId(&slave_objdict_Data, 0x01);setState(&slave_objdict_Data, Initialisation);setState(&slave_objdict_Data, Pre_operational); while(1){key=KEY_Scan(0);if(key==KEY0_PRES)//KEY0按下,发送一次数据{pdo1TransmitDate++;}else if(key==WKUP_PRES)//WK_UP按下,改变CAN的工作模式{ } } }
二、主机代码
主机字典:
/* index 0x1400 : Receive PDO 1 Parameter. */UNS8 master_objdict_highestSubIndex_obj1400 = 6; /* number of subindex - 1*/UNS32 master_objdict_obj1400_COB_ID_used_by_PDO = 0x181; /* 385 */UNS8 master_objdict_obj1400_Transmission_Type = 0x0; /* 0 */UNS16 master_objdict_obj1400_Inhibit_Time = 0x0; /* 0 */UNS8 master_objdict_obj1400_Compatibility_Entry = 0x0; /* 0 */UNS16 master_objdict_obj1400_Event_Timer = 0x0; /* 0 */UNS8 master_objdict_obj1400_SYNC_start_value = 0x0; /* 0 */subindex master_objdict_Index1400[] = {{ RO, uint8, sizeof (UNS8), (void*)&master_objdict_highestSubIndex_obj1400, NULL },{ RW, uint32, sizeof (UNS32), (void*)&master_objdict_obj1400_COB_ID_used_by_PDO, NULL },{ RW, uint8, sizeof (UNS8), (void*)&master_objdict_obj1400_Transmission_Type, NULL },{ RW, uint16, sizeof (UNS16), (void*)&master_objdict_obj1400_Inhibit_Time, NULL },{ RW, uint8, sizeof (UNS8), (void*)&master_objdict_obj1400_Compatibility_Entry, NULL },{ RW, uint16, sizeof (UNS16), (void*)&master_objdict_obj1400_Event_Timer, NULL },{ RW, uint8, sizeof (UNS8), (void*)&master_objdict_obj1400_SYNC_start_value, NULL }};/* index 0x1600 : Receive PDO 1 Mapping. */UNS8 master_objdict_highestSubIndex_obj1600 = 1; /* number of subindex - 1*/UNS32 master_objdict_obj1600[] = {0x20040008 /* 537133064 */};subindex master_objdict_Index1600[] = {{ RW, uint8, sizeof (UNS8), (void*)&master_objdict_highestSubIndex_obj1600, NULL },{ RW, uint32, sizeof (UNS32), (void*)&master_objdict_obj1600[0], NULL }};/* index 0x1800 : Transmit PDO 1 Parameter. */UNS8 master_objdict_highestSubIndex_obj1800 = 6; /* number of subindex - 1*/UNS32 master_objdict_obj1800_COB_ID_used_by_PDO = 0x201; /* 513 */UNS8 master_objdict_obj1800_Transmission_Type = 0x0; /* 0 */UNS16 master_objdict_obj1800_Inhibit_Time = 0x0; /* 0 */UNS8 master_objdict_obj1800_Compatibility_Entry = 0x0; /* 0 */UNS16 master_objdict_obj1800_Event_Timer = 0x0; /* 0 */UNS8 master_objdict_obj1800_SYNC_start_value = 0x0; /* 0 */subindex master_objdict_Index1800[] = {{ RO, uint8, sizeof (UNS8), (void*)&master_objdict_highestSubIndex_obj1800, NULL },{ RW, uint32, sizeof (UNS32), (void*)&master_objdict_obj1800_COB_ID_used_by_PDO, NULL },{ RW, uint8, sizeof (UNS8), (void*)&master_objdict_obj1800_Transmission_Type, NULL },{ RW, uint16, sizeof (UNS16), (void*)&master_objdict_obj1800_Inhibit_Time, NULL },{ RW, uint8, sizeof (UNS8), (void*)&master_objdict_obj1800_Compatibility_Entry, NULL },{ RW, uint16, sizeof (UNS16), (void*)&master_objdict_obj1800_Event_Timer, NULL },{ RW, uint8, sizeof (UNS8), (void*)&master_objdict_obj1800_SYNC_start_value, NULL }};/* index 0x1A00 : Transmit PDO 1 Mapping. */UNS8 master_objdict_highestSubIndex_obj1A00 = 1; /* number of subindex - 1*/UNS32 master_objdict_obj1A00[] = {0x20000008 /* 536870920 */};subindex master_objdict_Index1A00[] = {{ RW, uint8, sizeof (UNS8), (void*)&master_objdict_highestSubIndex_obj1A00, NULL },{ RW, uint32, sizeof (UNS32), (void*)&master_objdict_obj1A00[0], NULL }};/* index 0x2000 : Mapped variable pdo1TransmitDate */subindex master_objdict_Index2000[] = {{ RW, uint8, sizeof (UNS8), (void*)&pdo1TransmitDate, NULL }};/* index 0x2004 : Mapped variable pdo1ReceiveDate */subindex master_objdict_Index2004[] = {{ RW, uint8, sizeof (UNS8), (void*)&pdo1ReceiveDate, NULL }};
索引 0x1400中接收:
主程序
int main(void)
{ u8 key; Message msg;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168); //初始化延时函数uart_init(115200); //初始化串口波特率为115200LED_Init(); //初始化LED KEY_Init(); //按键初始化 cantimer_init(10-1,8400-1); can_init(CAN_SJW_1tq,CAN_BS2_6tq,CAN_BS1_7tq,6,CAN_Mode_Normal);//CAN初始化环回模式,波特率500Kbps setNodeId(&master_objdict_Data, 0x00);setState(&master_objdict_Data, Initialisation);setState(&master_objdict_Data, Operational); while(1){key=KEY_Scan(0);if(key==KEY0_PRES){masterSendNMTstateChange(&master_objdict_Data,0x01,NMT_Start_Node);}else if(key==KEY1_PRES){ sendPDOrequest(&master_objdict_Data,0x1400);}else if(key==KEY2_PRES){ msg.cob_id = (UNS16)0x80;msg.len = (UNS8)0x00;msg.rtr = (UNS8)0;canSend(&master_objdict_Data.canHandle,&msg ); } else if(key==WKUP_PRES){ } } }
三、操作
1、首先按下Key0键启动从节点一
2、然后按Key2键发送同步帧,发送5次后从机同步数据。
四、工程文件
工程文件
canOpen学习六之canOpen应用实现主从机PDO循环同步通信相关推荐
- nrf52832 学习笔记(五)蓝牙主从机连接和连接参数更新
nrf52832 学习笔记(五)蓝牙主从机连接和连接参数更新 主机连接 nrf52832 SDK中主机连接从机需要使用 sd_ble_gap_connect(ble_gap_addr_t const ...
- canOpen学习十之canOpen应用实现紧急事件发送
一.简介 所谓紧急事件就是系统出现错误后需要告知其他设备我出错了,其他设备做出对应的反应. 紧急事件用到的索引是0x1001和0x1003,下面详细介绍一下这两个索引 对象0x1001: 对象0x10 ...
- linux canopen软件,CANopen学习笔记
1. TPDO和RPDO都是针对从站来说的,协议上没有有讲任何一个关于主站的概念,协议就只是定义从站,没有定义主站任何东西. TPDO:从站->主站 RPDO:主站->从站 2. PDO的 ...
- CANOpen学习(一)
CANOpen学习(一) CANOpen心跳功能学习 修改串口PIN脚和CAN的PIN脚 原本timer中发送心跳包的相关逻辑 修改心跳发送逻辑 修改定时器周期为10us 修改timer.c文件中发送 ...
- CANopen学习笔记
CANopen学习笔记 文章目录 CANopen学习笔记 1.NMT 1.1.NMT的Boot_up (节点上线报文) 1.2.NMT 节点状态与心跳报文 1.3.NMT节点守护 1.4 .NMT节点 ...
- CUBEMX+CANOPEN教程四:canopen小结
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/xingzhewanfu/article/details/89196626 一.基础理论知识 用户手册 ...
- Apollo代码学习(六)—模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码
Apollo代码学习(六)-模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码
- 艾伟:C#多线程学习(六) 互斥对象
本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个线程 C#多线程学习(三) 生产者和消费者 C#多线程学习(四) 多线程的自动管理(线程池) C#多线程学习( ...
- C#多线程学习(六) 互斥对象
C#多线程学习(六) 互斥对象 原文链接:http://kb.cnblogs.com/page/42533/ 本系列文章导航 C#多线程学习(一) 多线程的相关概念 C#多线程学习(二) 如何操纵一个 ...
- OpenCV与图像处理学习六——图像形态学操作:腐蚀、膨胀、开、闭运算、形态学梯度、顶帽和黑帽
OpenCV与图像处理学习六--图像形态学操作:腐蚀.膨胀.开.闭运算.形态学梯度.顶帽和黑帽 四.图像形态学操作 4.1 腐蚀和膨胀 4.1.1 图像腐蚀 4.1.2 图像膨胀 4.2 开运算与闭运 ...
最新文章
- 义教资料均衡验收计算机室解说词,义教均衡迎检现场会导引解说词
- 第二次尝试修复Hbase2出现Region不一致,使用 HBCK2 - 2021.11.15
- Silverlight Gantt甘特图项目管理解决方案
- CodeProject每日精选: Progress controls 进度条
- orm2 中文文档 3.1 模型属性
- 新东方年会节目员工吐槽公司问题 俞敏洪:奖励12万
- TrainingModel(3)
- 技术状态管理(四)-技术状态控制
- 一键去除AutoCAD图形乱码的问题
- JAVA GUI创作简易记牌器
- golang调用aliyun的语音通话
- 手机录音m4a怎么转换成mp3
- AUTOCAD——减少样条曲线控制点数、CAD进阶练习(三)
- enumerate使用
- sd/mmc驱动框架-(三)mmc子系统的数据结构
- 微信小程序开发之webview组件内网页实现微信原生支付
- 仿迅雷播放器教程 -- 基于VLC的MFC播放器 (6)
- 所有ICO项目100%都会归零!STO证券型代币才是区块链融资正确打开方式
- 魔兽世界终极版(C++程序设计第6周)
- Bootstrap3 带边框的表格样式
热门文章
- Unity内置Shader解读1——Bumped Diffuse
- 1.1你是谁?你从哪来?你到哪去? -交给学习来解答
- 新世达380修改服务器密码,新时达AS380利用小键盘调试说明
- 蓝色理想的flex教材不能在flex Development做不能使用,我整理一下供初学者参考
- Barefoot P4加速SDN
- [055] SSL 3.0曝出Poodle漏洞的解决方案-----开发者篇
- ConcurrenHashMap源码(JDK1.7)
- 大型网站--负载均衡架构
- 人工智能研究中心快递柜——代码分析十
- Linux和Windows双系统gpt,Windows+Ubuntu双系统GPTMBR引导设置