STM32F4的CAN1对OBD接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuxinke_blog/article/details/78909285

首先来看一下接收:

接收到的报文,被存储在3级邮箱深度的FIFO中。FIFO完全由硬件来管理,从而节省了CPU的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读取FIFO输出邮箱,来读取FIFO中最先收到的报文。

因为它有多少组Filter来着?所以,我现在就是要看到来自OBD模拟器的数据。

  1. 我要全部接收,是不是关掉Filter就好了?看不到全部接收的数据,
  2. STANDARD_FORMAT和EXTENDED_FORMAT分别是什么?8个Byte就是标准格式
  3. DATA_FRAME和REMOTE_FRAME分别是什么?
  4. 我要的数据呢?就那8个字节
  5. 配置文件在哪里被存储?在哪里被读取?
  6. CAN数据要进过Filter匹配了才能被收到


/* CAN message object structure                                              */
typedef struct {
  U32 id;                 /* 29 bit identifier                               */
  U8  data[8];            /* Data field                                      */
  U8  len;                /* Length of data field in bytes                   */
  U8  ch;                 /* Object channel                                  */
  U8  format;             /* 0 - STANDARD,   1 - EXTENDED IDENTIFIER         */
  U8  type;               /* 0 - DATA FRAME, 1 - REMOTE FRAME                */
} CAN_msg;

后来找到了问题:

1我用以下配置可以读到所有ID的帧

#if 0/*cantestonly*/
        //ÅäÖùýÂËÆ÷
       CAN_FilterInitStructure.CAN_FilterNumber=0;      //¹ýÂËÆ÷0
      CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
      CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32λ
      CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32λID
      CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
      CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32λMASK
      CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
       CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//¹ýÂËÆ÷0¹ØÁªµ½FIFO0
      CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //¼¤»î¹ýÂËÆ÷0
      CAN_FilterInit(&CAN_FilterInitStructure);//Â˲¨Æ÷³õʼ»¯

#endif

4,调试技巧,1可以查看CAN的第二个寄存器,有RX和RX samp位变化说明有采样到信号;2,R0FR可以看到收了几个帧,00到11个,以及溢出,等信息,3有一个寄存器可以看到帧ID,有一个寄存器可以看到该ID下面的数据。8个字节

未完待续!

猜你喜欢

转载自blog.csdn.net/wuxinke_blog/article/details/78909285