从机字典文件
/* 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后从几点每隔两秒就会同步一次数据。