在线时间47 小时
UID3054548
注册时间2014-8-22
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 319
- 最后登录
- 2015-8-4
|
这个是生成的发送函数
LDD_TError CAN1_SendFrame(LDD_TDeviceData *DeviceDataPtr, LDD_CAN_TMBIndex BufferIdx, LDD_CAN_TFrame *Frame)
{
CAN1_TDeviceData *DeviceDataPrv = (CAN1_TDeviceData *)DeviceDataPtr;
LDD_CAN_TBufferMask BufferMask; /* Bitmask of the requested message buffer */
uint8_t TxMBCode = 0x00U; /* Temporary value of MB code */
uint32_t StatusReg = CAN_PDD_GetStatusInterruptFlags1(CAN0_BASE_PTR); /* Read content of the status register */
uint8_t DataIndex;
if (BufferIdx > DeviceDataPrv->MaxBufferIndex) { /* Is BufferIdx greater than MaxBuffers? */
return ERR_PARAM_RANGE; /* If yes then error */
}
BufferMask = (LDD_CAN_TBufferMask)(0x01UL << BufferIdx);
if ((BufferMask & DeviceDataPrv->TxBufferMask) == 0x00U) { /* Is used buffer defined of BufferIdx for transmit? */
return ERR_PARAM_INDEX; /* If no then error */
}
if (Frame->Length > DeviceDataPrv->MaxDataLen) { /* Is number of data greater than MaxDataLen? */
return ERR_PARAM_LENGTH; /* If yes then error */
}
if (Frame->FrameType > LDD_CAN_RESPONSE_FRAME) { /* Is FrameType other than LDD_CAN_DATA_FRAME_STD, LDD_CAN_DATA_FRAME_EXT or LDD_CAN_REMOTE_FRAME? */
return ERR_PARAM_ATTRIBUTE_SET; /* If yes then error */
}
if ((StatusReg & (CAN_PDD_RECEIVING_MESSAGE | CAN_PDD_TRANSMITTING_MESSAGE)) != 0x00U) { /* Are both IDLE and TX/RX bits of the status register cleared?*/
return ERR_BUSY; /* If yes then error */
}
/* {Default RTOS Adapter} Critical section begin, general PE function is used */
EnterCritical();
CAN_PDD_SetMessageBufferCode(CAN0_BASE_PTR, BufferIdx, CAN_PDD_MB_TX_NOT_ACTIVE); /* Set TX Buffer Inactive */
if ((Frame->MessageID & LDD_CAN_MESSAGE_ID_EXT) != 0x00U) { /* Is the frame configured as Extended ID? */
CAN_PDD_SetMessageBufferID(CAN0_BASE_PTR, BufferIdx, CAN_PDD_BUFFER_ID_EXT, (Frame->MessageID)&~(LDD_CAN_MESSAGE_ID_EXT)); /*Assign extended ID to buffer */
CAN_PDD_EnableMessageBufferIDExt(CAN0_BASE_PTR, BufferIdx, PDD_ENABLE); /*Set ID extended */
} else {
CAN_PDD_SetMessageBufferID(CAN0_BASE_PTR, BufferIdx, CAN_PDD_BUFFER_ID_STD, Frame->MessageID); /*Assign Standard ID to buffer */
CAN_PDD_EnableMessageBufferIDExt(CAN0_BASE_PTR, BufferIdx, PDD_DISABLE); /*Set ID standard */
}
if ((Frame->FrameType == LDD_CAN_DATA_FRAME)||(Frame->FrameType == LDD_CAN_RESPONSE_FRAME)) { /* Is it a data or WaitOnRemote frame? */
for (DataIndex = 0x00U; DataIndex < Frame->Length; DataIndex++) { /* Fill message buffer data array */
CAN_PDD_SetMessageBufferData(CAN0_BASE_PTR, BufferIdx, DataIndex, Frame->Data[DataIndex]);
}
CAN_PDD_SetMessageBufferDataLength(CAN0_BASE_PTR, BufferIdx, Frame->Length); /* Set the length of the message */
CAN_PDD_EnableMessageBufferRTR(CAN0_BASE_PTR, BufferIdx, PDD_DISABLE); /* Clear RTR bit */
CAN_PDD_EnableMessageBufferSRR(CAN0_BASE_PTR, BufferIdx, PDD_DISABLE); /* Clear SRR bit */
if (Frame->FrameType == LDD_CAN_DATA_FRAME) {
TxMBCode = CAN_PDD_MB_TX_DATA_FRAME; /* Set bufer as a transmit buffer */
} else {
TxMBCode = CAN_PDD_MB_TX_RESPONSE_FRAME; /* Set bufer as a response transmit buffer for remote frames */
}
} else { /* Remote frame */
TxMBCode = CAN_PDD_MB_TX_REMOTE_FRAME; /* Set Tx bufer for remote frames */
CAN_PDD_SetMessageBufferDataLength(CAN0_BASE_PTR, BufferIdx, 0x00U); /* Set the length of the message */
CAN_PDD_EnableMessageBufferRTR(CAN0_BASE_PTR, BufferIdx, PDD_ENABLE); /* Set the message as a remote frame */
if ((Frame->MessageID & LDD_CAN_MESSAGE_ID_EXT) != 0x00U) { /* Extended frame */
CAN_PDD_EnableMessageBufferSRR(CAN0_BASE_PTR, BufferIdx, PDD_ENABLE); /* Set SRR bit */
} else { /* Standard frame */
CAN_PDD_EnableMessageBufferSRR(CAN0_BASE_PTR, BufferIdx, PDD_DISABLE); /* Clear SRR bit */
}
}
CAN_PDD_SetMessageBufferCode(CAN0_BASE_PTR, BufferIdx, TxMBCode); /* Set code for Tx buffer of the message */
/* {Default RTOS Adapter} Critical section end, general PE function is used */
ExitCritical();
return ERR_OK;
}
主函数是这样写的
while(1)
{
aa.MessageID=0x01;
aa.FrameType=0;
aa.Data=bb;
aa.Length=0x08;
// aa.TimeStamp=0x0f;
// aa.LocPriority=2;
//CAN1_ReadFrame(DeviceDataPtr,0x03,&aa);
delay();
CAN1_SendFrame(Prv,0x01,&aa);
delay();
}
可是从串口助手看不到数据,用示波器看到的high和low两根线都是4.8v左右,没有变化,我是新手,哪位大神可以给我指导一下!!!!
|
|