求一个Can接收指定ID数据的例程,万谢!!!

2019-08-20 15:52发布

第一次Can通讯,做的协议按232格式做的,发现接收8帧数据开始就出现了异常。结果看Can通讯,说是接收ID报文,我初始程序也改了,接收中断中也判断了Rxceive.ExtId==0x1234,后面接着处理canbuf中的数据。但是发现接收不到数据。折腾几天了,不知问题出哪儿了? 哪位有例程,求一个,万谢!!!stm32F1或stm32f4的都可以,起码能调通,顺利接收指定ID的数据。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
challenger
2019-08-20 19:00
challenger 发表于 2017-4-29 10:25
#define EXID1  0x4321
        #define EXID2  0x1234
               

                #define EXID1  0x0001
                #define EXID2  0x0002
                #define EXID3  0x0003
                #define EXID4  0x0004
               

               
          CAN_FilterInitStructure.CAN_FilterNumber=0;          //1yÂËÆ÷0
                CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdList;
          CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32λ
   
          CAN_FilterInitStructure.CAN_FilterIdHigh= ((((u32)EXID1<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF0000)>>16;                //òaé&#184;&#209;&#161;μ&#196;ID&#184;&#223;&#206;&#187;
          CAN_FilterInitStructure.CAN_FilterIdLow= (((u32)EXID1<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF; //òaé&#184;&#209;&#161;μ&#196;IDμí&#206;&#187;
               
          CAN_FilterInitStructure.CAN_FilterMaskIdHigh=((((u32)EXID2<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF0000)>>16;                //òaé&#184;&#209;&#161;μ&#196;ID&#184;&#223;&#206;&#187;
          CAN_FilterInitStructure.CAN_FilterMaskIdLow= (((u32)EXID2<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF; //òaé&#184;&#209;&#161;μ&#196;IDμí&#206;&#187;
               
          CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0 ;                                //é&#184;&#209;&#161;&#198;÷±&#187;1&#216;áaμ&#189;FIFO0
          CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;                        //ê1&#196;üé&#184;&#209;&#161;&#198;÷
    CAN_FilterInit(&CAN_FilterInitStructure);
                               
          CAN_FilterInitStructure.CAN_FilterNumber=1;          //1y&#194;&#203;&#198;÷0
                CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdList;
          CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32&#206;&#187;

          CAN_FilterInitStructure.CAN_FilterIdHigh= ((((u32)EXID3<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF0000)>>16;                //òaé&#184;&#209;&#161;μ&#196;ID&#184;&#223;&#206;&#187;
          CAN_FilterInitStructure.CAN_FilterIdLow= (((u32)EXID3<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF; //òaé&#184;&#209;&#161;μ&#196;IDμí&#206;&#187;

          CAN_FilterInitStructure.CAN_FilterMaskIdHigh=((((u32)EXID4<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF0000)>>16;                //òaé&#184;&#209;&#161;μ&#196;ID&#184;&#223;&#206;&#187;
          CAN_FilterInitStructure.CAN_FilterMaskIdLow= (((u32)EXID4<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF; //òaé&#184;&#209;&#161;μ&#196;IDμí&#206;&#187;
       
          CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0 ;                                //é&#184;&#209;&#161;&#198;÷±&#187;1&#216;áaμ&#189;FIFO0
          CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;                        //ê1&#196;üé&#184;&#209;&#161;&#198;÷
    CAN_FilterInit(&CAN_FilterInitStructure);

此问题,已经解决,研究好久,在网上找了不少资料。看了原子哥视频,然后再看野火的视频,终于解决了。答案贴在上面了。

一周热门 更多>