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

2019-08-20 15:52发布

第一次Can通讯,做的协议按232格式做的,发现接收8帧数据开始就出现了异常。结果看Can通讯,说是接收ID报文,我初始程序也改了,接收中断中也判断了Rxceive.ExtId==0x1234,后面接着处理canbuf中的数据。但是发现接收不到数据。折腾几天了,不知问题出哪儿了? 哪位有例程,求一个,万谢!!!stm32F1或stm32f4的都可以,起码能调通,顺利接收指定ID的数据。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
challenger
1楼-- · 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);

此问题,已经解决,研究好久,在网上找了不少资料。看了原子哥视频,然后再看野火的视频,终于解决了。答案贴在上面了。
正点原子
2楼-- · 2019-08-20 22:52
 精彩回答 2  元偷偷看……
challenger
3楼-- · 2019-08-20 23:57
本帖最后由 challenger 于 2017-4-29 10:54 编辑
正点原子 发表于 2017-4-28 18:13
帮顶

               
        #define EXID1  0x4321
        #define EXID2  0x1234
               
        #define EXID3  0x2345
        #define EXID4  0x3456
               
               
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_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);

原子哥,这样设置怎么只能收到0x2345,0x3456后面两组,0x4321,0x1234前面两组怎么收不到呢?求教,还有哪个地方没设置对?难道最多只能指定两组ID吗?

一周热门 更多>