打印

版主进来帮帮忙 求救CAN问题 STDID为什么为0

[复制链接]
5685|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bestfang|  楼主 | 2011-1-3 20:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天做CAN通信  使用扩展帧  19位扩展帧EXTID是正确的 但是11位标准帧为什么为0  求救
/* CAN cell init */
CAN_InitStructure.CAN_TTCM=ENABLE;  //时间触发
CAN_InitStructure.CAN_ABOM=ENABLE;  //自动离线管理
CAN_InitStructure.CAN_AWUM=ENABLE;  //自动唤醒
CAN_InitStructure.CAN_NART=DISABLE;  //自动重传(注意,DISABLE才是自动重传)

CAN_InitStructure.CAN_RFLM=DISABLE;  //失能FIFO锁定模式
CAN_InitStructure.CAN_TXFP=ENABLE;  //失能FIFO优先级
CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;//正常工作模式
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
CAN_InitStructure.CAN_Prescaler=9;  //36Mhz/16/9 = 250Kbits
CAN_Init(CAN1,&CAN_InitStructure);

/* CAN 过滤器设置 */
CAN_FilterInitStructure.CAN_FilterNumber=0;      //过滤器编号(0-13)
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //指定了过滤器将被初始化到的模式为标识符列表模式
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //给出了过滤器位宽1个32位过滤器
CAN_FilterInitStructure.CAN_FilterIdHigh=(u16)(DM1 >> (29-16));//用来设定过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个)
CAN_FilterInitStructure.CAN_FilterIdLow=(u16)((DM1 << 3)|0x04);//用来设定过滤器标识符(32位位宽时为其低段位,16位位宽时为第二个
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0;//用来设定过滤器屏蔽标识符或者过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x04;//用来设定过滤器屏蔽标识符或者过滤器标识符(32位位宽时为其低段位,16位位宽时为第二个
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0; //设定了指向过滤器的FIFO0
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//使能过滤器
CAN_FilterInit(&CAN_FilterInitStructure);



/* 允许FMP0中断*/
CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);

void SetMassage(void)
{
CanTxMsg TxMessage;
TxMessage.StdId = (DM1 >> 29-11);//右移
TxMessage.ExtId = DM1&0x3FFFF;
TxMessage.RTR = CAN_RTR_DATA;//数据帧
TxMessage.IDE = CAN_ID_EXT; //扩展标识符
TxMessage.DLC = 2;
TxMessage.Data[0] = 0xCA;
TxMessage.Data[1] = 0xFE;

CAN_Transmit(CAN1,&TxMessage);

void USB_LP_CAN1_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
CPU_SR         cpu_sr;
OS_ENTER_CRITICAL();                         /* Tell uC/OS-II that we are starting an ISR          */
OSIntNesting++;
OS_EXIT_CRITICAL();
RxMessage.ExtId = 0;
RxMessage.StdId = 0;
CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);
printf("%d\n\r",RxMessage.StdId);
printf("%d\n\r",RxMessage.ExtId);
if(RxMessage.ExtId == (DM1&0x3FFFF) )
{
  printf("%d\n\r",RxMessage.Data[0]);
  printf("%d\n\r",RxMessage.Data[1]);
}
OSIntExit();
}
沙发
bestfang|  楼主 | 2011-1-3 21:57 | 只看该作者
18位扩展帧

使用特权

评论回复
板凳
bestfang|  楼主 | 2011-1-3 22:42 | 只看该作者
万恶的官方库  只要是扩展帧  11位标准标识符就不发送,不接收。。。改下库问题解决

使用特权

评论回复
地板
斜子| | 2013-6-26 09:39 | 只看该作者
bestfang 发表于 2011-1-3 22:42
万恶的官方库  只要是扩展帧  11位标准标识符就不发送,不接收。。。改下库问题解决 ...

你好,请问你是怎么改库就可以发送标准标识符了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

18

帖子

0

粉丝