canOpen学习八之canOpen应用实现主从机PDO定时同步数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了canOpen学习八之canOpen应用实现主从机PDO定时同步数据相关的知识,希望对你有一定的参考价值。
从机字典文件
/* 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 = 0xFF; /* 1 */
UNS16 slave_objdict_obj1800_Inhibit_Time = 0; /* 0 */
UNS8 slave_objdict_obj1800_Compatibility_Entry = 0x0; /* 0 */
UNS16 slave_objdict_obj1800_Event_Timer = 2000; /* 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
;
主要设置为slave_objdict_obj1800_Transmission_Type
和slave_objdict_obj1800_Event_Timer
将slave_objdict_obj1800_Event_Timer
设置为2000就是2秒同步一次。
主机主程序
int main(void)
u8 key;
Message msg;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_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)
按下K0启动从机点1后从几点每隔两秒就会同步一次数据。
以上是关于canOpen学习八之canOpen应用实现主从机PDO定时同步数据的主要内容,如果未能解决你的问题,请参考以下文章