新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2014-12-16
- 在线时间
- 2 小时
|
发表于 2014-12-16 15:08:42
|
显示全部楼层
回复【9楼】正点原子:
-------------------------
搂住&原子兄,你好!
stm32107互联性产品中双can通信,主can1和从can2,通过收发器连成一个局域网,在一个CPU前提下,
主can1和从can2同时工作.如果把滤波器设置成0即不使用屏蔽接受全标识符,can1和can2可以进入中断收发,但是打开滤波器后,两个can都不进中断,同样只设置屏蔽位为0想问哈是不是器件不支持?但是,不使用滤波器就可以进中断.代码设置如下
NVIC_InitTypeDef NVIC_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/* CAN register init */
CAN_DeInit(CAN2);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
CAN_StructInit(&CAN_InitStructure);
/* CAN cell init */
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = ENABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = CAN_BS1_14tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
CAN_InitStructure.CAN_Prescaler = 8;
CAN_Init(CAN2, &CAN_InitStructure);
/* CAN filter init */
CAN_FilterInitStructure.CAN_FilterNumber = 14;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
//(((CAN1_RcvID<<3)&0xFFFF0000)>>16);
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; //(((CAN1_RcvID<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF);
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; //0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000; //0xFFFF;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
/* Configure CAN pin: RX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure CAN pin: TX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap_CAN2, ENABLE);
CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 6;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
can1设置类似.如果知道 |
|