Chinaunix首页 | 论坛 | 博客
  • 博客访问: 416657
  • 博文数量: 55
  • 博客积分: 167
  • 博客等级: 入伍新兵
  • 技术积分: 1167
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-28 10:20
个人简介

一个算是正常的中国码农!

文章分类

全部博文(55)

文章存档

2014年(1)

2013年(31)

2012年(23)

我的朋友

分类: C/C++

2014-01-14 19:40:11

今天做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();
}
阅读(6938) | 评论(0) | 转发(1) |
0

上一篇:stm32f4 内部rtc配置使用

下一篇:没有了

给主人留下些什么吧!~~