一下是CAN中断函数
void USB_LP_CAN1_RX0_IRQHandler(void)
{
while(CAN_MessagePending(CAN1,CAN_FIFO0))
{
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage); //从CAN1口缓冲器FIFO 0接收报文到 RxMessage
CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0 );
RevCan = 1;
}
}
一下ID接受部分
TempBuf[0] = *((uint8_t *)&RxMessage.DLC) | *((uint8_t *)&RxMessage.IDE) << 7 | *((uint8_t *)&RxMessage.RTR) << 6;
for(i=0;i<4;i++)
{
TempBuf[1+i] = *((uint8_t *)&RxMessage.ExtId + 3 - i);
}
for(i=0;i<8;i++)
{
TempBuf[5+i] = *((uint8_t *)&RxMessage.Data + i);
}
IdData = TempBuf[1]<<24|(TempBuf[2]<<16)|(TempBuf[3]<<8)|TempBuf[4];
在这样的代码当中ID会出错,但是数据部分是对的。
求大神们研究研究。 |