注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
kinglee88的个人空间 https://home.eeworld.com.cn/space-uid-347964.html [收藏] [复制] [分享] [RSS]
日志

关于STM32 中CAN 的过滤器设置问题

已有 7075 次阅读2011-8-8 14:59

最近在捣鼓STM32的CAN 模块。虽然算是基本上能够发送接收数据了,但是总觉得对他的发送和接收比较模糊。问题就出在了对过滤器的设置  以及接收中的某些设置上,长话短说。大家看一下代码就明白我的疑问了。代码如下:

void CAN_Configuration(void)
{
 CAN_InitTypeDef CAN_InitStructure;
 CAN_FilterInitTypeDef CAN_FilterInitStructure;

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN,ENABLE);
  
 CAN_DeInit();//初始化CAN 一定要养成这个良好的习惯
 CAN_StructInit(&CAN_InitStructure);
 /*CAN INIT*/
 CAN_InitStructure.CAN_TTCM=DISABLE;//失能时间触发通讯模式
 CAN_InitStructure.CAN_ABOM=DISABLE;//失能自动离线管理
 CAN_InitStructure.CAN_AWUM=DISABLE;//失能自动唤醒模式
 CAN_InitStructure.CAN_NART=DISABLE;//使能自动重传输模式
 CAN_InitStructure.CAN_RFLM=DISABLE;//失能接收FIFO锁定模式
 CAN_InitStructure.CAN_TXFP=DISABLE;//发送FIFO优先级由报文的标识符来决定
 CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;//CAN工作于环回模式
 CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;//重新同步跳跃宽度1个时间单位
 CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;//时间段为8个时间单位
 CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;//时间段为7个时间单位
 CAN_InitStructure.CAN_Prescaler=9;//波特率=PCLK1/(1+8+7)/9=250kbit
 CAN_Init(&CAN_InitStructure);
 /*CAN过滤器初始化 CAN filter init*/
 CAN_FilterInitStructure.CAN_FilterNumber=0;//选定过滤器组0
 CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//标识符屏蔽位模式
 CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//选择1个32位过滤器
 CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
 CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;//设定过滤器标识符的高位和低位
 CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//设定过滤器屏蔽标识符高位和低位
 CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
 CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FilterFIFO0;//设定过滤器FIFO0指向过滤器x
 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//使能过滤器
 CAN_FilterInit(&CAN_FilterInitStructure);
 CAN_ITConfig(CAN_IT_FMP0, ENABLE);
}

接收子程序(中断接收的)

void CAN_Rx_Data(void)
{
  CanRxMsg RxMessage;

  RxMessage.StdId=0x00;
  RxMessage.ExtId=0x00;
  RxMessage.IDE=0;
  RxMessage.DLC=0;
  RxMessage.FMI=0;//这个不知道干什么用
  RxMessage.Data[0]=0x00;
  CAN_Receive(CAN_FIFO0, &RxMessage);
}

代码中粉色的那部分  我就不理解,或者说是理解偏差。当我将这四行中的值变化为不都是0x0000时,结果在程序中接收不到正确的结果。哪位大侠帮我解释一下  ,如何设置代码中粉色的部分。以便使我能够正确的接收。不胜感激。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章