【求助】CAN通讯接收不到电脑发送的数据

2019-10-15 23:19发布

从机通过CAN卡与电脑连接起来,电脑给从机发送数据,硬件上可以检测到ARM的CAN-RX有脉冲,但是RxMassage里一直没有值,也没有进入接收中断,请大家看看我的程序有什么问题?[mw_shl_code=applescript,true]static void CAN_NVIC_Config(void)
{
           NVIC_InitTypeDef NVIC_InitStructure;
                /* Configure one bit for preemption priority */
                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
                 /*ÖD¶ÏéèÖÃ*/
                NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;           //CAN1 RX0ÖD¶Ï
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;                   //ÇàÕ¼óÅÏ輶0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                           //×óóÅÏ輶Îa0
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
枫之韵2012006
1楼-- · 2019-10-16 02:35
[mw_shl_code=applescript,true]static void CAN_Mode_Config(void)
{
           CAN_InitTypeDef        CAN_InitStructure;
          CAN_FilterInitTypeDef  CAN_FilterInitStructure;
                 /************************CANí¨DÅ2ÎêyéèÖÃ**********************************/
        /*CAN¼Ä′æÆ÷3õê¼»ˉ*/
                CAN_DeInit(CAN1);
                CAN_StructInit(&CAN_InitStructure);
        /*CANμ¥Ôa3õê¼»ˉ*/
                CAN_InitStructure.CAN_TTCM=DISABLE;                           //MCR-TTCM  ê±¼ä′¥·¢í¨DÅÄ£ê½ê1Äü
    CAN_InitStructure.CAN_ABOM=DISABLE;                           //MCR-ABOM  ×Ô¶ˉàëÏß1üàí
    CAN_InitStructure.CAN_AWUM=DISABLE;                           //MCR-AWUM  ×Ô¶ˉ»½DÑÄ£ê½
    CAN_InitStructure.CAN_NART=DISABLE;                           //MCR-NART  ½ûÖ1±¨ÎÄ×Ô¶ˉÖØ′«          DISABLE-×Ô¶ˉÖØ′«
    CAN_InitStructure.CAN_RFLM=DISABLE;                           //MCR-RFLM  ½óêÕFIFO Ëø¶¨Ä£ê½  DISABLE-òç3öê±D±¨ÎÄ»á¸2¸ÇÔ-óD±¨ÎÄ  
    CAN_InitStructure.CAN_TXFP=ENABLE;                           //MCR-TXFP  ·¢ËíFIFOóÅÏ輶 ENABLE óé·¢ËíÇëÇó′ÎDò¾ö¶¨£¬DISABLE-óÅÏ輶衾öóú±¨Îıêê¾·û
    CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;  //Õy3£·¢ËíÄ£ê½
    CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;                   //BTR-SJW ÖØDÂí¬2½ìøÔ¾¿í¶è 2¸öê±¼äμ¥Ôa
    CAN_InitStructure.CAN_BS1=CAN_BS1_6tq;                   //BTR-TS1 ê±¼ä¶Î1 Õ¼óÃáË6¸öê±¼äμ¥Ôa
    CAN_InitStructure.CAN_BS2=CAN_BS2_1tq;                   //BTR-TS1 ê±¼ä¶Î2 Õ¼óÃáË3¸öê±¼äμ¥Ôa
    CAN_InitStructure.CAN_Prescaler =36;                     //BTR-BRP 2¨ìØÂê·ÖÆμÆ÷  ¶¨òåáËê±¼äμ¥ÔaμÄê±¼ä3¤¶è,Ïμí3ê±Öó72MHz 36/(1+6+1)/36=125Kbps,CAN2¨ìØÂê36MHz/[36*(1+6+1)]=125kHz
//                 CAN_InitStructure.CAN_BS1=CAN_BS1_2tq;                   //BTR-TS1 ê±¼ä¶Î1 Õ¼óÃáË6¸öê±¼äμ¥Ôa
//    CAN_InitStructure.CAN_BS2=CAN_BS2_1tq;                   //BTR-TS1 ê±¼ä¶Î2 Õ¼óÃáË3¸öê±¼äμ¥Ôa
//    CAN_InitStructure.CAN_Prescaler =9;                     //BTR-BRP 2¨ìØÂê·ÖÆμÆ÷  ¶¨òåáËê±¼äμ¥ÔaμÄê±¼ä3¤¶è 36/(1+2+1)/9=1Mbps
        CAN_Init(CAN1, &CAN_InitStructure);

       
       
        /*CAN1yÂËÆ÷3õê¼»ˉ*/
        CAN_FilterInitStructure.CAN_FilterNumber=0;                                                //1yÂËÆ÷×é0
    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;        //1¤×÷Ôú±ê궷ûÆá±ÎλÄ£ê½
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit;        //1yÂËÆ÷λ¿íÎa2¸ö16λ¡£
        /* ê1Äü±¨Îıêê¾·û1yÂËÆ÷°′ÕÕ±êê¾·ûμÄÄúèY½øDD±è¶Ô1yÂË£¬à©Õ1ID2»êÇèçÏÂμľíÅ×Æúμô£¬êÇμÄ»°£¬»á′æèëFIFO0¡£ */
        CAN_FilterInitStructure.CAN_FilterIdHigh= 0x0000;        //òa1yÂËμÄID¸ßλ
        CAN_FilterInitStructure.CAN_FilterIdLow= 0x0101; //òa1yÂËμÄIDμíλ
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF;                        //1yÂËÆ÷¸ß16λÿλ±ØDëÆ¥Åä
        CAN_FilterInitStructure.CAN_FilterMaskIdLow = (u16)(((u16)0xFFE0<<3)|0x07);//&#189;&#246;ê1ó&#195;μí5&#206;&#187;1|&#196;ü&#194;&#235;£&#172;&#184;&#223;3&#206;&#187;±&#216;D&#235;&#206;a0 //(u16)(((u16)0xFF00<<3)|0x07);                        //1y&#194;&#203;&#198;÷μí16&#206;&#187;&#195;&#191;&#206;&#187;±&#216;D&#235;&#198;¥&#197;&#228;
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0 ;                                //1y&#194;&#203;&#198;÷±&#187;1&#216;áaμ&#189;FIFO0
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;                        //ê1&#196;ü1y&#194;&#203;&#198;÷
        CAN_FilterInit(&CAN_FilterInitStructure);
       
        /*CANí¨D&#197;&#214;D&#182;&#207;ê1&#196;ü*/
        CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
        //CAN_ITConfig(CAN1, CAN_IT_EWG | CAN_IT_EPV | CAN_IT_BOF | CAN_IT_ERR | CAN_IT_LEC, ENABLE);                                 //&#191;a&#198;&#244;′í&#206;ó&#214;D&#182;&#207;
}[/mw_shl_code]
枫之韵2012006
2楼-- · 2019-10-16 04:39
[mw_shl_code=applescript,true]void USB_LP_CAN1_RX0_IRQHandler(void)
{
               
                  u8 FunCode;
          //u16 i;
           u16 CCR1;
               
                CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
               
                if((RxMessage.StdId!=0) && (RxMessage.IDE==CAN_ID_EXT)
     && (RxMessage.DLC!=0) && ((RxMessage.Data[1]<<8|RxMessage.Data[0])!=0))
  {
    flag = 0;                                                //&#189;óê&#213;3é1|
  }
  else
  {
    flag = 0xff;                                            //&#189;óê&#213;꧰ü
  }
               
                FunCode = RxMessage.StdId & 0x1f;                                        //D-òé&#214;Dê1ó&#195;8&#206;&#187;1|&#196;ü&#194;&#235;£&#172;&#182;&#248;êμ&#188;ê&#214;D&#206;aá&#203;ó&#235;éy&#188;&#182;&#195;üá&#238;ò&#187;&#214;&#194;ê1ó&#195;á&#203;5&#206;&#187;1|&#196;ü&#194;&#235;
       
          CCR1=RxMessage.Data[3] << 24 | RxMessage.Data[2]<< 16|RxMessage.Data[1]<< 8| RxMessage.Data[0];               

        }[/mw_shl_code]
ljz1987cj
3楼-- · 2019-10-16 09:45
看看有没进中断
枫之韵2012006
4楼-- · 2019-10-16 11:17
这个是利用CANalyst调试的截图 可以收到数据 但是电脑给从机发送数据 也没有发送失败的提示
枫之韵2012006
5楼-- · 2019-10-16 17:14
 精彩回答 2  元偷偷看……
ljz1987cj
6楼-- · 2019-10-16 19:01
枫之韵2012006 发表于 2016-12-23 10:37
没有 我怀疑是中断的问题 但是找不到原因

没有检查下硬件

一周热门 更多>