stm32f469/stm32f469i-disco/Drivers/STM32F4xx_HAL_Driver/Src/Legacy/stm32f4xx_hal_can.c
Go to the documentation of this file.
1 
112 /* Includes ------------------------------------------------------------------*/
113 #include "stm32f4xx_hal.h"
114 
124 #ifdef HAL_CAN_LEGACY_MODULE_ENABLED
125 
126 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) ||\
127  defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) ||\
128  defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) ||\
129  defined(STM32F412Vx) || defined(STM32F412Rx) || defined(STM32F412Cx) || defined(STM32F413xx) ||\
130  defined(STM32F423xx)
131 
132 #ifdef HAL_CAN_MODULE_ENABLED
133 /* Select HAL CAN module in stm32f4xx_hal_conf.h file:
134  (#) HAL_CAN_MODULE_ENABLED for new HAL CAN driver fixing FIFO limitations
135  (#) HAL_CAN_LEGACY_MODULE_ENABLED for legacy HAL CAN driver */
136 #error 'The HAL CAN driver cannot be used with its legacy, Please ensure to enable only one HAL CAN module at once in stm32f4xx_hal_conf.h file'
137 #endif /* HAL_CAN_MODULE_ENABLED */
138 
139 #warning 'Legacy HAL CAN driver is enabled! It can be used with known limitations, refer to the release notes. However it is recommended to use rather the new HAL CAN driver'
140 
141 /* Private typedef -----------------------------------------------------------*/
142 /* Private define ------------------------------------------------------------*/
146 #define CAN_TIMEOUT_VALUE 10U
147 
150 /* Private macro -------------------------------------------------------------*/
151 /* Private variables ---------------------------------------------------------*/
152 /* Private function prototypes -----------------------------------------------*/
156 static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber);
157 static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan);
162 /* Exported functions --------------------------------------------------------*/
190 {
191  uint32_t InitStatus = CAN_INITSTATUS_FAILED;
192  uint32_t tickstart = 0U;
193 
194  /* Check CAN handle */
195  if(hcan == NULL)
196  {
197  return HAL_ERROR;
198  }
199 
200  /* Check the parameters */
213 
214 
215  if(hcan->State == HAL_CAN_STATE_RESET)
216  {
217  /* Allocate lock resource and initialize it */
218  hcan->Lock = HAL_UNLOCKED;
219  /* Init the low level hardware */
220  HAL_CAN_MspInit(hcan);
221  }
222 
223  /* Initialize the CAN state*/
224  hcan->State = HAL_CAN_STATE_BUSY;
225 
226  /* Exit from sleep mode */
227  hcan->Instance->MCR &= (~(uint32_t)CAN_MCR_SLEEP);
228 
229  /* Request initialisation */
230  hcan->Instance->MCR |= CAN_MCR_INRQ ;
231 
232  /* Get tick */
233  tickstart = HAL_GetTick();
234 
235  /* Wait the acknowledge */
236  while((hcan->Instance->MSR & CAN_MSR_INAK) != CAN_MSR_INAK)
237  {
238  if((HAL_GetTick() - tickstart ) > CAN_TIMEOUT_VALUE)
239  {
241  /* Process unlocked */
242  __HAL_UNLOCK(hcan);
243  return HAL_TIMEOUT;
244  }
245  }
246 
247  /* Check acknowledge */
248  if ((hcan->Instance->MSR & CAN_MSR_INAK) == CAN_MSR_INAK)
249  {
250  /* Set the time triggered communication mode */
251  if (hcan->Init.TTCM == ENABLE)
252  {
253  hcan->Instance->MCR |= CAN_MCR_TTCM;
254  }
255  else
256  {
257  hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_TTCM;
258  }
259 
260  /* Set the automatic bus-off management */
261  if (hcan->Init.ABOM == ENABLE)
262  {
263  hcan->Instance->MCR |= CAN_MCR_ABOM;
264  }
265  else
266  {
267  hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_ABOM;
268  }
269 
270  /* Set the automatic wake-up mode */
271  if (hcan->Init.AWUM == ENABLE)
272  {
273  hcan->Instance->MCR |= CAN_MCR_AWUM;
274  }
275  else
276  {
277  hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_AWUM;
278  }
279 
280  /* Set the no automatic retransmission */
281  if (hcan->Init.NART == ENABLE)
282  {
283  hcan->Instance->MCR |= CAN_MCR_NART;
284  }
285  else
286  {
287  hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_NART;
288  }
289 
290  /* Set the receive FIFO locked mode */
291  if (hcan->Init.RFLM == ENABLE)
292  {
293  hcan->Instance->MCR |= CAN_MCR_RFLM;
294  }
295  else
296  {
297  hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_RFLM;
298  }
299 
300  /* Set the transmit FIFO priority */
301  if (hcan->Init.TXFP == ENABLE)
302  {
303  hcan->Instance->MCR |= CAN_MCR_TXFP;
304  }
305  else
306  {
307  hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_TXFP;
308  }
309 
310  /* Set the bit timing register */
311  hcan->Instance->BTR = (uint32_t)((uint32_t)hcan->Init.Mode) | \
312  ((uint32_t)hcan->Init.SJW) | \
313  ((uint32_t)hcan->Init.BS1) | \
314  ((uint32_t)hcan->Init.BS2) | \
315  ((uint32_t)hcan->Init.Prescaler - 1U);
316 
317  /* Request leave initialisation */
318  hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_INRQ;
319 
320  /* Get tick */
321  tickstart = HAL_GetTick();
322 
323  /* Wait the acknowledge */
324  while((hcan->Instance->MSR & CAN_MSR_INAK) == CAN_MSR_INAK)
325  {
326  if((HAL_GetTick() - tickstart ) > CAN_TIMEOUT_VALUE)
327  {
329  /* Process unlocked */
330  __HAL_UNLOCK(hcan);
331  return HAL_TIMEOUT;
332  }
333  }
334 
335  /* Check acknowledged */
336  if ((hcan->Instance->MSR & CAN_MSR_INAK) != CAN_MSR_INAK)
337  {
338  InitStatus = CAN_INITSTATUS_SUCCESS;
339  }
340  }
341 
342  if(InitStatus == CAN_INITSTATUS_SUCCESS)
343  {
344  /* Set CAN error code to none */
346 
347  /* Initialize the CAN state */
348  hcan->State = HAL_CAN_STATE_READY;
349 
350  /* Return function status */
351  return HAL_OK;
352  }
353  else
354  {
355  /* Initialize the CAN state */
356  hcan->State = HAL_CAN_STATE_ERROR;
357 
358  /* Return function status */
359  return HAL_ERROR;
360  }
361 }
362 
373 {
374  uint32_t filternbrbitpos = 0U;
375  CAN_TypeDef *can_ip;
376 
377  /* Prevent unused argument(s) compilation warning */
378  UNUSED(hcan);
379 
380  /* Check the parameters */
382  assert_param(IS_CAN_FILTER_MODE(sFilterConfig->FilterMode));
386  assert_param(IS_CAN_BANKNUMBER(sFilterConfig->BankNumber));
387 
388  filternbrbitpos = 1U << sFilterConfig->FilterNumber;
389 #if defined (CAN3)
390  /* Check the CAN instance */
391  if(hcan->Instance == CAN3)
392  {
393  can_ip = CAN3;
394  }
395  else
396  {
397  can_ip = CAN1;
398  }
399 #else
400  can_ip = CAN1;
401 #endif
402 
403  /* Initialisation mode for the filter */
404  can_ip->FMR |= (uint32_t)CAN_FMR_FINIT;
405 
406 #if defined (CAN2)
407  /* Select the start slave bank */
408  can_ip->FMR &= ~((uint32_t)CAN_FMR_CAN2SB);
409  can_ip->FMR |= (uint32_t)(sFilterConfig->BankNumber << 8U);
410 #endif
411 
412  /* Filter Deactivation */
413  can_ip->FA1R &= ~(uint32_t)filternbrbitpos;
414 
415  /* Filter Scale */
416  if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT)
417  {
418  /* 16-bit scale for the filter */
419  can_ip->FS1R &= ~(uint32_t)filternbrbitpos;
420 
421  /* First 16-bit identifier and First 16-bit mask */
422  /* Or First 16-bit identifier and Second 16-bit identifier */
423  can_ip->sFilterRegister[sFilterConfig->FilterNumber].FR1 =
424  ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) |
425  (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow);
426 
427  /* Second 16-bit identifier and Second 16-bit mask */
428  /* Or Third 16-bit identifier and Fourth 16-bit identifier */
429  can_ip->sFilterRegister[sFilterConfig->FilterNumber].FR2 =
430  ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) |
431  (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh);
432  }
433 
434  if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT)
435  {
436  /* 32-bit scale for the filter */
437  can_ip->FS1R |= filternbrbitpos;
438 
439  /* 32-bit identifier or First 32-bit identifier */
440  can_ip->sFilterRegister[sFilterConfig->FilterNumber].FR1 =
441  ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) |
442  (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow);
443  /* 32-bit mask or Second 32-bit identifier */
444  can_ip->sFilterRegister[sFilterConfig->FilterNumber].FR2 =
445  ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) |
446  (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow);
447  }
448 
449  /* Filter Mode */
450  if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK)
451  {
452  /*Id/Mask mode for the filter*/
453  can_ip->FM1R &= ~(uint32_t)filternbrbitpos;
454  }
455  else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */
456  {
457  /*Identifier list mode for the filter*/
458  can_ip->FM1R |= (uint32_t)filternbrbitpos;
459  }
460 
461  /* Filter FIFO assignment */
462  if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0)
463  {
464  /* FIFO 0 assignation for the filter */
465  can_ip->FFA1R &= ~(uint32_t)filternbrbitpos;
466  }
467 
468  if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO1)
469  {
470  /* FIFO 1 assignation for the filter */
471  can_ip->FFA1R |= (uint32_t)filternbrbitpos;
472  }
473 
474  /* Filter activation */
475  if (sFilterConfig->FilterActivation == ENABLE)
476  {
477  can_ip->FA1R |= filternbrbitpos;
478  }
479 
480  /* Leave the initialisation mode for the filter */
481  can_ip->FMR &= ~((uint32_t)CAN_FMR_FINIT);
482 
483  /* Return function status */
484  return HAL_OK;
485 }
486 
494 {
495  /* Check CAN handle */
496  if(hcan == NULL)
497  {
498  return HAL_ERROR;
499  }
500 
501  /* Check the parameters */
503 
504  /* Change CAN state */
505  hcan->State = HAL_CAN_STATE_BUSY;
506 
507  /* DeInit the low level hardware */
508  HAL_CAN_MspDeInit(hcan);
509 
510  /* Change CAN state */
511  hcan->State = HAL_CAN_STATE_RESET;
512 
513  /* Release Lock */
514  __HAL_UNLOCK(hcan);
515 
516  /* Return function status */
517  return HAL_OK;
518 }
519 
526 __weak void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan)
527 {
528  /* Prevent unused argument(s) compilation warning */
529  UNUSED(hcan);
530  /* NOTE : This function Should not be modified, when the callback is needed,
531  the HAL_CAN_MspInit could be implemented in the user file
532  */
533 }
534 
541 __weak void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan)
542 {
543  /* Prevent unused argument(s) compilation warning */
544  UNUSED(hcan);
545  /* NOTE : This function Should not be modified, when the callback is needed,
546  the HAL_CAN_MspDeInit could be implemented in the user file
547  */
548 }
549 
579 {
580  uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX;
581  uint32_t tickstart = 0U;
582 
583  /* Check the parameters */
587 
588  if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \
589  ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \
590  ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2))
591  {
592  /* Process locked */
593  __HAL_LOCK(hcan);
594 
595  /* Change CAN state */
596  switch(hcan->State)
597  {
600  break;
603  break;
606  break;
607  default: /* HAL_CAN_STATE_READY */
609  break;
610  }
611 
612  /* Select one empty transmit mailbox */
613  if ((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)
614  {
615  transmitmailbox = CAN_TXMAILBOX_0;
616  }
617  else if ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)
618  {
619  transmitmailbox = CAN_TXMAILBOX_1;
620  }
621  else
622  {
623  transmitmailbox = CAN_TXMAILBOX_2;
624  }
625 
626  /* Set up the Id */
627  hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ;
628  if (hcan->pTxMsg->IDE == CAN_ID_STD)
629  {
631  hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21U) | \
632  hcan->pTxMsg->RTR);
633  }
634  else
635  {
637  hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3U) | \
638  hcan->pTxMsg->IDE | \
639  hcan->pTxMsg->RTR);
640  }
641 
642  /* Set up the DLC */
643  hcan->pTxMsg->DLC &= (uint8_t)0x0000000F;
644  hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0U;
645  hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC;
646 
647  /* Set up the data field */
648  hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3U] << 24U) |
649  ((uint32_t)hcan->pTxMsg->Data[2U] << 16U) |
650  ((uint32_t)hcan->pTxMsg->Data[1U] << 8U) |
651  ((uint32_t)hcan->pTxMsg->Data[0U]));
652  hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7U] << 24U) |
653  ((uint32_t)hcan->pTxMsg->Data[6U] << 16U) |
654  ((uint32_t)hcan->pTxMsg->Data[5U] << 8U) |
655  ((uint32_t)hcan->pTxMsg->Data[4U]));
656  /* Request transmission */
657  hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ;
658 
659  /* Get tick */
660  tickstart = HAL_GetTick();
661 
662  /* Check End of transmission flag */
663  while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox)))
664  {
665  /* Check for the Timeout */
666  if(Timeout != HAL_MAX_DELAY)
667  {
668  if((Timeout == 0U)||((HAL_GetTick() - tickstart ) > Timeout))
669  {
671 
672  __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox);
673 
674  /* Process unlocked */
675  __HAL_UNLOCK(hcan);
676  return HAL_TIMEOUT;
677  }
678  }
679  }
680 
681  /* Change CAN state */
682  switch(hcan->State)
683  {
686  break;
689  break;
692  break;
693  default: /* HAL_CAN_STATE_BUSY_TX */
694  hcan->State = HAL_CAN_STATE_READY;
695  break;
696  }
697 
698  /* Process unlocked */
699  __HAL_UNLOCK(hcan);
700 
701  /* Return function status */
702  return HAL_OK;
703  }
704  else
705  {
706  /* Change CAN state */
707  hcan->State = HAL_CAN_STATE_ERROR;
708 
709  /* Return function status */
710  return HAL_ERROR;
711  }
712 }
713 
721 {
722  uint32_t transmitmailbox = CAN_TXSTATUS_NOMAILBOX;
723 
724  /* Check the parameters */
728 
729  if(((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) || \
730  ((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) || \
731  ((hcan->Instance->TSR&CAN_TSR_TME2) == CAN_TSR_TME2))
732  {
733  /* Process Locked */
734  __HAL_LOCK(hcan);
735 
736  /* Select one empty transmit mailbox */
737  if((hcan->Instance->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)
738  {
739  transmitmailbox = CAN_TXMAILBOX_0;
740  }
741  else if((hcan->Instance->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)
742  {
743  transmitmailbox = CAN_TXMAILBOX_1;
744  }
745  else
746  {
747  transmitmailbox = CAN_TXMAILBOX_2;
748  }
749 
750  /* Set up the Id */
751  hcan->Instance->sTxMailBox[transmitmailbox].TIR &= CAN_TI0R_TXRQ;
752  if(hcan->pTxMsg->IDE == CAN_ID_STD)
753  {
755  hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->StdId << 21U) | \
756  hcan->pTxMsg->RTR);
757  }
758  else
759  {
761  hcan->Instance->sTxMailBox[transmitmailbox].TIR |= ((hcan->pTxMsg->ExtId << 3U) | \
762  hcan->pTxMsg->IDE | \
763  hcan->pTxMsg->RTR);
764  }
765 
766  /* Set up the DLC */
767  hcan->pTxMsg->DLC &= (uint8_t)0x0000000F;
768  hcan->Instance->sTxMailBox[transmitmailbox].TDTR &= (uint32_t)0xFFFFFFF0U;
769  hcan->Instance->sTxMailBox[transmitmailbox].TDTR |= hcan->pTxMsg->DLC;
770 
771  /* Set up the data field */
772  hcan->Instance->sTxMailBox[transmitmailbox].TDLR = (((uint32_t)hcan->pTxMsg->Data[3U] << 24U) |
773  ((uint32_t)hcan->pTxMsg->Data[2U] << 16U) |
774  ((uint32_t)hcan->pTxMsg->Data[1U] << 8U) |
775  ((uint32_t)hcan->pTxMsg->Data[0U]));
776  hcan->Instance->sTxMailBox[transmitmailbox].TDHR = (((uint32_t)hcan->pTxMsg->Data[7U] << 24U) |
777  ((uint32_t)hcan->pTxMsg->Data[6U] << 16U) |
778  ((uint32_t)hcan->pTxMsg->Data[5U] << 8U) |
779  ((uint32_t)hcan->pTxMsg->Data[4U]));
780 
781  /* Change CAN state */
782  switch(hcan->State)
783  {
786  break;
789  break;
792  break;
793  default: /* HAL_CAN_STATE_READY */
795  break;
796  }
797 
798  /* Set CAN error code to none */
800 
801  /* Process Unlocked */
802  __HAL_UNLOCK(hcan);
803 
804  /* Request transmission */
805  hcan->Instance->sTxMailBox[transmitmailbox].TIR |= CAN_TI0R_TXRQ;
806 
807  /* Enable Error warning, Error passive, Bus-off,
808  Last error and Error Interrupts */
810  CAN_IT_EPV |
811  CAN_IT_BOF |
812  CAN_IT_LEC |
813  CAN_IT_ERR |
814  CAN_IT_TME);
815  }
816  else
817  {
818  /* Change CAN state */
819  hcan->State = HAL_CAN_STATE_ERROR;
820 
821  /* Return function status */
822  return HAL_ERROR;
823  }
824 
825  return HAL_OK;
826 }
827 
836 HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef* hcan, uint8_t FIFONumber, uint32_t Timeout)
837 {
838  uint32_t tickstart = 0U;
839  CanRxMsgTypeDef* pRxMsg = NULL;
840 
841  /* Check the parameters */
842  assert_param(IS_CAN_FIFO(FIFONumber));
843 
844  /* Check if CAN state is not busy for RX FIFO0 */
845  if ((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \
846  (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \
847  (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \
849  {
850  return HAL_BUSY;
851  }
852 
853  /* Check if CAN state is not busy for RX FIFO1 */
854  if ((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \
855  (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \
856  (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \
858  {
859  return HAL_BUSY;
860  }
861 
862  /* Process locked */
863  __HAL_LOCK(hcan);
864 
865  /* Change CAN state */
866  if (FIFONumber == CAN_FIFO0)
867  {
868  switch(hcan->State)
869  {
870  case(HAL_CAN_STATE_BUSY_TX):
872  break;
875  break;
878  break;
879  default: /* HAL_CAN_STATE_READY */
881  break;
882  }
883  }
884  else /* FIFONumber == CAN_FIFO1 */
885  {
886  switch(hcan->State)
887  {
888  case(HAL_CAN_STATE_BUSY_TX):
890  break;
893  break;
896  break;
897  default: /* HAL_CAN_STATE_READY */
899  break;
900  }
901  }
902 
903  /* Get tick */
904  tickstart = HAL_GetTick();
905 
906  /* Check pending message */
907  while(__HAL_CAN_MSG_PENDING(hcan, FIFONumber) == 0U)
908  {
909  /* Check for the Timeout */
910  if(Timeout != HAL_MAX_DELAY)
911  {
912  if((Timeout == 0U)||((HAL_GetTick() - tickstart ) > Timeout))
913  {
915  /* Process unlocked */
916  __HAL_UNLOCK(hcan);
917  return HAL_TIMEOUT;
918  }
919  }
920  }
921 
922  /* Set RxMsg pointer */
923  if(FIFONumber == CAN_FIFO0)
924  {
925  pRxMsg = hcan->pRxMsg;
926  }
927  else /* FIFONumber == CAN_FIFO1 */
928  {
929  pRxMsg = hcan->pRx1Msg;
930  }
931 
932  /* Get the Id */
933  pRxMsg->IDE = (uint8_t)0x04 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR;
934  if (pRxMsg->IDE == CAN_ID_STD)
935  {
936  pRxMsg->StdId = 0x000007FFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 21U);
937  }
938  else
939  {
940  pRxMsg->ExtId = 0x1FFFFFFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 3U);
941  }
942 
943  pRxMsg->RTR = (uint8_t)0x02 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR;
944  /* Get the DLC */
945  pRxMsg->DLC = (uint8_t)0x0F & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR;
946  /* Get the FMI */
947  pRxMsg->FMI = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDTR >> 8U);
948  /* Get the FIFONumber */
949  pRxMsg->FIFONumber = FIFONumber;
950  /* Get the data field */
951  pRxMsg->Data[0] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR;
952  pRxMsg->Data[1] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 8U);
953  pRxMsg->Data[2] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 16U);
954  pRxMsg->Data[3] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 24U);
955  pRxMsg->Data[4] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR;
956  pRxMsg->Data[5] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 8U);
957  pRxMsg->Data[6] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 16U);
958  pRxMsg->Data[7] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 24U);
959 
960  /* Release the FIFO */
961  if(FIFONumber == CAN_FIFO0)
962  {
963  /* Release FIFO0 */
965  }
966  else /* FIFONumber == CAN_FIFO1 */
967  {
968  /* Release FIFO1 */
970  }
971 
972  /* Change CAN state */
973  if (FIFONumber == CAN_FIFO0)
974  {
975  switch(hcan->State)
976  {
979  break;
982  break;
985  break;
986  default: /* HAL_CAN_STATE_BUSY_RX0 */
987  hcan->State = HAL_CAN_STATE_READY;
988  break;
989  }
990  }
991  else /* FIFONumber == CAN_FIFO1 */
992  {
993  switch(hcan->State)
994  {
997  break;
1000  break;
1003  break;
1004  default: /* HAL_CAN_STATE_BUSY_RX1 */
1005  hcan->State = HAL_CAN_STATE_READY;
1006  break;
1007  }
1008  }
1009 
1010  /* Process unlocked */
1011  __HAL_UNLOCK(hcan);
1012 
1013  /* Return function status */
1014  return HAL_OK;
1015 }
1016 
1024 HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber)
1025 {
1026  /* Check the parameters */
1027  assert_param(IS_CAN_FIFO(FIFONumber));
1028 
1029  /* Check if CAN state is not busy for RX FIFO0 */
1030  if((FIFONumber == CAN_FIFO0) && ((hcan->State == HAL_CAN_STATE_BUSY_RX0) || \
1031  (hcan->State == HAL_CAN_STATE_BUSY_TX_RX0) || \
1032  (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \
1034  {
1035  return HAL_BUSY;
1036  }
1037 
1038  /* Check if CAN state is not busy for RX FIFO1 */
1039  if((FIFONumber == CAN_FIFO1) && ((hcan->State == HAL_CAN_STATE_BUSY_RX1) || \
1040  (hcan->State == HAL_CAN_STATE_BUSY_TX_RX1) || \
1041  (hcan->State == HAL_CAN_STATE_BUSY_RX0_RX1) || \
1043  {
1044  return HAL_BUSY;
1045  }
1046 
1047  /* Process locked */
1048  __HAL_LOCK(hcan);
1049 
1050  /* Change CAN state */
1051  if(FIFONumber == CAN_FIFO0)
1052  {
1053  switch(hcan->State)
1054  {
1055  case(HAL_CAN_STATE_BUSY_TX):
1057  break;
1058  case(HAL_CAN_STATE_BUSY_RX1):
1060  break;
1063  break;
1064  default: /* HAL_CAN_STATE_READY */
1065  hcan->State = HAL_CAN_STATE_BUSY_RX0;
1066  break;
1067  }
1068  }
1069  else /* FIFONumber == CAN_FIFO1 */
1070  {
1071  switch(hcan->State)
1072  {
1073  case(HAL_CAN_STATE_BUSY_TX):
1075  break;
1076  case(HAL_CAN_STATE_BUSY_RX0):
1078  break;
1081  break;
1082  default: /* HAL_CAN_STATE_READY */
1083  hcan->State = HAL_CAN_STATE_BUSY_RX1;
1084  break;
1085  }
1086  }
1087  /* Set CAN error code to none */
1088  hcan->ErrorCode = HAL_CAN_ERROR_NONE;
1089 
1090  /* Enable interrupts: */
1091  /* - Enable Error warning Interrupt */
1092  /* - Enable Error passive Interrupt */
1093  /* - Enable Bus-off Interrupt */
1094  /* - Enable Last error code Interrupt */
1095  /* - Enable Error Interrupt */
1096  /* - Enable Transmit mailbox empty Interrupt */
1098  CAN_IT_EPV |
1099  CAN_IT_BOF |
1100  CAN_IT_LEC |
1101  CAN_IT_ERR |
1102  CAN_IT_TME);
1103 
1104  /* Process unlocked */
1105  __HAL_UNLOCK(hcan);
1106 
1107  if(FIFONumber == CAN_FIFO0)
1108  {
1109  /* Enable FIFO 0 overrun and message pending Interrupt */
1111  }
1112  else
1113  {
1114  /* Enable FIFO 1 overrun and message pending Interrupt */
1116  }
1117 
1118  /* Return function status */
1119  return HAL_OK;
1120 }
1121 
1129 {
1130  uint32_t tickstart = 0U;
1131 
1132  /* Process locked */
1133  __HAL_LOCK(hcan);
1134 
1135  /* Change CAN state */
1136  hcan->State = HAL_CAN_STATE_BUSY;
1137 
1138  /* Request Sleep mode */
1139  hcan->Instance->MCR = (((hcan->Instance->MCR) & (uint32_t)(~(uint32_t)CAN_MCR_INRQ)) | CAN_MCR_SLEEP);
1140 
1141  /* Sleep mode status */
1142  if ((hcan->Instance->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) != CAN_MSR_SLAK)
1143  {
1144  /* Process unlocked */
1145  __HAL_UNLOCK(hcan);
1146 
1147  /* Return function status */
1148  return HAL_ERROR;
1149  }
1150 
1151  /* Get tick */
1152  tickstart = HAL_GetTick();
1153 
1154  /* Wait the acknowledge */
1155  while((hcan->Instance->MSR & (CAN_MSR_SLAK|CAN_MSR_INAK)) != CAN_MSR_SLAK)
1156  {
1157  if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE)
1158  {
1159  hcan->State = HAL_CAN_STATE_TIMEOUT;
1160  /* Process unlocked */
1161  __HAL_UNLOCK(hcan);
1162  return HAL_TIMEOUT;
1163  }
1164  }
1165 
1166  /* Change CAN state */
1167  hcan->State = HAL_CAN_STATE_READY;
1168 
1169  /* Process unlocked */
1170  __HAL_UNLOCK(hcan);
1171 
1172  /* Return function status */
1173  return HAL_OK;
1174 }
1175 
1184 {
1185  uint32_t tickstart = 0U;
1186 
1187  /* Process locked */
1188  __HAL_LOCK(hcan);
1189 
1190  /* Change CAN state */
1191  hcan->State = HAL_CAN_STATE_BUSY;
1192 
1193  /* Wake up request */
1194  hcan->Instance->MCR &= ~(uint32_t)CAN_MCR_SLEEP;
1195 
1196  /* Get tick */
1197  tickstart = HAL_GetTick();
1198 
1199  /* Sleep mode status */
1200  while((hcan->Instance->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK)
1201  {
1202  if((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE)
1203  {
1205  /* Process unlocked */
1206  __HAL_UNLOCK(hcan);
1207  return HAL_TIMEOUT;
1208  }
1209  }
1210  if((hcan->Instance->MSR & CAN_MSR_SLAK) == CAN_MSR_SLAK)
1211  {
1212  /* Process unlocked */
1213  __HAL_UNLOCK(hcan);
1214 
1215  /* Return function status */
1216  return HAL_ERROR;
1217  }
1218 
1219  /* Change CAN state */
1220  hcan->State = HAL_CAN_STATE_READY;
1221 
1222  /* Process unlocked */
1223  __HAL_UNLOCK(hcan);
1224 
1225  /* Return function status */
1226  return HAL_OK;
1227 }
1228 
1236 {
1237  uint32_t tmp1 = 0U, tmp2 = 0U, tmp3 = 0U;
1238  uint32_t errorcode = HAL_CAN_ERROR_NONE;
1239 
1240  /* Check Overrun flag for FIFO0 */
1241  tmp1 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV0);
1242  tmp2 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV0);
1243  if(tmp1 && tmp2)
1244  {
1245  /* Set CAN error code to FOV0 error */
1246  errorcode |= HAL_CAN_ERROR_FOV0;
1247 
1248  /* Clear FIFO0 Overrun Flag */
1250  }
1251  /* Check Overrun flag for FIFO1 */
1252  tmp1 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_FOV1);
1253  tmp2 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FOV1);
1254 
1255  if(tmp1 && tmp2)
1256  {
1257  /* Set CAN error code to FOV1 error */
1258  errorcode |= HAL_CAN_ERROR_FOV1;
1259 
1260  /* Clear FIFO1 Overrun Flag */
1262  }
1263 
1264  /* Check End of transmission flag */
1266  {
1270  if(tmp1 || tmp2 || tmp3)
1271  {
1272  tmp1 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK0);
1273  tmp2 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK1);
1274  tmp3 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_TXOK2);
1275  /* Check Transmit success */
1276  if(tmp1 || tmp2 || tmp3)
1277  {
1278  /* Call transmit function */
1279  CAN_Transmit_IT(hcan);
1280  }
1281  else /* Transmit failure */
1282  {
1283  /* Set CAN error code to TXFAIL error */
1284  errorcode |= HAL_CAN_ERROR_TXFAIL;
1285  }
1286 
1287  /* Clear transmission status flags (RQCPx and TXOKx) */
1290  }
1291  }
1292 
1293  tmp1 = __HAL_CAN_MSG_PENDING(hcan, CAN_FIFO0);
1294  tmp2 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP0);
1295  /* Check End of reception flag for FIFO0 */
1296  if((tmp1 != 0U) && tmp2)
1297  {
1298  /* Call receive function */
1299  CAN_Receive_IT(hcan, CAN_FIFO0);
1300  }
1301 
1302  tmp1 = __HAL_CAN_MSG_PENDING(hcan, CAN_FIFO1);
1303  tmp2 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_FMP1);
1304  /* Check End of reception flag for FIFO1 */
1305  if((tmp1 != 0U) && tmp2)
1306  {
1307  /* Call receive function */
1308  CAN_Receive_IT(hcan, CAN_FIFO1);
1309  }
1310 
1311  /* Set error code in handle */
1312  hcan->ErrorCode |= errorcode;
1313 
1314  tmp1 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EWG);
1315  tmp2 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EWG);
1316  tmp3 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR);
1317  /* Check Error Warning Flag */
1318  if(tmp1 && tmp2 && tmp3)
1319  {
1320  /* Set CAN error code to EWG error */
1321  hcan->ErrorCode |= HAL_CAN_ERROR_EWG;
1322  }
1323 
1324  tmp1 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_EPV);
1325  tmp2 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_EPV);
1326  tmp3 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR);
1327  /* Check Error Passive Flag */
1328  if(tmp1 && tmp2 && tmp3)
1329  {
1330  /* Set CAN error code to EPV error */
1331  hcan->ErrorCode |= HAL_CAN_ERROR_EPV;
1332  }
1333 
1334  tmp1 = __HAL_CAN_GET_FLAG(hcan, CAN_FLAG_BOF);
1335  tmp2 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_BOF);
1336  tmp3 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR);
1337  /* Check Bus-Off Flag */
1338  if(tmp1 && tmp2 && tmp3)
1339  {
1340  /* Set CAN error code to BOF error */
1341  hcan->ErrorCode |= HAL_CAN_ERROR_BOF;
1342  }
1343 
1344  tmp1 = HAL_IS_BIT_CLR(hcan->Instance->ESR, CAN_ESR_LEC);
1345  tmp2 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_LEC);
1346  tmp3 = __HAL_CAN_GET_IT_SOURCE(hcan, CAN_IT_ERR);
1347  /* Check Last error code Flag */
1348  if((!tmp1) && tmp2 && tmp3)
1349  {
1350  tmp1 = (hcan->Instance->ESR) & CAN_ESR_LEC;
1351  switch(tmp1)
1352  {
1353  case(CAN_ESR_LEC_0):
1354  /* Set CAN error code to STF error */
1355  hcan->ErrorCode |= HAL_CAN_ERROR_STF;
1356  break;
1357  case(CAN_ESR_LEC_1):
1358  /* Set CAN error code to FOR error */
1359  hcan->ErrorCode |= HAL_CAN_ERROR_FOR;
1360  break;
1361  case(CAN_ESR_LEC_1 | CAN_ESR_LEC_0):
1362  /* Set CAN error code to ACK error */
1363  hcan->ErrorCode |= HAL_CAN_ERROR_ACK;
1364  break;
1365  case(CAN_ESR_LEC_2):
1366  /* Set CAN error code to BR error */
1367  hcan->ErrorCode |= HAL_CAN_ERROR_BR;
1368  break;
1369  case(CAN_ESR_LEC_2 | CAN_ESR_LEC_0):
1370  /* Set CAN error code to BD error */
1371  hcan->ErrorCode |= HAL_CAN_ERROR_BD;
1372  break;
1373  case(CAN_ESR_LEC_2 | CAN_ESR_LEC_1):
1374  /* Set CAN error code to CRC error */
1375  hcan->ErrorCode |= HAL_CAN_ERROR_CRC;
1376  break;
1377  default:
1378  break;
1379  }
1380 
1381  /* Clear Last error code Flag */
1382  hcan->Instance->ESR &= ~(CAN_ESR_LEC);
1383  }
1384 
1385  /* Call the Error call Back in case of Errors */
1386  if(hcan->ErrorCode != HAL_CAN_ERROR_NONE)
1387  {
1388  /* Clear ERRI Flag */
1389  hcan->Instance->MSR = CAN_MSR_ERRI;
1390  /* Set the CAN state ready to be able to start again the process */
1391  hcan->State = HAL_CAN_STATE_READY;
1392 
1393  /* Disable interrupts: */
1394  /* - Disable Error warning Interrupt */
1395  /* - Disable Error passive Interrupt */
1396  /* - Disable Bus-off Interrupt */
1397  /* - Disable Last error code Interrupt */
1398  /* - Disable Error Interrupt */
1399  /* - Disable FIFO 0 message pending Interrupt */
1400  /* - Disable FIFO 0 Overrun Interrupt */
1401  /* - Disable FIFO 1 message pending Interrupt */
1402  /* - Disable FIFO 1 Overrun Interrupt */
1403  /* - Disable Transmit mailbox empty Interrupt */
1405  CAN_IT_EPV |
1406  CAN_IT_BOF |
1407  CAN_IT_LEC |
1408  CAN_IT_ERR |
1409  CAN_IT_FMP0|
1410  CAN_IT_FOV0|
1411  CAN_IT_FMP1|
1412  CAN_IT_FOV1|
1413  CAN_IT_TME);
1414 
1415  /* Call Error callback function */
1416  HAL_CAN_ErrorCallback(hcan);
1417  }
1418 }
1419 
1426 __weak void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan)
1427 {
1428  /* Prevent unused argument(s) compilation warning */
1429  UNUSED(hcan);
1430  /* NOTE : This function Should not be modified, when the callback is needed,
1431  the HAL_CAN_TxCpltCallback could be implemented in the user file
1432  */
1433 }
1434 
1441 __weak void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan)
1442 {
1443  /* Prevent unused argument(s) compilation warning */
1444  UNUSED(hcan);
1445  /* NOTE : This function Should not be modified, when the callback is needed,
1446  the HAL_CAN_RxCpltCallback could be implemented in the user file
1447  */
1448 }
1449 
1456 __weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan)
1457 {
1458  /* Prevent unused argument(s) compilation warning */
1459  UNUSED(hcan);
1460  /* NOTE : This function Should not be modified, when the callback is needed,
1461  the HAL_CAN_ErrorCallback could be implemented in the user file
1462  */
1463 }
1464 
1492 {
1493  /* Return CAN state */
1494  return hcan->State;
1495 }
1496 
1503 uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan)
1504 {
1505  return hcan->ErrorCode;
1506 }
1507 
1517 static HAL_StatusTypeDef CAN_Transmit_IT(CAN_HandleTypeDef* hcan)
1518 {
1519  /* Disable Transmit mailbox empty Interrupt */
1521 
1522  if(hcan->State == HAL_CAN_STATE_BUSY_TX)
1523  {
1524  /* Disable Error warning, Error passive, Bus-off, Last error code
1525  and Error Interrupts */
1527  CAN_IT_EPV |
1528  CAN_IT_BOF |
1529  CAN_IT_LEC |
1530  CAN_IT_ERR );
1531  }
1532 
1533  /* Change CAN state */
1534  switch(hcan->State)
1535  {
1537  hcan->State = HAL_CAN_STATE_BUSY_RX0;
1538  break;
1540  hcan->State = HAL_CAN_STATE_BUSY_RX1;
1541  break;
1544  break;
1545  default: /* HAL_CAN_STATE_BUSY_TX */
1546  hcan->State = HAL_CAN_STATE_READY;
1547  break;
1548  }
1549 
1550  /* Transmission complete callback */
1551  HAL_CAN_TxCpltCallback(hcan);
1552 
1553  return HAL_OK;
1554 }
1555 
1564 static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber)
1565 {
1566  uint32_t tmp1 = 0U;
1567  CanRxMsgTypeDef* pRxMsg = NULL;
1568 
1569  /* Set RxMsg pointer */
1570  if(FIFONumber == CAN_FIFO0)
1571  {
1572  pRxMsg = hcan->pRxMsg;
1573  }
1574  else /* FIFONumber == CAN_FIFO1 */
1575  {
1576  pRxMsg = hcan->pRx1Msg;
1577  }
1578 
1579  /* Get the Id */
1580  pRxMsg->IDE = (uint8_t)0x04 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR;
1581  if (pRxMsg->IDE == CAN_ID_STD)
1582  {
1583  pRxMsg->StdId = 0x000007FFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 21U);
1584  }
1585  else
1586  {
1587  pRxMsg->ExtId = 0x1FFFFFFFU & (hcan->Instance->sFIFOMailBox[FIFONumber].RIR >> 3U);
1588  }
1589 
1590  pRxMsg->RTR = (uint8_t)0x02 & hcan->Instance->sFIFOMailBox[FIFONumber].RIR;
1591  /* Get the DLC */
1592  pRxMsg->DLC = (uint8_t)0x0F & hcan->Instance->sFIFOMailBox[FIFONumber].RDTR;
1593  /* Get the FIFONumber */
1594  pRxMsg->FIFONumber = FIFONumber;
1595  /* Get the FMI */
1596  pRxMsg->FMI = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDTR >> 8U);
1597  /* Get the data field */
1598  pRxMsg->Data[0] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDLR;
1599  pRxMsg->Data[1] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 8U);
1600  pRxMsg->Data[2] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 16U);
1601  pRxMsg->Data[3] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDLR >> 24U);
1602  pRxMsg->Data[4] = (uint8_t)0xFF & hcan->Instance->sFIFOMailBox[FIFONumber].RDHR;
1603  pRxMsg->Data[5] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 8U);
1604  pRxMsg->Data[6] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 16U);
1605  pRxMsg->Data[7] = (uint8_t)0xFF & (hcan->Instance->sFIFOMailBox[FIFONumber].RDHR >> 24U);
1606  /* Release the FIFO */
1607  /* Release FIFO0 */
1608  if (FIFONumber == CAN_FIFO0)
1609  {
1611 
1612  /* Disable FIFO 0 overrun and message pending Interrupt */
1614  }
1615  /* Release FIFO1 */
1616  else /* FIFONumber == CAN_FIFO1 */
1617  {
1619 
1620  /* Disable FIFO 1 overrun and message pending Interrupt */
1622  }
1623 
1624  tmp1 = hcan->State;
1625  if((tmp1 == HAL_CAN_STATE_BUSY_RX0) || (tmp1 == HAL_CAN_STATE_BUSY_RX1))
1626  {
1627  /* Disable Error warning, Error passive, Bus-off, Last error code
1628  and Error Interrupts */
1630  CAN_IT_EPV |
1631  CAN_IT_BOF |
1632  CAN_IT_LEC |
1633  CAN_IT_ERR);
1634  }
1635 
1636  /* Change CAN state */
1637  if (FIFONumber == CAN_FIFO0)
1638  {
1639  switch(hcan->State)
1640  {
1642  hcan->State = HAL_CAN_STATE_BUSY_TX;
1643  break;
1645  hcan->State = HAL_CAN_STATE_BUSY_RX1;
1646  break;
1649  break;
1650  default: /* HAL_CAN_STATE_BUSY_RX0 */
1651  hcan->State = HAL_CAN_STATE_READY;
1652  break;
1653  }
1654  }
1655  else /* FIFONumber == CAN_FIFO1 */
1656  {
1657  switch(hcan->State)
1658  {
1660  hcan->State = HAL_CAN_STATE_BUSY_TX;
1661  break;
1663  hcan->State = HAL_CAN_STATE_BUSY_RX0;
1664  break;
1667  break;
1668  default: /* HAL_CAN_STATE_BUSY_RX1 */
1669  hcan->State = HAL_CAN_STATE_READY;
1670  break;
1671  }
1672  }
1673 
1674  /* Receive complete callback */
1675  HAL_CAN_RxCpltCallback(hcan);
1676 
1677  /* Return function status */
1678  return HAL_OK;
1679 }
1680 
1684 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\
1685  STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx ||\
1686  STM32F412Vx || STM32F412Rx || STM32F412Cx || STM32F413xx || STM32F423xx */
1687 
1688 #endif /* HAL_CAN_LEGACY_MODULE_ENABLED */
1689 
1697 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
CAN_FLAG_EWG
#define CAN_FLAG_EWG
Definition: stm32f7xx_hal_can_legacy.h:432
CanTxMsgTypeDef::DLC
uint32_t DLC
Definition: stm32f7xx_hal_can_legacy.h:181
HAL_CAN_ERROR_BD
#define HAL_CAN_ERROR_BD
Definition: stm32f7xx_hal_can_legacy.h:263
CAN_TypeDef::FS1R
__IO uint32_t FS1R
Definition: stm32f407xx.h:267
CanRxMsgTypeDef::DLC
uint32_t DLC
Definition: stm32f7xx_hal_can_legacy.h:206
assert_param
#define assert_param(expr)
Include module's header file.
Definition: stm32f407/stm32f407g-disc1/Inc/stm32f4xx_hal_conf.h:353
CanRxMsgTypeDef::RTR
uint32_t RTR
Definition: stm32f7xx_hal_can_legacy.h:203
CAN_FLAG_BOF
#define CAN_FLAG_BOF
Definition: stm32f7xx_hal_can_legacy.h:434
CAN_TXMAILBOX_0
#define CAN_TXMAILBOX_0
Definition: stm32f7xx_hal_can_legacy.h:469
IS_CAN_RTR
#define IS_CAN_RTR(RTR)
Definition: stm32f7xx_hal_can_legacy.h:745
CAN_FIFOMailBox_TypeDef::RDTR
__IO uint32_t RDTR
Definition: stm32f407xx.h:231
CAN_HandleTypeDef::pRx1Msg
CanRxMsgTypeDef * pRx1Msg
Definition: stm32f7xx_hal_can_legacy.h:233
HAL_CAN_Sleep
HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan)
CAN_InitTypeDef::SJW
uint32_t SJW
Definition: stm32f7xx_hal_can_legacy.h:91
HAL_StatusTypeDef
HAL_StatusTypeDef
HAL Status structures definition
Definition: stm32f407/stm32f407g-disc1/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:40
HAL_CAN_STATE_READY
@ HAL_CAN_STATE_READY
Definition: stm32f7xx_hal_can_legacy.h:66
CAN_FILTER_FIFO0
#define CAN_FILTER_FIFO0
Definition: stm32f7xx_hal_can_legacy.h:362
CAN_IT_FMP0
#define CAN_IT_FMP0
Definition: stm32f7xx_hal_can_legacy.h:445
HAL_CAN_ERROR_EWG
#define HAL_CAN_ERROR_EWG
Definition: stm32f7xx_hal_can_legacy.h:256
HAL_CAN_MspInit
void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan)
HAL_CAN_ERROR_TXFAIL
#define HAL_CAN_ERROR_TXFAIL
Definition: stm32f7xx_hal_can_legacy.h:267
HAL_IS_BIT_CLR
#define HAL_IS_BIT_CLR(REG, BIT)
Definition: stm32f407/stm32f407g-disc1/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:64
CAN_FIFOMailBox_TypeDef::RDLR
__IO uint32_t RDLR
Definition: stm32f407xx.h:232
CanRxMsgTypeDef::ExtId
uint32_t ExtId
Definition: stm32f7xx_hal_can_legacy.h:197
__HAL_CAN_CANCEL_TRANSMIT
#define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)
Cancel a transmit request.
Definition: stm32f7xx_hal_can_legacy.h:617
NULL
#define NULL
Definition: porcupine/demo/c/dr_libs/tests/external/miniaudio/extras/speex_resampler/thirdparty/resample.c:92
IS_CAN_IDTYPE
#define IS_CAN_IDTYPE(IDTYPE)
Definition: stm32f7xx_hal_can_legacy.h:743
CAN_FilterRegister_TypeDef::FR1
__IO uint32_t FR1
Definition: stm32f407xx.h:242
CAN_TypeDef::MSR
__IO uint32_t MSR
Definition: stm32f407xx.h:253
CAN_MSR_INAK
#define CAN_MSR_INAK
Definition: stm32f407xx.h:1799
IS_CAN_SJW
#define IS_CAN_SJW(SJW)
Definition: stm32f7xx_hal_can_legacy.h:724
CAN_TSR_RQCP2
#define CAN_TSR_RQCP2
Definition: stm32f407xx.h:1858
HAL_UNLOCKED
@ HAL_UNLOCKED
Definition: stm32f407/stm32f407g-disc1/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:53
__HAL_CAN_CLEAR_FLAG
#define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__)
Clear the specified CAN pending flag.
Definition: stm32f7xx_hal_can_legacy.h:574
IS_CAN_BANKNUMBER
#define IS_CAN_BANKNUMBER(BANKNUMBER)
Definition: stm32f7xx_hal_can_legacy.h:736
HAL_CAN_Transmit
HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout)
CAN_InitTypeDef::AWUM
uint32_t AWUM
Definition: stm32f7xx_hal_can_legacy.h:108
IS_CAN_EXTID
#define IS_CAN_EXTID(EXTID)
Definition: stm32f7xx_hal_can_legacy.h:740
HAL_CAN_Init
HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan)
CAN_HandleTypeDef::Instance
CAN_TypeDef * Instance
Definition: stm32f7xx_hal_can_legacy.h:225
CAN_IT_TME
#define CAN_IT_TME
Definition: stm32f7xx_hal_can_legacy.h:442
__HAL_CAN_DISABLE_IT
#define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__)
Disable the specified CAN interrupts.
Definition: stm32f7xx_hal_can_legacy.h:505
CAN_FilterConfTypeDef::FilterScale
uint32_t FilterScale
Definition: stm32f7xx_hal_can_legacy.h:153
CAN_TxMailBox_TypeDef::TDTR
__IO uint32_t TDTR
Definition: stm32f407xx.h:219
CAN_InitTypeDef::BS1
uint32_t BS1
Definition: stm32f7xx_hal_can_legacy.h:96
CAN1
#define CAN1
Definition: MIMXRT1052.h:4114
CAN_TypeDef
Controller Area Network.
Definition: stm32f407xx.h:250
CAN_IT_LEC
#define CAN_IT_LEC
Definition: stm32f7xx_hal_can_legacy.h:460
HAL_CAN_Receive_IT
HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber)
CAN_InitTypeDef::Prescaler
uint32_t Prescaler
Definition: stm32f7xx_hal_can_legacy.h:85
CAN_TypeDef::FA1R
__IO uint32_t FA1R
Definition: stm32f407xx.h:271
IS_CAN_MODE
#define IS_CAN_MODE(MODE)
Definition: stm32f7xx_hal_can_legacy.h:720
CAN_FilterConfTypeDef::FilterMaskIdHigh
uint32_t FilterMaskIdHigh
Definition: stm32f7xx_hal_can_legacy.h:134
CAN_HandleTypeDef::pRxMsg
CanRxMsgTypeDef * pRxMsg
Definition: stm32f7xx_hal_can_legacy.h:231
CAN_InitTypeDef::TTCM
uint32_t TTCM
Definition: stm32f7xx_hal_can_legacy.h:102
HAL_CAN_DeInit
HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan)
HAL_CAN_STATE_RESET
@ HAL_CAN_STATE_RESET
Definition: stm32f7xx_hal_can_legacy.h:65
CAN_ESR_LEC_1
#define CAN_ESR_LEC_1
Definition: stm32f407xx.h:1989
HAL_ERROR
@ HAL_ERROR
Definition: stm32f407/stm32f407g-disc1/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:43
CAN_MCR_ABOM
#define CAN_MCR_ABOM
Definition: stm32f407xx.h:1786
CAN_FilterConfTypeDef::FilterIdHigh
uint32_t FilterIdHigh
Definition: stm32f7xx_hal_can_legacy.h:126
HAL_GetTick
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
Definition: stm32f407/stm32f407g-disc1/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c:323
CAN_ESR_LEC_0
#define CAN_ESR_LEC_0
Definition: stm32f407xx.h:1988
HAL_CAN_ERROR_FOV1
#define HAL_CAN_ERROR_FOV1
Definition: stm32f7xx_hal_can_legacy.h:266
HAL_CAN_RxCpltCallback
void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef *hcan)
CAN_IT_FOV1
#define CAN_IT_FOV1
Definition: stm32f7xx_hal_can_legacy.h:450
CAN_TypeDef::ESR
__IO uint32_t ESR
Definition: stm32f407xx.h:258
CAN_FLAG_TXOK1
#define CAN_FLAG_TXOK1
Definition: stm32f7xx_hal_can_legacy.h:408
CAN_FilterConfTypeDef
CAN filter configuration structure definition.
Definition: stm32f7xx_hal_can_legacy.h:124
IS_CAN_ALL_INSTANCE
#define IS_CAN_ALL_INSTANCE(INSTANCE)
Definition: stm32f407xx.h:15088
CAN3
#define CAN3
Definition: stm32f769xx.h:1660
CAN_TxMailBox_TypeDef::TDHR
__IO uint32_t TDHR
Definition: stm32f407xx.h:221
CAN_HandleTypeDef
CAN handle Structure definition.
Definition: stm32f7xx_hal_can_legacy.h:223
IS_CAN_STDID
#define IS_CAN_STDID(STDID)
Definition: stm32f7xx_hal_can_legacy.h:739
HAL_CAN_MspDeInit
void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan)
CAN_TSR_TME1
#define CAN_TSR_TME1
Definition: stm32f407xx.h:1883
ENABLE
@ ENABLE
Definition: stm32f407/stm32f407g-disc1/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h:194
CAN_FilterConfTypeDef::FilterMaskIdLow
uint32_t FilterMaskIdLow
Definition: stm32f7xx_hal_can_legacy.h:139
CAN_IT_FMP1
#define CAN_IT_FMP1
Definition: stm32f7xx_hal_can_legacy.h:448
CAN_IT_EPV
#define CAN_IT_EPV
Definition: stm32f7xx_hal_can_legacy.h:458
CAN_FMR_FINIT
#define CAN_FMR_FINIT
Definition: stm32f407xx.h:2308
IS_CAN_DLC
#define IS_CAN_DLC(DLC)
Definition: stm32f7xx_hal_can_legacy.h:741
CAN_IT_BOF
#define CAN_IT_BOF
Definition: stm32f7xx_hal_can_legacy.h:459
CAN_TypeDef::sFilterRegister
CAN_FilterRegister_TypeDef sFilterRegister[28]
Definition: stm32f407xx.h:273
CAN_FilterConfTypeDef::BankNumber
uint32_t BankNumber
Definition: stm32f7xx_hal_can_legacy.h:159
HAL_OK
@ HAL_OK
Definition: stm32f407/stm32f407g-disc1/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:42
CAN_FLAG_FOV0
#define CAN_FLAG_FOV0
Definition: stm32f7xx_hal_can_legacy.h:416
CAN_TypeDef::FMR
__IO uint32_t FMR
Definition: stm32f407xx.h:264
HAL_CAN_ERROR_ACK
#define HAL_CAN_ERROR_ACK
Definition: stm32f7xx_hal_can_legacy.h:261
CAN_TXSTATUS_NOMAILBOX
#define CAN_TXSTATUS_NOMAILBOX
Definition: stm32f7xx_hal_can_legacy.h:710
IS_FUNCTIONAL_STATE
#define IS_FUNCTIONAL_STATE(STATE)
Definition: stm32f407/stm32f407g-disc1/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h:196
CAN_FIFOMailBox_TypeDef::RDHR
__IO uint32_t RDHR
Definition: stm32f407xx.h:233
CAN_TXMAILBOX_2
#define CAN_TXMAILBOX_2
Definition: stm32f7xx_hal_can_legacy.h:471
CAN_IT_EWG
#define CAN_IT_EWG
Definition: stm32f7xx_hal_can_legacy.h:457
CAN_HandleTypeDef::Init
CAN_InitTypeDef Init
Definition: stm32f7xx_hal_can_legacy.h:227
CAN_MCR_SLEEP
#define CAN_MCR_SLEEP
Definition: stm32f407xx.h:1771
CAN_TypeDef::sFIFOMailBox
CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]
Definition: stm32f407xx.h:262
UNUSED
#define UNUSED(x)
Definition: porcupine/demo/c/dr_libs/old/dr.h:92
CAN_TI0R_TXRQ
#define CAN_TI0R_TXRQ
Definition: stm32f407xx.h:2033
CAN_TypeDef::sTxMailBox
CAN_TxMailBox_TypeDef sTxMailBox[3]
Definition: stm32f407xx.h:261
CAN_ID_STD
#define CAN_ID_STD(x)
Definition: MIMXRT1052.h:4016
CAN_ESR_LEC_2
#define CAN_ESR_LEC_2
Definition: stm32f407xx.h:1990
CAN_MSR_SLAK
#define CAN_MSR_SLAK
Definition: stm32f407xx.h:1802
CAN_HandleTypeDef::pTxMsg
CanTxMsgTypeDef * pTxMsg
Definition: stm32f7xx_hal_can_legacy.h:229
IS_CAN_FILTER_SCALE
#define IS_CAN_FILTER_SCALE(SCALE)
Definition: stm32f7xx_hal_can_legacy.h:732
CanTxMsgTypeDef::StdId
uint32_t StdId
Definition: stm32f7xx_hal_can_legacy.h:169
__HAL_CAN_GET_FLAG
#define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__)
Check whether the specified CAN flag is set or not.
Definition: stm32f7xx_hal_can_legacy.h:543
CAN_TypeDef::FM1R
__IO uint32_t FM1R
Definition: stm32f407xx.h:265
CAN_FilterConfTypeDef::FilterIdLow
uint32_t FilterIdLow
Definition: stm32f7xx_hal_can_legacy.h:130
HAL_CAN_ERROR_CRC
#define HAL_CAN_ERROR_CRC
Definition: stm32f7xx_hal_can_legacy.h:264
HAL_CAN_ConfigFilter
HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterConfTypeDef *sFilterConfig)
__HAL_LOCK
#define __HAL_LOCK(__HANDLE__)
Definition: stm32f407/stm32f407g-disc1/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:93
CAN_ESR_LEC
#define CAN_ESR_LEC
Definition: stm32f407xx.h:1987
CAN_IT_ERR
#define CAN_IT_ERR
Definition: stm32f7xx_hal_can_legacy.h:461
HAL_CAN_STATE_BUSY_RX0_RX1
@ HAL_CAN_STATE_BUSY_RX0_RX1
Definition: stm32f7xx_hal_can_legacy.h:73
CAN_FILTERSCALE_16BIT
#define CAN_FILTERSCALE_16BIT
Definition: stm32f7xx_hal_can_legacy.h:353
CAN_TypeDef::FFA1R
__IO uint32_t FFA1R
Definition: stm32f407xx.h:269
__HAL_CAN_GET_IT_SOURCE
#define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__)
Check if the specified CAN interrupt source is enabled or disabled.
Definition: stm32f7xx_hal_can_legacy.h:589
HAL_CAN_STATE_BUSY_RX1
@ HAL_CAN_STATE_BUSY_RX1
Definition: stm32f7xx_hal_can_legacy.h:70
CanRxMsgTypeDef::StdId
uint32_t StdId
Definition: stm32f7xx_hal_can_legacy.h:194
HAL_CAN_ERROR_BR
#define HAL_CAN_ERROR_BR
Definition: stm32f7xx_hal_can_legacy.h:262
HAL_BUSY
@ HAL_BUSY
Definition: stm32f407/stm32f407g-disc1/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:44
__HAL_CAN_FIFO_RELEASE
#define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__)
Release the specified receive FIFO.
Definition: stm32f7xx_hal_can_legacy.h:608
CAN_MCR_INRQ
#define CAN_MCR_INRQ
Definition: stm32f407xx.h:1768
CAN_InitTypeDef::TXFP
uint32_t TXFP
Definition: stm32f7xx_hal_can_legacy.h:117
HAL_CAN_STATE_BUSY
@ HAL_CAN_STATE_BUSY
Definition: stm32f7xx_hal_can_legacy.h:67
CAN_FIFO0
#define CAN_FIFO0
Definition: stm32f7xx_hal_can_legacy.h:389
CAN_HandleTypeDef::Lock
HAL_LockTypeDef Lock
Definition: stm32f7xx_hal_can_legacy.h:237
CAN_MCR_AWUM
#define CAN_MCR_AWUM
Definition: stm32f407xx.h:1783
CAN_FILTER_FIFO1
#define CAN_FILTER_FIFO1
Definition: stm32f7xx_hal_can_legacy.h:363
CAN_FilterConfTypeDef::FilterActivation
uint32_t FilterActivation
Definition: stm32f7xx_hal_can_legacy.h:156
__HAL_UNLOCK
#define __HAL_UNLOCK(__HANDLE__)
Definition: stm32f407/stm32f407g-disc1/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:105
CAN_FIFO1
#define CAN_FIFO1
Definition: stm32f7xx_hal_can_legacy.h:390
CanTxMsgTypeDef::IDE
uint32_t IDE
Definition: stm32f7xx_hal_can_legacy.h:175
HAL_MAX_DELAY
#define HAL_MAX_DELAY
Definition: stm32f407/stm32f407g-disc1/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:61
CAN_FilterConfTypeDef::FilterNumber
uint32_t FilterNumber
Definition: stm32f7xx_hal_can_legacy.h:147
CanRxMsgTypeDef::Data
uint8_t Data[8]
Definition: stm32f7xx_hal_can_legacy.h:209
CAN_InitTypeDef::BS2
uint32_t BS2
Definition: stm32f7xx_hal_can_legacy.h:99
CAN_InitTypeDef::RFLM
uint32_t RFLM
Definition: stm32f7xx_hal_can_legacy.h:114
CAN_INITSTATUS_FAILED
#define CAN_INITSTATUS_FAILED
Definition: stm32f7xx_hal_can_legacy.h:275
CAN_InitTypeDef::NART
uint32_t NART
Definition: stm32f7xx_hal_can_legacy.h:111
HAL_CAN_Receive
HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout)
HAL_CAN_STATE_BUSY_TX_RX1
@ HAL_CAN_STATE_BUSY_TX_RX1
Definition: stm32f7xx_hal_can_legacy.h:72
IS_CAN_FIFO
#define IS_CAN_FIFO(FIFO)
Definition: stm32f7xx_hal_can_legacy.h:746
HAL_CAN_STATE_BUSY_RX0
@ HAL_CAN_STATE_BUSY_RX0
Definition: stm32f7xx_hal_can_legacy.h:69
CanTxMsgTypeDef::RTR
uint32_t RTR
Definition: stm32f7xx_hal_can_legacy.h:178
CAN_TxMailBox_TypeDef::TDLR
__IO uint32_t TDLR
Definition: stm32f407xx.h:220
CAN_MCR_RFLM
#define CAN_MCR_RFLM
Definition: stm32f407xx.h:1777
CAN_TypeDef::BTR
__IO uint32_t BTR
Definition: stm32f407xx.h:259
CanRxMsgTypeDef
CAN Rx message structure definition.
Definition: stm32f7xx_hal_can_legacy.h:192
IS_CAN_FILTER_MODE
#define IS_CAN_FILTER_MODE(MODE)
Definition: stm32f7xx_hal_can_legacy.h:730
CanRxMsgTypeDef::FIFONumber
uint32_t FIFONumber
Definition: stm32f7xx_hal_can_legacy.h:215
IS_CAN_BS2
#define IS_CAN_BS2(BS2)
Definition: stm32f7xx_hal_can_legacy.h:727
CAN_FILTERSCALE_32BIT
#define CAN_FILTERSCALE_32BIT
Definition: stm32f7xx_hal_can_legacy.h:354
CAN_InitTypeDef::ABOM
uint32_t ABOM
Definition: stm32f7xx_hal_can_legacy.h:105
HAL_TIMEOUT
@ HAL_TIMEOUT
Definition: stm32f407/stm32f407g-disc1/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:45
CAN_IT_FOV0
#define CAN_IT_FOV0
Definition: stm32f7xx_hal_can_legacy.h:447
CAN_HandleTypeDef::State
__IO HAL_CAN_StateTypeDef State
Definition: stm32f7xx_hal_can_legacy.h:235
__HAL_CAN_TRANSMIT_STATUS
#define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)
Check the transmission status of a CAN Frame.
Definition: stm32f7xx_hal_can_legacy.h:597
CAN_TSR_TME0
#define CAN_TSR_TME0
Definition: stm32f407xx.h:1880
HAL_CAN_ERROR_STF
#define HAL_CAN_ERROR_STF
Definition: stm32f7xx_hal_can_legacy.h:259
CAN_InitTypeDef::Mode
uint32_t Mode
Definition: stm32f7xx_hal_can_legacy.h:88
CAN_MCR_TTCM
#define CAN_MCR_TTCM
Definition: stm32f407xx.h:1789
HAL_CAN_GetError
uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan)
IS_CAN_FILTER_FIFO
#define IS_CAN_FILTER_FIFO(FIFO)
Definition: stm32f7xx_hal_can_legacy.h:734
__HAL_CAN_MSG_PENDING
#define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__)
Return the number of pending received messages.
Definition: stm32f7xx_hal_can_legacy.h:513
CAN_FLAG_TXOK0
#define CAN_FLAG_TXOK0
Definition: stm32f7xx_hal_can_legacy.h:407
IS_CAN_BS1
#define IS_CAN_BS1(BS1)
Definition: stm32f7xx_hal_can_legacy.h:726
CAN_FLAG_FOV1
#define CAN_FLAG_FOV1
Definition: stm32f7xx_hal_can_legacy.h:419
CanRxMsgTypeDef::FMI
uint32_t FMI
Definition: stm32f7xx_hal_can_legacy.h:212
__HAL_CAN_ENABLE_IT
#define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__)
Enable the specified CAN interrupts.
Definition: stm32f7xx_hal_can_legacy.h:497
CAN_TSR_TME2
#define CAN_TSR_TME2
Definition: stm32f407xx.h:1886
HAL_CAN_StateTypeDef
HAL_CAN_StateTypeDef
HAL State structures definition.
Definition: stm32f7xx_hal_can_legacy.h:63
CAN_FLAG_EPV
#define CAN_FLAG_EPV
Definition: stm32f7xx_hal_can_legacy.h:433
CanTxMsgTypeDef::ExtId
uint32_t ExtId
Definition: stm32f7xx_hal_can_legacy.h:172
CAN_TXMAILBOX_1
#define CAN_TXMAILBOX_1
Definition: stm32f7xx_hal_can_legacy.h:470
CAN_FLAG_TXOK2
#define CAN_FLAG_TXOK2
Definition: stm32f7xx_hal_can_legacy.h:409
HAL_CAN_IRQHandler
void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan)
CAN_MCR_NART
#define CAN_MCR_NART
Definition: stm32f407xx.h:1780
CAN_TSR_RQCP1
#define CAN_TSR_RQCP1
Definition: stm32f407xx.h:1843
IS_CAN_PRESCALER
#define IS_CAN_PRESCALER(PRESCALER)
Definition: stm32f7xx_hal_can_legacy.h:728
HAL_CAN_ERROR_FOV0
#define HAL_CAN_ERROR_FOV0
Definition: stm32f7xx_hal_can_legacy.h:265
CAN_FMR_CAN2SB
#define CAN_FMR_CAN2SB
Definition: stm32f407xx.h:2311
HAL_CAN_TxCpltCallback
void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef *hcan)
IS_CAN_FILTER_NUMBER
#define IS_CAN_FILTER_NUMBER(NUMBER)
Definition: stm32f7xx_hal_can_legacy.h:729
HAL_CAN_ERROR_EPV
#define HAL_CAN_ERROR_EPV
Definition: stm32f7xx_hal_can_legacy.h:257
HAL_CAN_Transmit_IT
HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan)
SET_BIT
#define SET_BIT(REG, BIT)
Definition: stm32f407/stm32f407g-disc1/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h:212
CAN_MSR_ERRI
#define CAN_MSR_ERRI
Definition: stm32f407xx.h:1805
HAL_CAN_ERROR_NONE
#define HAL_CAN_ERROR_NONE
Definition: stm32f7xx_hal_can_legacy.h:255
HAL_CAN_WakeUp
HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan)
HAL_CAN_STATE_ERROR
@ HAL_CAN_STATE_ERROR
Definition: stm32f7xx_hal_can_legacy.h:76
HAL_CAN_STATE_BUSY_TX_RX0
@ HAL_CAN_STATE_BUSY_TX_RX0
Definition: stm32f7xx_hal_can_legacy.h:71
HAL_CAN_ERROR_BOF
#define HAL_CAN_ERROR_BOF
Definition: stm32f7xx_hal_can_legacy.h:258
CAN_TxMailBox_TypeDef::TIR
__IO uint32_t TIR
Definition: stm32f407xx.h:218
CAN_HandleTypeDef::ErrorCode
__IO uint32_t ErrorCode
Definition: stm32f7xx_hal_can_legacy.h:239
CanTxMsgTypeDef::Data
uint8_t Data[8]
Definition: stm32f7xx_hal_can_legacy.h:184
CAN_MCR_TXFP
#define CAN_MCR_TXFP
Definition: stm32f407xx.h:1774
CAN_INITSTATUS_SUCCESS
#define CAN_INITSTATUS_SUCCESS
Definition: stm32f7xx_hal_can_legacy.h:276
CAN_TypeDef::TSR
__IO uint32_t TSR
Definition: stm32f407xx.h:254
HAL_CAN_STATE_BUSY_TX_RX0_RX1
@ HAL_CAN_STATE_BUSY_TX_RX0_RX1
Definition: stm32f7xx_hal_can_legacy.h:74
HAL_CAN_STATE_TIMEOUT
@ HAL_CAN_STATE_TIMEOUT
Definition: stm32f7xx_hal_can_legacy.h:75
CAN_FilterRegister_TypeDef::FR2
__IO uint32_t FR2
Definition: stm32f407xx.h:243
CAN_FIFOMailBox_TypeDef::RIR
__IO uint32_t RIR
Definition: stm32f407xx.h:230
CAN_TypeDef::MCR
__IO uint32_t MCR
Definition: stm32f407xx.h:252
HAL_CAN_ERROR_FOR
#define HAL_CAN_ERROR_FOR
Definition: stm32f7xx_hal_can_legacy.h:260
CAN_TSR_RQCP0
#define CAN_TSR_RQCP0
Definition: stm32f407xx.h:1828
CanRxMsgTypeDef::IDE
uint32_t IDE
Definition: stm32f7xx_hal_can_legacy.h:200
CAN_FilterConfTypeDef::FilterFIFOAssignment
uint32_t FilterFIFOAssignment
Definition: stm32f7xx_hal_can_legacy.h:144
HAL_CAN_STATE_BUSY_TX
@ HAL_CAN_STATE_BUSY_TX
Definition: stm32f7xx_hal_can_legacy.h:68
HAL_CAN_GetState
HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan)
CAN_FILTERMODE_IDMASK
#define CAN_FILTERMODE_IDMASK
Definition: stm32f7xx_hal_can_legacy.h:344
HAL_CAN_ErrorCallback
void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan)
CAN_FilterConfTypeDef::FilterMode
uint32_t FilterMode
Definition: stm32f7xx_hal_can_legacy.h:150


picovoice_driver
Author(s):
autogenerated on Fri Apr 1 2022 02:14:52