OpenEdv-开源电子网

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

CAN1_RX0_IRQHandler不进中断问题

[复制链接]

24

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2013-12-12
在线时间
19 小时
发表于 2016-3-31 09:47:32 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 jmldx 于 2016-3-31 11:08 编辑

各位,大家好,

现有个问题请教,

我用STM32F107的芯片,两个CAN 同时用,CAN2能正常接收和发送,CAN1发送也正常,但CAN1接收中断老是进不去,CAN1具体配置如下:

for(i = 0;i < 1; i ++)//CAN1&#197;&#228;&#214;&#195;1y&#194;&#203;&#198;÷
    {
        CAN_FilterInitStructure.CAN_FilterMode= CAN_FilterMode_IdMask;
        CAN_FilterInitStructure.CAN_FilterScale= CAN_FilterScale_32bit;
        CAN_FilterInitStructure.CAN_FilterNumber= i;
        switch(i)
        {
        case 0:
            cid = (uint32_t)(0x00008AF6<<3) | CAN_ID_EXT;
            CAN_FilterInitStructure.CAN_FilterIdHigh = (uint16_t)(cid>>16);
            CAN_FilterInitStructure.CAN_FilterIdLow = (uint16_t)(cid&0xffff);
            cid = (uint32_t)(0x00ffffff<<3) | CAN_ID_EXT;
            CAN_FilterInitStructure.CAN_FilterMaskIdHigh = (uint16_t)(cid>>16);
            CAN_FilterInitStructure.CAN_FilterMaskIdLow = (uint16_t)(cid&0xffff);
            break;        
        default:break;
        }
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
        CAN_FilterInit(&CAN_FilterInitStructure);
    }

CAN_InitStructure.CAN_TTCM=DISABLE;                                                 //·?ê±??'?·?í¨D???ê?  //
          CAN_InitStructure.CAN_ABOM=ENABLE;                                                 //èí?t×??ˉà???1üàí         //
          CAN_InitStructure.CAN_AWUM=ENABLE;                                                 //?ˉ????ê?í¨1yèí?t??D?(??3yCAN->MCRμ?SLEEP??)//
          CAN_InitStructure.CAN_NART=ENABLE;                                                         //???1±¨??×??ˉ'??í //
          CAN_InitStructure.CAN_RFLM=DISABLE;                                                 //±¨??2????¨,D?μ??2???éμ? //
          CAN_InitStructure.CAN_TXFP=ENABLE;                                                 //ó??è??ó鱨??±êê?·????¨ //
               
          CAN_InitStructure.CAN_Mode= mode;                 //&#196;£ê&#189;éè&#214;&#195;£o mode:0,&#198;&#213;í¨&#196;£ê&#189;;1,&#187;&#216;&#187;·&#196;£ê&#189;; //
          //éè&#214;&#195;2¨ì&#216;&#194;ê
          CAN_InitStructure.CAN_SJW=tsjw;                                //&#214;&#216;D&#194;í&#172;2&#189;ì&#248;&#212;&#190;&#191;í&#182;è(Tsjw)&#206;atsjw+1&#184;&#246;ê±&#188;&#228;μ¥&#206;&#187;  CAN_SJW_1tq         CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
          CAN_InitStructure.CAN_BS1=tbs1; //Tbs1=tbs1+1&#184;&#246;ê±&#188;&#228;μ¥&#206;&#187;CAN_BS1_1tq ~CAN_BS1_16tq
          CAN_InitStructure.CAN_BS2=tbs2;//Tbs2=tbs2+1&#184;&#246;ê±&#188;&#228;μ¥&#206;&#187;CAN_BS2_1tq ~        CAN_BS2_8tq
          CAN_InitStructure.CAN_Prescaler=18;            //·&#214;&#198;μ&#207;μêy(Fdiv)&#206;abrp+1        //
         // 3&#245;ê&#188;&#187;ˉCAN2
                CAN_Init(CAN1, &CAN_InitStructure);            // 3&#245;ê&#188;&#187;ˉCAN1
                CAN_InitStructure.CAN_Prescaler= 9;//18-- 250K
               CAN_Init(CAN2,&CAN_InitStructure);
        
          CAN_ITConfig(CAN1,CAN_IT_FMP0 | CAN_IT_FF0 | CAN_IT_FOV0,ENABLE);//FIFO0&#214;D&#182;&#207;.               
          CAN_ITConfig(CAN1,CAN_IT_RQCP0 | CAN_IT_RQCP1 | CAN_IT_RQCP2,ENABLE);
               
                CAN_ITConfig(CAN2,CAN_IT_FMP1 | CAN_IT_FF1 | CAN_IT_FOV1,ENABLE);//FIFO1&#214;D&#182;&#207;.               
          CAN_ITConfig(CAN2,CAN_IT_RQCP0 | CAN_IT_RQCP1 | CAN_IT_RQCP2,ENABLE);


void CAN1_RX0_IRQHandler(void)
{
        CAN_Receive(CAN1, CAN_FIFO0, &CAN1_RxMessage[0]);
        CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);
        CAN_ClearITPendingBit(CAN1,CAN_IT_FF0);
        CAN_ClearITPendingBit(CAN1,CAN_IT_FOV0);
        
        while(CAN_MessagePending(CAN1,CAN_FIFO0))
        {
                CAN_Receive(CAN1, CAN_FIFO0, &CAN1_RxMessage[0]);
                switch(CAN1_RxMessage[0].ExtId)
                {
                    case  A:
                    case  B:
                    case  C:
                 }
         }
}

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

使用道具 举报

24

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2013-12-12
在线时间
19 小时
 楼主| 发表于 2016-3-31 09:49:03 | 显示全部楼层
各位,大家好,

现有个问题请教,

我用STM32F107的芯片,两个CAN 同时用,CAN2能正常接收和发送,CAN1发送也正常,但CAN1接收中断老是进不去,CAN1具体配置如下:

for(i = 0;i < 1; i ++)//CAN1&#197;&#228;&#214;&#195;1y&#194;&#203;&#198;÷
    {
        CAN_FilterInitStructure.CAN_FilterMode= CAN_FilterMode_IdMask;
        CAN_FilterInitStructure.CAN_FilterScale= CAN_FilterScale_32bit;
        CAN_FilterInitStructure.CAN_FilterNumber= i;
        switch(i)
        {
        case 0:
            cid = (uint32_t)(0x00008AF6<<3) | CAN_ID_EXT;
            CAN_FilterInitStructure.CAN_FilterIdHigh = (uint16_t)(cid>>16);
            CAN_FilterInitStructure.CAN_FilterIdLow = (uint16_t)(cid&0xffff);
            cid = (uint32_t)(0x00ffffff<<3) | CAN_ID_EXT;
            CAN_FilterInitStructure.CAN_FilterMaskIdHigh = (uint16_t)(cid>>16);
            CAN_FilterInitStructure.CAN_FilterMaskIdLow = (uint16_t)(cid&0xffff);
            break;        
        default:break;
        }
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
        CAN_FilterInit(&CAN_FilterInitStructure);
    }

CAN_InitStructure.CAN_TTCM=DISABLE;                                                 //·?ê±??'?·?í¨D???ê?  //
          CAN_InitStructure.CAN_ABOM=ENABLE;                                                 //èí?t×??ˉà???1üàí         //
          CAN_InitStructure.CAN_AWUM=ENABLE;                                                 //?ˉ????ê?í¨1yèí?t??D?(??3yCAN->MCRμ?SLEEP??)//
          CAN_InitStructure.CAN_NART=ENABLE;                                                         //???1±¨??×??ˉ'??í //
          CAN_InitStructure.CAN_RFLM=DISABLE;                                                 //±¨??2????¨,D?μ??2???éμ? //
          CAN_InitStructure.CAN_TXFP=ENABLE;                                                 //ó??è??ó鱨??±êê?·????¨ //
               
          CAN_InitStructure.CAN_Mode= mode;                 //&#196;£ê&#189;éè&#214;&#195;£o mode:0,&#198;&#213;í¨&#196;£ê&#189;;1,&#187;&#216;&#187;·&#196;£ê&#189;; //
          //éè&#214;&#195;2¨ì&#216;&#194;ê
          CAN_InitStructure.CAN_SJW=tsjw;                                //&#214;&#216;D&#194;í&#172;2&#189;ì&#248;&#212;&#190;&#191;í&#182;è(Tsjw)&#206;atsjw+1&#184;&#246;ê±&#188;&#228;μ¥&#206;&#187;  CAN_SJW_1tq         CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
          CAN_InitStructure.CAN_BS1=tbs1; //Tbs1=tbs1+1&#184;&#246;ê±&#188;&#228;μ¥&#206;&#187;CAN_BS1_1tq ~CAN_BS1_16tq
          CAN_InitStructure.CAN_BS2=tbs2;//Tbs2=tbs2+1&#184;&#246;ê±&#188;&#228;μ¥&#206;&#187;CAN_BS2_1tq ~        CAN_BS2_8tq
          CAN_InitStructure.CAN_Prescaler=18;            //·&#214;&#198;μ&#207;μêy(Fdiv)&#206;abrp+1        //
         // 3&#245;ê&#188;&#187;ˉCAN2
                CAN_Init(CAN1, &CAN_InitStructure);            // 3&#245;ê&#188;&#187;ˉCAN1
                CAN_InitStructure.CAN_Prescaler= 9;//18-- 250K
               CAN_Init(CAN2,&CAN_InitStructure);
       
          CAN_ITConfig(CAN1,CAN_IT_FMP0 | CAN_IT_FF0 | CAN_IT_FOV0,ENABLE);//FIFO0&#214;D&#182;&#207;.               
          CAN_ITConfig(CAN1,CAN_IT_RQCP0 | CAN_IT_RQCP1 | CAN_IT_RQCP2,ENABLE);
               
                CAN_ITConfig(CAN2,CAN_IT_FMP1 | CAN_IT_FF1 | CAN_IT_FOV1,ENABLE);//FIFO1&#214;D&#182;&#207;.               
          CAN_ITConfig(CAN2,CAN_IT_RQCP0 | CAN_IT_RQCP1 | CAN_IT_RQCP2,ENABLE);


void CAN1_RX0_IRQHandler(void)
{
        CAN_Receive(CAN1, CAN_FIFO0, &CAN1_RxMessage[0]);
        CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);
        CAN_ClearITPendingBit(CAN1,CAN_IT_FF0);
        CAN_ClearITPendingBit(CAN1,CAN_IT_FOV0);
       
        while(CAN_MessagePending(CAN1,CAN_FIFO0))
        {
                CAN_Receive(CAN1, CAN_FIFO0, &CAN1_RxMessage[0]);
                switch(CAN1_RxMessage[0].ExtId)
                {
                    case  A:
                    case  B:
                    case  C:
                 }
         }
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-4-1 22:54:45 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 03:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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