OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2944|回复: 10

stm32can接收

[复制链接]

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2016-9-10
在线时间
12 小时
发表于 2019-4-8 21:33:06 | 显示全部楼层 |阅读模式
5金钱
走过路过的朋友:FIFO有两个报文,怎么同时处理这两个数据,要根据两个报文数据内容进行下一步动作,调用两次CAN_Receive吗?还是一次就行?一次调用结构体是一样的不会混淆嘛?if (CAN1->RF0R&=0x10)
{
CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);
if((RxMessage.ExtId==xxxxxx,RxMessage.Data[0]==0x20)&&(RxMessage.ExtId==xxxxxx,RxMessage.Data[0]==0x20))
{
  TxMessage.Data[0]=0x20;
  TransmitMailbox=CAN_Transmit(CAN1,&TxMessage);
}
}这样能行吗?请求指教

最佳答案

查看完整内容[请看2#楼]

你接收两次然后做个比较不就行了,接收第一帧→保存在数组1→接收第二帧→保存在数组2→比较数组1和数组2
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2019-4-9
在线时间
7 小时
发表于 2019-4-8 21:33:07 | 显示全部楼层
你接收两次然后做个比较不就行了,接收第一帧→保存在数组1→接收第二帧→保存在数组2→比较数组1和数组2
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-4-9 01:25:21 | 显示全部楼层
多个报文就读多次
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2016-9-10
在线时间
12 小时
 楼主| 发表于 2019-4-9 19:44:36 | 显示全部楼层
正点原子 发表于 2019-4-9 01:25
多个报文就读多次

我需要这两个报文的数据,两个报文数据同时满足条件,我才能进行下一步动作,具体怎么读啊,先接受一次,进行判断,在接收一次吗,能贴一下代码吗?谢谢
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-4-10 01:40:15 | 显示全部楼层
Jayden 发表于 2019-4-9 19:44
我需要这两个报文的数据,两个报文数据同时满足条件,我才能进行下一步动作,具体怎么读啊,先接受一次, ...

FIFO是先入先出,你有多组数据,读多次就行了,没有什么毛病
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2016-9-10
在线时间
12 小时
 楼主| 发表于 2019-4-10 19:29:18 | 显示全部楼层
正点原子 发表于 2019-4-10 01:40
FIFO是先入先出,你有多组数据,读多次就行了,没有什么毛病

写在一个条件语句中吗?
if (CAN1->RF0R&=0x10)
{
CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);
CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);
if((RxMessage.ExtId==xxxxxx,RxMessage.Data[0]==0x20)&&(RxMessage.ExtId==xxxxxx,RxMessage.Data[0]==0x20))
{
  TxMessage.Data[0]=0x20;
  TransmitMailbox=CAN_Transmit(CAN1,&TxMessage);
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-4-11 01:26:47 | 显示全部楼层
Jayden 发表于 2019-4-10 19:29
写在一个条件语句中吗?
if (CAN1->RF0R&=0x10)
{

不,你查询有就读一次,如果fifo有,会一直提示你的。不是直接receive 两次,得按规矩来
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2016-9-10
在线时间
12 小时
 楼主| 发表于 2019-4-11 21:32:19 | 显示全部楼层
正点原子 发表于 2019-4-11 01:26
不,你查询有就读一次,如果fifo有,会一直提示你的。不是直接receive 两次,得按规矩来

我想两个FIFO存在两个报文的时候再接收,但是不知道怎么比较这两个报文的数据
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2016-9-10
在线时间
12 小时
 楼主| 发表于 2019-4-11 21:33:58 | 显示全部楼层
otto1230 发表于 2019-4-11 09:59
你接收两次然后做个比较不就行了,接收第一帧→保存在数组1→接收第二帧→保存在数组2→比较数组1和数组2

FIFO存储两个报文我再接收,应该怎么比较这两个报文的数据啊,我只需要这两个报文的Byte0的数据
回复

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2016-9-10
在线时间
12 小时
 楼主| 发表于 2019-4-11 21:34:24 | 显示全部楼层
正点原子 发表于 2019-4-11 01:26
不,你查询有就读一次,如果fifo有,会一直提示你的。不是直接receive 两次,得按规矩来

我只需要这两个报文的Byte0的数据
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-4-13 02:27:09 | 显示全部楼层
Jayden 发表于 2019-4-11 21:34
我只需要这两个报文的Byte0的数据

自己试验吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 15:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表