|
Ö÷ÒªÎÊÌâÊÇCANFD1Õý³££¬CANFD2¹ýÂ˲»ÉúЧ£¬¸½ÉÏÇý¶¯´úÂ룬ϣÍû´óÀÐ֧Ԯһϣ¬¹²Í¬½â¾ö
FDCAN1_Handler.Instance = FDCAN1;
FDCAN1_Handler.Init.FrameFormat = FDCAN_FRAME_CLASSIC; //´«Í³Ä£Ê½
FDCAN1_Handler.Init.Mode = FDCAN_MODE_NORMAL; //Õý³£Ä£Ê½
FDCAN1_Handler.Init.AutoRetransmission = DISABLE; //¹Ø±Õ×Ô¶¯ÖØ´«£¡´«Í³Ä£Ê½ÏÂÒ»¶¨Òª¹Ø±Õ£¡£¡£¡
FDCAN1_Handler.Init.TransmitPause = DISABLE; //¹Ø±Õ´«ÊäÔÝÍ£
FDCAN1_Handler.Init.ProtocolException = DISABLE; //¹Ø±ÕÐÒéÒì³£´¦Àí
//²¨ÌØÂÊÏà¹Ø
FDCAN1_Handler.Init.NominalSyncJumpWidth = sjw; //ÖØÐÂͬ²½ÌøÔ¾¿í¶È
FDCAN1_Handler.Init.NominalPrescaler = 5000000/board; //·ÖƵϵÊý
FDCAN1_Handler.Init.NominalTimeSeg1 = 31; //tsg1·¶Î§:2~256
FDCAN1_Handler.Init.NominalTimeSeg2 = 8; //tsg2·¶Î§:2~128
FDCAN1_Handler.Init.MessageRAMOffset = 0; //ÐÅÏ¢RAMÆ«ÒÆ
FDCAN1_Handler.Init.StdFiltersNbr = 127; //¿ÉÅäÖñê×¼Ö¡Â˲¨Æ÷¸öÊý 0-127
FDCAN1_Handler.Init.ExtFiltersNbr = 63; //¿ÉÅäÖÃÀ©Õ¹Ö¡Â˲¨Æ÷¸öÊý 0-63
FDCAN1_Handler.Init.RxFifo0ElmtsNbr = 64; //½ÓÊÕFIFO0ÔªËرàºÅ
FDCAN1_Handler.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8; //½ÓÊÕFIFO0ÔªËØ´óС£º8×Ö½Ú
FDCAN1_Handler.Init.RxFifo1ElmtsNbr = 0; //ÉèÖÃRx FIFO1µÄÔªËظöÊý£¬·¶Î§0-64
FDCAN1_Handler.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8; //ÉèÖÃRx FIFO1ÖÐÿ¸öÔªËØ´óС£¬Ö§³Ö8,12,16,20,24,32,48»òÕß64×Ö½Ú
FDCAN1_Handler.Init.RxBuffersNbr = 0; //ÉèÖÃRx Buffer¸öÊý£¬·¶Î§0-64
FDCAN1_Handler.Init.RxBufferSize = 0; //ÉèÖÃRx BufferÖÐÿ¸öÔªËØ´óС£¬Ö§³Ö8,12,16,20,24,32,48»òÕß64×Ö½Ú
FDCAN1_Handler.Init.TxEventsNbr = 0; //·¢ËÍʼþ±àºÅ
FDCAN1_Handler.Init.TxBuffersNbr = 0; //·¢ËÍ»º³å±àºÅ
FDCAN1_Handler.Init.TxFifoQueueElmtsNbr = 32; //·¢ËÍFIFOÐòÁÐÔªËرàºÅ
FDCAN1_Handler.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION; //·¢ËÍFIFOÐòÁÐģʽ
FDCAN1_Handler.Init.TxElmtSize = FDCAN_DATA_BYTES_8; //·¢ËÍ´óС:8×Ö½Ú
if(HAL_FDCAN_Init(&FDCAN1_Handler) != HAL_OK) return 1; //³õʼ»¯FDCAN
HAL_FDCAN_ConfigGlobalFilter(&FDCAN1_Handler, FDCAN_REJECT, FDCAN_REJECT, DISABLE, DISABLE);
HAL_FDCAN_Start(&FDCAN1_Handler); //¿ªÆôFDCAN
HAL_FDCAN_ActivateNotification(&FDCAN1_Handler,FDCAN_IT_RX_FIFO0_NEW_MESSAGE,FDCAN_INTERRUPT_LINE0);
FDCAN_FilterTypeDef FDCAN1_RXFilter;
FDCAN1_RXFilter.IdType=IDType; //±ê×¼ID
FDCAN1_RXFilter.FilterIndex=Index; //Â˲¨Æ÷Ë÷Òý
FDCAN1_RXFilter.FilterType=FilterType; //Â˲¨Æ÷ÀàÐÍ
FDCAN1_RXFilter.FilterConfig=FDCAN_FILTER_TO_RXFIFO0; //¹ýÂËÆ÷0¹ØÁªµ½FIFO0
FDCAN1_RXFilter.FilterID1=ID1; //32λID
FDCAN1_RXFilter.FilterID2=ID2; //Èç¹ûFDCANÅäÖÃΪ´«Í³Ä£Ê½µÄ»°£¬ÕâÀïÊÇ32λÑÚÂë
if(HAL_FDCAN_ConfigFilter(&FDCAN1_Handler,&FDCAN1_RXFilter)!=HAL_OK)//Â˲¨Æ÷³õʼ»¯
FDCAN2_Handler.Instance=FDCAN2;
FDCAN2_Handler.Init.FrameFormat = FDCAN_FRAME_CLASSIC; //´«Í³Ä£Ê½
FDCAN2_Handler.Init.Mode = FDCAN_MODE_NORMAL; //Õý³£Ä£Ê½
FDCAN2_Handler.Init.AutoRetransmission = DISABLE; //¹Ø±Õ×Ô¶¯ÖØ´«£¡´«Í³Ä£Ê½ÏÂÒ»¶¨Òª¹Ø±Õ£¡£¡£¡
FDCAN2_Handler.Init.TransmitPause = DISABLE; //¹Ø±Õ´«ÊäÔÝÍ£
FDCAN2_Handler.Init.ProtocolException = DISABLE; //¹Ø±ÕÐÒéÒì³£´¦Àí
//²¨ÌØÂÊÏà¹Ø
FDCAN2_Handler.Init.NominalSyncJumpWidth = sjw; //ÖØÐÂͬ²½ÌøÔ¾¿í¶È
FDCAN2_Handler.Init.NominalPrescaler = 5000000/board; //·ÖƵϵÊý
FDCAN2_Handler.Init.NominalTimeSeg1 = 31; //tsg1·¶Î§:2~256
FDCAN2_Handler.Init.NominalTimeSeg2 = 8; //tsg2·¶Î§:2~128
FDCAN2_Handler.Init.MessageRAMOffset = 1280; //ÐÅÏ¢RAMÆ«ÒÆ
FDCAN2_Handler.Init.StdFiltersNbr = 127; //¿ÉÅäÖñê×¼Ö¡Â˲¨Æ÷¸öÊý 0-127
FDCAN2_Handler.Init.ExtFiltersNbr = 63; //¿ÉÅäÖÃÀ©Õ¹Ö¡Â˲¨Æ÷¸öÊý 0-63
FDCAN2_Handler.Init.RxFifo0ElmtsNbr = 64; //ÉèÖÃRx FIFO0µÄÔªËظöÊý£¬·¶Î§0-64 */
FDCAN2_Handler.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8; //ÉèÖÃRx FIFO0ÖÐÿ¸öÔªËØ´óС£¬Ö§³Ö8,12,16,20,24,32,48»òÕß64×Ö½Ú
FDCAN2_Handler.Init.RxFifo1ElmtsNbr = 0; //½ÓÊÕFIFO1ÔªËرàºÅ
FDCAN2_Handler.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8; //½ÓÊÕFIFO1ÔªËØ´óС£º8×Ö½Ú
FDCAN2_Handler.Init.RxBuffersNbr = 0; //½ÓÊÕ»º³å±àºÅ
FDCAN2_Handler.Init.TxEventsNbr = 0; //·¢ËÍʼþ±àºÅ
FDCAN2_Handler.Init.TxBuffersNbr = 0; //·¢ËÍ»º³å±àºÅ
FDCAN2_Handler.Init.TxFifoQueueElmtsNbr = 32; //·¢ËÍFIFOÐòÁÐÔªËرàºÅ
FDCAN2_Handler.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION; //·¢ËÍFIFOÐòÁÐģʽ
FDCAN2_Handler.Init.TxElmtSize = FDCAN_DATA_BYTES_8; //·¢ËÍ´óС:8×Ö½Ú
if(HAL_FDCAN_Init(&FDCAN2_Handler) != HAL_OK) return 1; //³õʼ»¯FDCAN2
HAL_FDCAN_ConfigGlobalFilter(&FDCAN2_Handler, FDCAN_REJECT, FDCAN_REJECT, DISABLE, DISABLE);
HAL_FDCAN_Start(&FDCAN2_Handler); //¿ªÆôFDCAN
HAL_FDCAN_ActivateNotification(&FDCAN2_Handler,FDCAN_IT_RX_FIFO0_NEW_MESSAGE,FDCAN_INTERRUPT_LINE0);
FDCAN_FilterTypeDef FDCAN2_RXFilter;
FDCAN2_RXFilter.IdType=IDType; //±ê×¼ID
FDCAN2_RXFilter.FilterIndex=Index; //Â˲¨Æ÷Ë÷Òý
FDCAN2_RXFilter.FilterType=FilterType; //Â˲¨Æ÷ÀàÐÍ
FDCAN2_RXFilter.FilterConfig=FDCAN_FILTER_TO_RXFIFO0; //¹ýÂËÆ÷0¹ØÁªµ½FIFO0
FDCAN2_RXFilter.FilterID1=ID1; //32λID
FDCAN2_RXFilter.FilterID2=ID2; //Èç¹ûFDCANÅäÖÃΪ´«Í³Ä£Ê½µÄ»°£¬ÕâÀïÊÇ32λÑÚÂë
if(HAL_FDCAN_ConfigFilter(&FDCAN2_Handler,&FDCAN2_RXFilter)!=HAL_OK)//Â˲¨Æ÷³õʼ»¯
|
|