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

查看: 6474|回复: 8

can接收函数最后释放邮箱,数据岂不是没保存?

[复制链接]

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-11-30 20:37:25 | 显示全部楼层 |阅读模式
void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage)
{
  /* Check the parameters */
  assert_param(IS_CAN_ALL_PERIPH(CANx));
  assert_param(IS_CAN_FIFO(FIFONumber));
  /* Get the Id */
  RxMessage->IDE = (uint8_t)0x04 & CANx->sFIFOMailBox[FIFONumber].RIR;
  if (RxMessage->IDE == CAN_Id_Standard)
  {
    RxMessage->StdId = (uint32_t)0x000007FF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 21);
  }
  else
  {
    RxMessage->ExtId = (uint32_t)0x1FFFFFFF & (CANx->sFIFOMailBox[FIFONumber].RIR >> 3);
  }
  
  RxMessage->RTR = (uint8_t)0x02 & CANx->sFIFOMailBox[FIFONumber].RIR;
  /* Get the DLC */
  RxMessage->DLC = (uint8_t)0x0F & CANx->sFIFOMailBox[FIFONumber].RDTR;
  /* Get the FMI */
  RxMessage->FMI = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDTR >> 8);
  /* Get the data field */
  RxMessage->Data[0] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDLR;
  RxMessage->Data[1] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 8);
  RxMessage->Data[2] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 16);
  RxMessage->Data[3] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDLR >> 24);
  RxMessage->Data[4] = (uint8_t)0xFF & CANx->sFIFOMailBox[FIFONumber].RDHR;
  RxMessage->Data[5] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 8);
  RxMessage->Data[6] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 16);
  RxMessage->Data[7] = (uint8_t)0xFF & (CANx->sFIFOMailBox[FIFONumber].RDHR >> 24);
  /* Release the FIFO */
  /* Release FIFO0 */
  if (FIFONumber == CAN_FIFO0)
  {
    CANx->RF0R |= CAN_RF0R_RFOM0;
  }
  /* Release FIFO1 */
  else /* FIFONumber == CAN_FIFO1 */
  {
    CANx->RF1R |= CAN_RF1R_RFOM1;
  }
}



这句话
CANx->RF0R |= CAN_RF0R_RFOM0;
是释放邮箱,接收数据是放在邮箱中的,并没有读取,那这样不是把数据给释放掉了,这样理解对不对?
 
<
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-11-30 20:57:38 | 显示全部楼层

RE:can接收函数最后释放邮箱,数据岂不是没保存?

RxMessage-&gt;Data[0] ,这里把数据读取走了。
RxMessage-&gt;StdId ,这里把ID取走了。
回复 支持 反对

使用道具 举报

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-11-30 21:22:14 | 显示全部楼层

回复:can接收函数最后释放邮箱,数据岂不是没保存?

回复第 2 楼 于2011-11-30 12:57:38发表:
RxMessage-&gt;Data[0] ,这里把数据读取走了。
RxMessage-&gt;StdId ,这里把ID取走了。 

那邮箱和RxMessage什么关系?
回复 支持 反对

使用道具 举报

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-11-30 21:22:28 | 显示全部楼层

回复:can接收函数最后释放邮箱,数据岂不是没保存?

回复第 2 楼 于2011-11-30 12:57:38发表:
RxMessage-&gt;Data[0] ,这里把数据读取走了。
RxMessage-&gt;StdId ,这里把ID取走了。 

那邮箱和RxMessage什么关系?
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-11-30 22:02:31 | 显示全部楼层

RE:can接收函数最后释放邮箱,数据岂不是没保存?

FIFO是用来存放数据的,当读取走数据以后,这里就释放掉,给后面的数据使用。这个你可以搜索一下FIFO的工作方式。
回复 支持 反对

使用道具 举报

3

主题

185

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-12-1 00:24:53 | 显示全部楼层

回复:can接收函数最后释放邮箱,数据岂不是没保存?

这个数据是你老大自己保存的,你爱怎么弄都可以。读出数据后,就是你自己处理了。
回复 支持 反对

使用道具 举报

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-12-1 09:31:18 | 显示全部楼层

回复:can接收函数最后释放邮箱,数据岂不是没保存?

回复第 5 楼 于2011-11-30 14:02:31发表:
FIFO是用来存放数据的,当读取走数据以后,这里就释放掉,给后面的数据使用。这个你可以搜索一下FIFO的工作方式。 

接受邮箱,FIFO是sram还是寄存器?对这个没理解透彻?
回复 支持 反对

使用道具 举报

12

主题

14

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-12-1 09:28:47 | 显示全部楼层

回复:can接收函数最后释放邮箱,数据岂不是没保存?

回复第 5 楼 于2011-11-30 14:02:31发表:
FIFO是用来存放数据的,当读取走数据以后,这里就释放掉,给后面的数据使用。这个你可以搜索一下FIFO的工作方式。 

接受邮箱,FIFO是sram还是寄存器?对这个没理解透彻?
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-12-1 09:45:04 | 显示全部楼层

RE:can接收函数最后释放邮箱,数据岂不是没保存?

你可以在网上搜索一下对于FIFO的介绍
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版