中级会员
 
- 积分
- 215
- 金钱
- 215
- 注册时间
- 2012-12-17
- 在线时间
- 77 小时
|
5金钱
程序如下,u16 std_id=0X3e7;
u16 msk_id=0X4b2;
void CAN_SetStdFilterIdMsk16(u8 number,u16 ID,u16 Mask)
{
CAN_FilterInitTypeDef CAN_FilterInitStructure;
/* CAN 过滤器设置 */
CAN_FilterInitStructure.CAN_FilterNumber=number;
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit;
CAN_FilterInitStructure.CAN_FilterIdHigh=0XFFFF;
CAN_FilterInitStructure.CAN_FilterIdLow=ID<<5;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0XFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow=Mask<<5;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
}
void CAN1_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
// CAN_DISABLE(); //在main函数开canbus
/* PD0-CAN RX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*pd1-CAN TX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
CAN_SetBps(BPS_500K);
CAN_SetStdFilterIdMsk16(0,std_id,msk_id);
//CAN_SetStdFilterIdLst16(0,0x12,0x13,0x14,0x15);
NVIC_InitStructure.NVIC_IRQChannel=USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(& NVIC_InitStructure);
CAN_ITConfig(CAN1, CAN_IT_FMP0|CAN_IT_FF0|CAN_IT_FOV0, ENABLE);
CAN_ITConfig(CAN1, CAN_IT_TME, DISABLE);
}
如上设置接收来自上位机发来的标准Z,只能过滤出std_id=0X3e7,而仿真msk_id=0X4b2不能正常过滤,进不了中断,求大神帮忙分析。折腾了好久
|
-
最佳答案
查看完整内容[请看2#楼]
库函数里面过滤器的设置是这样的
你这里的参数填错了,应该这么填:
void CAN_SetStdFilterIdMsk16(u8 number,u16 ID,u16 Mask)[/backcolor]
{[/backcolor]
CAN_FilterInitTypeDef CAN_FilterInitStructure;[/backcolor]
/* CAN 过滤器设置 */[/backcolor]
CAN_FilterInitStructure.CAN_FilterNumber=number;[/backcolor]
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;[/back ...
|