你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f4105 can2接收远程帧问题

[复制链接]
abclsl 提问时间:2015-11-20 09:45 /
各位高手您好!
   现在我移植canopen到stm32f4 上,发现远程帧接收不了,采用中断方式接受。FIFO0如果有数据,中断就可以执行了。但是现在我的远程帧没有数据域,所以也没有FIFO0 不为空中断,现在不知道怎么读取远程帧,请各位高手指教!谢谢!

带数据的数据帧通信正常!
收藏 1 评论28 发布时间:2015-11-20 09:45

举报

28个回答
安臣 回答时间:2015-11-26 17:08:59
  1.         FilterConfig.FilterIdHigh         = ((ext_id<<3) >>16) &0xffff;
  2.         FilterConfig.FilterIdLow          = (uint16_t)(ext_id<<3) | CAN_ID_EXT | CAN_RTR_DATA;
  3.         FilterConfig.FilterMaskIdHigh     = 0xfff8;
  4.         FilterConfig.FilterMaskIdLow      = 0x07ff;
  5.         FilterConfig.FilterFIFOAssignment = 0x00;
  6.         FilterConfig.FilterNumber         = 0x00;
  7.         FilterConfig.FilterMode           = CAN_FILTERMODE_IDMASK;
  8.         FilterConfig.FilterScale          = CAN_FILTERSCALE_32BIT;
  9.         FilterConfig.FilterActivation     = ENABLE;
  10.         hcan.Instance = CAN;
  11.         HAL_CAN_ConfigFilter(&hcan, &FilterConfig);
复制代码
abclsl 回答时间:2015-11-24 13:02:33
lyp05401 发表于 2015-11-24 08:50
把初始化函数贴出来看看。

  hcan2.pTxMsg = &TxMessage;
  hcan2.pRxMsg = &RxMessage;
  hcan2.Instance = CAN2;
  hcan2.Init.Mode = CAN_MODE_NORMAL;
  hcan2.Init.SJW = CAN_SJW_1TQ;
  hcan2.Init.BS1 = CAN_BS1_3TQ;
  hcan2.Init.BS2 = CAN_BS2_2TQ;
  hcan2.Init.TTCM = DISABLE;
  hcan2.Init.ABOM = DISABLE;
  hcan2.Init.AWUM = DISABLE;
  hcan2.Init.NART = DISABLE;
  hcan2.Init.RFLM = DISABLE;
  hcan2.Init.TXFP = DISABLE;

    hcan2.Init.Prescaler =7;//6;
安臣 回答时间:2015-11-26 17:08:22
  1. /* CAN init function */
  2. void MX_CAN_Init(void)
  3. {

  4.   hcan.Instance = CAN;
  5.   hcan.Init.Prescaler = 16;
  6.   hcan.Init.Mode = CAN_MODE_NORMAL;
  7.   hcan.Init.SJW = CAN_SJW_1TQ;
  8.   hcan.Init.BS1 = CAN_BS1_9TQ;
  9.   hcan.Init.BS2 = CAN_BS2_2TQ;
  10.   hcan.Init.TTCM = DISABLE;
  11.   hcan.Init.ABOM = DISABLE;
  12.   hcan.Init.AWUM = DISABLE;
  13.   hcan.Init.NART = ENABLE;
  14.   hcan.Init.RFLM = DISABLE;
  15.   hcan.Init.TXFP = DISABLE;
  16.   HAL_CAN_Init(&hcan);

  17. }
复制代码
abclsl 回答时间:2015-11-20 09:46:58
abclsl 回答时间:2015-11-20 17:37:34
没有大神
abclsl 回答时间:2015-11-23 09:15:48
没有人
abclsl 回答时间:2015-11-23 09:36:06
本帖最后由 abclsl 于 2015-11-23 20:26 编辑

远程帧(遥控帧)不知道怎么接收 ,在芯片手册上面也没有看到标志位!
安臣 回答时间:2015-11-23 10:16:25
有人。 只是canopen 没怎么玩过   帮顶。

can中断 无法接受吗?  不管是远程帧 还是 数据帧  接受就有中断啊?
lyp05401 回答时间:2015-11-23 10:27:43
远程帧虽然跟没有数据域的数据帧格式一样,但是他们的标志位不一样的,还是查查过滤表(接收规则)是否设置好吧。
abclsl 回答时间:2015-11-23 13:48:48
lyp05401 发表于 2015-11-23 10:27
远程帧虽然跟没有数据域的数据帧格式一样,但是他们的标志位不一样的,还是查查过滤表(接收规则)是否设置好 ...

远程帧的标志位是哪一位,谢谢!
abclsl 回答时间:2015-11-23 13:57:40
abclsl 发表于 2015-11-23 13:48
远程帧的标志位是哪一位,谢谢!

接收规则,我仔细看了没有发现怎么实现,请说明白一点谢谢!!!
abclsl 回答时间:2015-11-23 14:12:11
远程帧rtr设置为1 ,但是接收不到
abclsl 回答时间:2015-11-23 14:37:00
安臣 发表于 2015-11-23 10:16
有人。 只是canopen 没怎么玩过   帮顶。

can中断 无法接受吗?  不管是远程帧 还是 数据帧  接受就有中 ...

远程帧我测试的没有中断,不知道怎么设置,应该和数据帧不一样。
abclsl 回答时间:2015-11-23 15:06:57
本帖最后由 abclsl 于 2015-11-23 20:17 编辑

sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
  sFilterConfig.FilterIdHigh = 0x0000;
  sFilterConfig.FilterIdLow = 0x0000;
  sFilterConfig.FilterMaskIdHigh = 0x0000;
  sFilterConfig.FilterMaskIdLow = 0x0000;
滤波器配置
abclsl 回答时间:2015-11-23 18:34:57
can的配置,但是如果有数据确实能进入中断,但是没有数据就进不了中断,所以遥控帧接收不了,请高手指教,急! 会不会我的芯片买假了
lyp05401 回答时间:2015-11-24 08:50:07
abclsl 发表于 2015-11-23 13:57
接收规则,我仔细看了没有发现怎么实现,请说明白一点谢谢!!!

把初始化函数贴出来看看。
zhoupxa 回答时间:2015-11-24 09:03:13
远程帧的作用是向其他节点请求数据,设置时要注意ID是目标报文的ID,验收滤波也要相应设置。
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版