aoty 发表于 2013-12-25 00:40

关于CAN通信的一些问题~~~

发送的是标准数据帧,但是为啥要配置这个ExtId ?
/* Transmit */
TxMessage.StdId = 0x321;
TxMessage.ExtId = 0x01;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 1;
还有就是在中断接受里需要初始化TxMessage.ExtId = 0x00;么?
在中断接受里面
void CAN1_RX0_IRQHandler(void)          
{
CAN_ITConfig(CAN1, CAN_IT_FMP0, DISABLE);                     //这里为啥一开始需要关闭中断?
CAN_ClearFlag(CAN1,CAN_FLAG_FF0);                                    
CanRxMsg RxMessage;

RxMessage.StdId=0x00;                                                         //这些初始化有必要么?
//   RxMessage.ExtId=0x00;                                                    //这句话是要还是不要?我看到过有些程序是不要的。。。
RxMessage.IDE=0;
RxMessage.DLC=0;
//RxMessage.FMI=0; //FMI设定为消息将要通过的过滤器索引,这些消息存储于邮箱中//这句话怎么理解?是不是只有死拓展祯的时候才配置???
RxMessage.Data=0x00;
CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);
if ((RxMessage.StdId == 0x321)&&(RxMessage.IDE == CAN_ID_STD)&&(RxMessage.DLC == 1)&&(RxMessage.Data == 0x55))
{
    printf("\n\rCAN1 Receive Data is:0x%02x",RxMessage.Data);
    printf("\n\rCAN1 Receive Msg Passed!\n\r");
}
else
{
    printf("\n\rCAN1 Receive Msg Failed!\n\r");
}
CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
}                                                                                                                      
以上是我的多日总结的问题,希望论坛里的各位高手可以给学弟一个好的答复~~~
谢谢!!!!

耶稣欠筹了 发表于 2014-2-8 16:36

我也是菜鸟,你的问题是你还没有看CAN的协议组成的!
1、TxMessage.StdId这个是标准的,TxMessage.ExtId是扩展的。
2、为啥一开始需要关闭中断,是为了预防一帖收据还未处理完又一帖数据会冲突。其实不关闭也可以的!
3、RxMessage.StdId=0x00;这是初始化一下,预防数据未读取就取会上一次的数据!
页: [1]
查看完整版本: 关于CAN通信的一些问题~~~