5826|2

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于STM32 中CAN 的过滤器设置问题 [复制链接]

最近在捣鼓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时,结果在程序中接收不到正确的结果。哪位大侠帮我解释一下  ,如何设置代码中粉色的部分。以便使我能够正确的接收。不胜感激。

此帖出自stm32/stm8论坛

最新回复

置个顶,这个问题也一直困惑着我  详情 回复 发表于 2012-8-21 15:40
点赞 关注
 

回复
举报

1

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

过滤器设置标示符过滤的时候是需要进行移位的

 1个32位的过滤器设置ID的时候低位是extid[4-12], ide, rtr, 0 高位是extid[17-13] 和STDID[0-10] 所以你在设置ID的时候要移位 - -

 

此帖出自stm32/stm8论坛
 
 

回复

272

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
置个顶,这个问题也一直困惑着我
此帖出自stm32/stm8论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表