中级会员
 
- 积分
- 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ÅäÖÃ1yÂËÆ÷
{
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; //Ä£ê½éèÖão mode:0,ÆÕí¨Ä£ê½;1,»Ø»·Ä£ê½; //
//éèÖÃ2¨ìØÂê
CAN_InitStructure.CAN_SJW=tsjw; //ÖØDÂí¬2½ìøÔ¾¿í¶è(Tsjw)Îatsjw+1¸öê±¼äμ¥λ CAN_SJW_1tq CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq
CAN_InitStructure.CAN_BS1=tbs1; //Tbs1=tbs1+1¸öê±¼äμ¥λCAN_BS1_1tq ~CAN_BS1_16tq
CAN_InitStructure.CAN_BS2=tbs2;//Tbs2=tbs2+1¸öê±¼äμ¥λCAN_BS2_1tq ~ CAN_BS2_8tq
CAN_InitStructure.CAN_Prescaler=18; //·ÖÆμÏμêy(Fdiv)Îabrp+1 //
// 3õê¼»ˉCAN2
CAN_Init(CAN1, &CAN_InitStructure); // 3õê¼»ˉ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ÖD¶Ï.
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ÖD¶Ï.
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:
}
}
} |
|