CanTxMsg TxMessage; //发送全局邮箱
CanRxMsg RxMessage; //接收全局邮箱
/*************************************************************************
函数名称:BSP_CAN1_RX0_IRQn
函数功能:CAN1接收数据中断服务函数
参数说明:无
返回值: 无
作者:
版本:REV 1.0
*************************************************************************/
void CAN1_RX0_IRQHandler(void)
{
if(SET == CAN_GetITStatus(CAN1, CAN_IT_FMP0))
{
Can1Rxflag=TRUE; //表明数据以收到
CAN_ClearITPendingBit(CAN1, CAN_IT_FMP0);
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
}
}
//main函数中:
if (Can1Rxflag==1) //接收到消息
{
printf("CAN1收到的消息如下:");
Can1Rxflag=FALSE; //清除,没有收到数据不打印
printf("接收的消息如下:\n");
printf("扩展帧ID:%#x \n",RxMessage.ExtId);
printf("标准帧ID:%#x \n",RxMessage.StdId);
printf("RxMessage.IDE:%#x \n",RxMessage.IDE);
printf("RxMessage.RTR:%#x \n",RxMessage.RTR);
printf("消息长度:%d字节 \n",RxMessage.DLC);
for (i=0;i<8;i++) //打印出刚接收到的数据
{
printf(" %#x",RxMessage.Data[i]);
}
printf("\n");
printf("显示如下:\n");
if (RxMessage.IDE==CAN_ID_EXT) //扩展帧
{
printf("扩展帧ID:%#x \n",RxMessage.ExtId);
}
else if(RxMessage.IDE==CAN_ID_STD)
{
printf("标准帧ID:%#x \n",RxMessage.StdId);
}
if (RxMessage.RTR==CAN_RTR_REMOTE) //远程帧
{
printf("\n有远程帧请求\n");
}
printf("消息长度:%d字节 \n",RxMessage.DLC);
for (i=0;i<8;i++)
{
printf(" %#x",RxMessage.Data[i]);
}
printf("\n");
memset(&RxMessage,'\0',sizeof(RxMessage)); //清除接收缓存中的所有数据
printf("清零后消息如下:\n");
printf("扩展帧ID:%#x \n",RxMessage.ExtId);
printf("标准帧ID:%#x \n",RxMessage.StdId);
printf("RxMessage.IDE:%#x \n",RxMessage.IDE);
printf("RxMessage.RTR:%#x \n",RxMessage.RTR);
printf("消息长度:%d字节 \n",RxMessage.DLC);
for (i=0;i<8;i++) //注意,接收的远程帧数据内容
{
printf(" %#x",RxMessage.Data[i]);
}
printf("\n");
} |