STM32CAN筛选器编号实测发现

  • 格式:doc
  • 大小:285.50 KB
  • 文档页数:4

两个16 位筛选器- 标识符掩码ID CAN_FxR1[15:8] CAN_FxR1[7:0] n 掩码CAN_FxR2[15:8] CAN_FxR2[7:0]ID CAN_FxR1[31:24] CAN_FxR1[23:16] n+1 掩码CAN_FxR1[23:16] CAN_FxR2[23:16]四个16 位筛选器- 标识符列表ID CAN_FxR1[15:8] CAN_FxR1[7:0] n掩码CAN_FxR2[15:8] CAN_FxR2[7:0] N+1ID CAN_FxR1[31:24] CAN_FxR1[23:16] N+2掩码CAN_FxR1[23:16] CAN_FxR2[23:16] N+3测试程序:CAN初始化u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode){GPIO_InitTypeDef GPIO_InitStructure;CAN_InitTypeDef CAN_InitStructure;CAN_FilterInitTypeDef CAN_FilterInitStructure;#if CAN1_RX0_INT_ENABLENVIC_InitTypeDef NVIC_InitStructure;#endif//ʹÄÜÏà¹ØÊ±ÖÓRCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//ʹÄÜPORTAʱÖÓRCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//ʹÄÜCAN1ʱÖÓ//³õʼ»¯GPIOGPIO_InitStructure.GPIO_Pin = GPIO_Pin_11| GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸´Óù¦ÄÜGPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//ÍÆÍìÊä³öGPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//ÉÏÀ-GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯PA11,PA12//Òý½Å¸´ÓÃÓ³ÉäÅäÖÃGPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_CAN1); //GPIOA11¸´ÓÃΪCAN1GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_CAN1); //GPIOA12¸´ÓÃΪCAN1//CANµ¥ÔªÉèÖÃCAN_InitStructure.CAN_TTCM=DISABLE; //·Çʱ¼ä´¥·¢Í¨ÐÅģʽCAN_InitStructure.CAN_ABOM=DISABLE; //Èí¼þ×Ô¶¯ÀëÏß¹ÜÀíCAN_InitStructure.CAN_AWUM=DISABLE;//˯Ãßģʽͨ¹ýÈí¼þ»½ÐÑ(Çå³ýCAN->MCRµÄSLEEPλ)CAN_InitStructure.CAN_NART=ENABLE; //½ûÖ¹±¨ÎÄ×Ô¶¯´«ËÍCAN_InitStructure.CAN_RFLM=DISABLE; //±¨ÎIJ»Ëø¶¨,еĸ²¸Ç¾ÉµÄCAN_InitStructure.CAN_TXFP=DISABLE; //ÓÅÏȼ¶Óɱ¨Îıêʶ·û¾ö¶¨CAN_InitStructure.CAN_Mode= mode; //ģʽÉèÖÃCAN_InitStructure.CAN_SJW=tsjw; //ÖØÐÂͬ²½ÌøÔ¾¿í¶È(Tsjw)Ϊtsjw+1¸öʱ¼äµ¥Î» CAN_SJW_1tq~CAN_SJW_4tq CAN_InitStructure.CAN_BS1=tbs1; //Tbs1·¶Î§CAN_BS1_1tq ~CAN_BS1_16tqCAN_InitStructure.CAN_BS2=tbs2;//Tbs2·¶Î§CAN_BS2_1tq ~ CAN_BS2_8tqCAN_InitStructure.CAN_Prescaler=brp; //·ÖƵϵÊý(Fdiv)Ϊbrp+1CAN_Init(CAN1, &CAN_InitStructure); // ³õʼ»¯CAN1//ÅäÖùýÂËÆ÷0CAN_FilterInitStructure.CAN_FilterNumber=0; //¹ýÂËÆ÷0CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdList;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32λCAN_FilterInitStructure.CAN_FilterIdHigh=0x0;////32λIDCAN_FilterInitStructure.CAN_FilterIdLow=(0x0600 << 3)|4;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0;//32λMASKCAN_FilterInitStructure.CAN_FilterMaskIdLow=(0x0601 << 3) | 4;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//¹ýÂËÆ÷0¹ØÁªµ½FIFO0CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //¼¤»î¹ýÂËÆ÷0CAN_FilterInit(&CAN_FilterInitStructure);//Â˲¨Æ÷³õʼ»¯//ÅäÖùýÂËÆ÷1CAN_FilterInitStructure.CAN_FilterNumber=1; //¹ýÂËÆ÷1CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32λCAN_FilterInitStructure.CAN_FilterIdHigh=0;////32λIDCAN_FilterInitStructure.CAN_FilterIdLow=(0x602<< 3) | 4;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0XFFFF;//32λMASKCAN_FilterInitStructure.CAN_FilterMaskIdLow=0XFFFF;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//¹ýÂËÆ÷0¹ØÁªµ½FIFO0CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //¼¤»î¹ýÂËÆ÷0CAN_FilterInit(&CAN_FilterInitStructure);//Â˲¨Æ÷³õʼ»¯//ÅäÖùýÂËÆ÷2CAN_FilterInitStructure.CAN_FilterNumber=2; //¹ýÂËÆ÷2CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdList;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit; //32λCAN_FilterInitStructure.CAN_FilterIdHigh=0x603 << 5;////32λIDCAN_FilterInitStructure.CAN_FilterIdLow=0x0604 << 5;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x605 << 5;//32λMASKCAN_FilterInitStructure.CAN_FilterMaskIdLow=0x606 << 5;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//¹ýÂËÆ÷0¹ØÁªµ½FIFO0 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //¼¤»î¹ýÂËÆ÷0CAN_FilterInit(&CAN_FilterInitStructure);//Â˲¨Æ÷³õʼ»¯//ÅäÖùýÂËÆ÷3CAN_FilterInitStructure.CAN_FilterNumber=3; //¹ýÂËÆ÷10CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit; //32λCAN_FilterInitStructure.CAN_FilterIdHigh= 0x400 << 5;////32λIDCAN_FilterInitStructure.CAN_FilterIdLow=0x300 << 5;CAN_FilterInitStructure.CAN_FilterMaskIdHigh= ~(0XFF << 5);//32λMASKCAN_FilterInitStructure.CAN_FilterMaskIdLow= ~(0XFF << 5);CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//¹ýÂËÆ÷0¹ØÁªµ½FIFO0 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //¼¤»î¹ýÂËÆ÷0CAN_FilterInit(&CAN_FilterInitStructure);//Â˲¨Æ÷³õʼ»¯//ÅäÖùýÂËÆ÷4CAN_FilterInitStructure.CAN_FilterNumber=4; //¹ýÂËÆ÷13CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32λCAN_FilterInitStructure.CAN_FilterIdHigh=0x700 << 5;////32λIDCAN_FilterInitStructure.CAN_FilterIdLow=0x0;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=~(0XFF << 5);//32λMASKCAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//¹ýÂËÆ÷0¹ØÁªµ½FIFO0 CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //¼¤»î¹ýÂËÆ÷0CAN_FilterInit(&CAN_FilterInitStructure);//Â˲¨Æ÷³õʼ»¯#if CAN1_RX0_INT_ENABLECAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);//FIFO0ÏûÏ¢¹ÒºÅÖжÏÔÊÐí.NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // Ö÷ÓÅÏȼ¶Îª1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // ´ÎÓÅÏȼ¶Îª0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);#endifreturn 0;}CAN接收中断void CAN1_RX0_IRQHandler(void){CanRxMsg RxMessage;RxMessage.IDE = 0x04;CAN_Receive(CAN1, 0, &RxMessage);RX_StdId = RxMessage.StdId;RX_ExtId = RxMessage.ExtId; //设置断点RX_IDE = RxMessage.IDE;RX_RTR = RxMessage.RTR;RX_DLC = RxMessage.DLC;RX_FMI = RxMessage.FMI;}测试方法:本程序为基于正点原子的例程,测试CAN筛选器编号的结果。