刘平辉 发表于 2014-3-27 18:54:13

STM32 CAN如何通过PGN来过滤数据


如图:已知了PGN,怎样才能过滤我想要的数据
CanRxMsg RxMessage;//定义一个接收CAN数据的变量
u8 can_rx_data;
RxMessage.StdId=0x00;
RxMessage.IDE=CAN_ID_STD;
RxMessage.DLC=0;
if(CAN_MessagePending(CAN_FIFO0))
{
CAN_Receive(CAN_FIFO0,&RxMessage);
if(XXXXXX == 0x00F601)//XXXXX表示一个关键的代码,我不知道是什么,但我想应该跟RxMessage有关,我想通过这个PGN的判断来得到我想要的数据,我该怎么做,求各位大神指点迷津,小弟感激不尽!!!!!
{
for(i=0;i < RxMessage.DLC;i++)
{
can_rx_data = RxMessage.Data;
}
}
}

story_xjj 发表于 2014-3-28 12:45:51

RE:STM32 CAN如何通过PGN来过滤数据

这是J1939协议的解析,根据协议规定的CANID内容解析出PGN数据,然后比较就可以了。:D
这是J1939中文标准中的一部分,其中有关于如何在PDU中解析PGN的方法,供楼主参考吧

发表于 2014-3-28 14:35:14

RE:STM32 CAN如何通过PGN来过滤数据

1、CAN数据接收放入缓冲区
2、从缓冲区中读取到CAN数据,如果是要ID匹配就判断ID,如果是要PGN匹配就截取PGN。

灰小子-1888763 发表于 2014-3-30 17:59:32

RE:STM32 CAN如何通过PGN来过滤数据

为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。
为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。
页: [1]
查看完整版本: STM32 CAN如何通过PGN来过滤数据