OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2991|回复: 9

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

[复制链接]

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-1-21
在线时间
12 小时
发表于 2016-12-23 10:25:38 | 显示全部楼层 |阅读模式
1金钱
从机通过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]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-1-21
在线时间
12 小时
 楼主| 发表于 2016-12-23 10:26:10 | 显示全部楼层
[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]
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-1-21
在线时间
12 小时
 楼主| 发表于 2016-12-23 10:27:47 | 显示全部楼层
[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]
回复

使用道具 举报

5

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2016-10-27
在线时间
76 小时
发表于 2016-12-23 10:35:00 | 显示全部楼层
看看有没进中断
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-1-21
在线时间
12 小时
 楼主| 发表于 2016-12-23 10:35:31 | 显示全部楼层
这个是利用CANalyst调试的截图 可以收到数据 但是电脑给从机发送数据 也没有发送失败的提示
U5F[J9V4NQTQEEOPA8YP6UM.jpg
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-1-21
在线时间
12 小时
 楼主| 发表于 2016-12-23 10:37:11 | 显示全部楼层

没有 我怀疑是中断的问题 但是找不到原因
回复

使用道具 举报

5

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2016-10-27
在线时间
76 小时
发表于 2016-12-23 10:59:34 | 显示全部楼层
枫之韵2012006 发表于 2016-12-23 10:37
没有 我怀疑是中断的问题 但是找不到原因

没有检查下硬件
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-1-21
在线时间
12 小时
 楼主| 发表于 2016-12-23 11:15:43 | 显示全部楼层

硬件CAN收发器Rx引脚有脉冲啊
回复

使用道具 举报

5

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2016-10-27
在线时间
76 小时
发表于 2016-12-23 11:24:14 | 显示全部楼层
枫之韵2012006 发表于 2016-12-23 11:15
硬件CAN收发器Rx引脚有脉冲啊

接反了没啊  终端电阻测了吗
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-1-21
在线时间
12 小时
 楼主| 发表于 2016-12-23 13:11:18 | 显示全部楼层
ljz1987cj 发表于 2016-12-23 11:24
接反了没啊  终端电阻测了吗

我把canlyst里发送的数据ID改为0000就能收到发送的8个数据了,很奇怪,我接收FIFO设置的ID是00000101,这怎么解释?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-28 01:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表