STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
stm32f7xx_hal_can.h
Go to the documentation of this file.
1 
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32F7xx_HAL_CAN_H
40 #define __STM32F7xx_HAL_CAN_H
41 
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45 
46 /* Includes ------------------------------------------------------------------*/
47 #include "stm32f7xx_hal_def.h"
48 
57 /* Exported types ------------------------------------------------------------*/
65 typedef enum
66 {
77 
81 typedef struct
82 {
83  uint32_t Prescaler;
86  uint32_t Mode;
89  uint32_t SJW;
94  uint32_t BS1;
97  uint32_t BS2;
100  uint32_t TTCM;
103  uint32_t ABOM;
106  uint32_t AWUM;
109  uint32_t NART;
112  uint32_t RFLM;
115  uint32_t TXFP;
118 
122 typedef struct
123 {
124  uint32_t FilterIdHigh;
128  uint32_t FilterIdLow;
132  uint32_t FilterMaskIdHigh;
137  uint32_t FilterMaskIdLow;
145  uint32_t FilterNumber;
148  uint32_t FilterMode;
151  uint32_t FilterScale;
154  uint32_t FilterActivation;
157  uint32_t BankNumber;
161 
165 typedef struct
166 {
167  uint32_t StdId;
170  uint32_t ExtId;
173  uint32_t IDE;
176  uint32_t RTR;
179  uint32_t DLC;
182  uint8_t Data[8];
186 
190 typedef struct
191 {
192  uint32_t StdId;
195  uint32_t ExtId;
198  uint32_t IDE;
201  uint32_t RTR;
204  uint32_t DLC;
207  uint8_t Data[8];
210  uint32_t FMI;
213  uint32_t FIFONumber;
217 
221 typedef struct
222 {
231  __IO HAL_CAN_StateTypeDef State;
235  __IO uint32_t ErrorCode;
238 
243 /* Exported constants --------------------------------------------------------*/
251 #define HAL_CAN_ERROR_NONE 0x00U
252 #define HAL_CAN_ERROR_EWG 0x01U
253 #define HAL_CAN_ERROR_EPV 0x02U
254 #define HAL_CAN_ERROR_BOF 0x04U
255 #define HAL_CAN_ERROR_STF 0x08U
256 #define HAL_CAN_ERROR_FOR 0x10U
257 #define HAL_CAN_ERROR_ACK 0x20U
258 #define HAL_CAN_ERROR_BR 0x40U
259 #define HAL_CAN_ERROR_BD 0x80U
260 #define HAL_CAN_ERROR_CRC 0x100U
268 #define CAN_INITSTATUS_FAILED ((uint8_t)0x00U)
269 #define CAN_INITSTATUS_SUCCESS ((uint8_t)0x01U)
277 #define CAN_MODE_NORMAL ((uint32_t)0x00000000U)
278 #define CAN_MODE_LOOPBACK ((uint32_t)CAN_BTR_LBKM)
279 #define CAN_MODE_SILENT ((uint32_t)CAN_BTR_SILM)
280 #define CAN_MODE_SILENT_LOOPBACK ((uint32_t)(CAN_BTR_LBKM | CAN_BTR_SILM))
288 #define CAN_SJW_1TQ ((uint32_t)0x00000000U)
289 #define CAN_SJW_2TQ ((uint32_t)CAN_BTR_SJW_0)
290 #define CAN_SJW_3TQ ((uint32_t)CAN_BTR_SJW_1)
291 #define CAN_SJW_4TQ ((uint32_t)CAN_BTR_SJW)
299 #define CAN_BS1_1TQ ((uint32_t)0x00000000U)
300 #define CAN_BS1_2TQ ((uint32_t)CAN_BTR_TS1_0)
301 #define CAN_BS1_3TQ ((uint32_t)CAN_BTR_TS1_1)
302 #define CAN_BS1_4TQ ((uint32_t)(CAN_BTR_TS1_1 | CAN_BTR_TS1_0))
303 #define CAN_BS1_5TQ ((uint32_t)CAN_BTR_TS1_2)
304 #define CAN_BS1_6TQ ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_0))
305 #define CAN_BS1_7TQ ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_1))
306 #define CAN_BS1_8TQ ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_1 | CAN_BTR_TS1_0))
307 #define CAN_BS1_9TQ ((uint32_t)CAN_BTR_TS1_3)
308 #define CAN_BS1_10TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_0))
309 #define CAN_BS1_11TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_1))
310 #define CAN_BS1_12TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_1 | CAN_BTR_TS1_0))
311 #define CAN_BS1_13TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2))
312 #define CAN_BS1_14TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2 | CAN_BTR_TS1_0))
313 #define CAN_BS1_15TQ ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2 | CAN_BTR_TS1_1))
314 #define CAN_BS1_16TQ ((uint32_t)CAN_BTR_TS1)
322 #define CAN_BS2_1TQ ((uint32_t)0x00000000U)
323 #define CAN_BS2_2TQ ((uint32_t)CAN_BTR_TS2_0)
324 #define CAN_BS2_3TQ ((uint32_t)CAN_BTR_TS2_1)
325 #define CAN_BS2_4TQ ((uint32_t)(CAN_BTR_TS2_1 | CAN_BTR_TS2_0))
326 #define CAN_BS2_5TQ ((uint32_t)CAN_BTR_TS2_2)
327 #define CAN_BS2_6TQ ((uint32_t)(CAN_BTR_TS2_2 | CAN_BTR_TS2_0))
328 #define CAN_BS2_7TQ ((uint32_t)(CAN_BTR_TS2_2 | CAN_BTR_TS2_1))
329 #define CAN_BS2_8TQ ((uint32_t)CAN_BTR_TS2)
337 #define CAN_FILTERMODE_IDMASK ((uint8_t)0x00U)
338 #define CAN_FILTERMODE_IDLIST ((uint8_t)0x01U)
346 #define CAN_FILTERSCALE_16BIT ((uint8_t)0x00U)
347 #define CAN_FILTERSCALE_32BIT ((uint8_t)0x01U)
355 #define CAN_FILTER_FIFO0 ((uint8_t)0x00U)
356 #define CAN_FILTER_FIFO1 ((uint8_t)0x01U)
364 #define CAN_ID_STD ((uint32_t)0x00000000U)
365 #define CAN_ID_EXT ((uint32_t)0x00000004U)
373 #define CAN_RTR_DATA ((uint32_t)0x00000000U)
374 #define CAN_RTR_REMOTE ((uint32_t)0x00000002U)
382 #define CAN_FIFO0 ((uint8_t)0x00U)
383 #define CAN_FIFO1 ((uint8_t)0x01U)
391 /* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus()
392  and CAN_ClearFlag() functions. */
393 /* If the flag is 0x1XXXXXXX, it means that it can only be used with
394  CAN_GetFlagStatus() function. */
395 
396 /* Transmit Flags */
397 #define CAN_FLAG_RQCP0 ((uint32_t)0x00000500U)
398 #define CAN_FLAG_RQCP1 ((uint32_t)0x00000508U)
399 #define CAN_FLAG_RQCP2 ((uint32_t)0x00000510U)
400 #define CAN_FLAG_TXOK0 ((uint32_t)0x00000501U)
401 #define CAN_FLAG_TXOK1 ((uint32_t)0x00000509U)
402 #define CAN_FLAG_TXOK2 ((uint32_t)0x00000511U)
403 #define CAN_FLAG_TME0 ((uint32_t)0x0000051AU)
404 #define CAN_FLAG_TME1 ((uint32_t)0x0000051BU)
405 #define CAN_FLAG_TME2 ((uint32_t)0x0000051CU)
407 /* Receive Flags */
408 #define CAN_FLAG_FF0 ((uint32_t)0x00000203U)
409 #define CAN_FLAG_FOV0 ((uint32_t)0x00000204U)
411 #define CAN_FLAG_FF1 ((uint32_t)0x00000403U)
412 #define CAN_FLAG_FOV1 ((uint32_t)0x00000404U)
414 /* Operating Mode Flags */
415 #define CAN_FLAG_INAK ((uint32_t)0x00000100U)
416 #define CAN_FLAG_SLAK ((uint32_t)0x00000101U)
417 #define CAN_FLAG_ERRI ((uint32_t)0x00000102U)
418 #define CAN_FLAG_WKU ((uint32_t)0x00000103U)
419 #define CAN_FLAG_SLAKI ((uint32_t)0x00000104U)
421 /* @note When SLAK interrupt is disabled (SLKIE=0), no polling on SLAKI is possible.
422  In this case the SLAK bit can be polled.*/
423 
424 /* Error Flags */
425 #define CAN_FLAG_EWG ((uint32_t)0x00000300U)
426 #define CAN_FLAG_EPV ((uint32_t)0x00000301U)
427 #define CAN_FLAG_BOF ((uint32_t)0x00000302U)
435 #define CAN_IT_TME ((uint32_t)CAN_IER_TMEIE)
437 /* Receive Interrupts */
438 #define CAN_IT_FMP0 ((uint32_t)CAN_IER_FMPIE0)
439 #define CAN_IT_FF0 ((uint32_t)CAN_IER_FFIE0)
440 #define CAN_IT_FOV0 ((uint32_t)CAN_IER_FOVIE0)
441 #define CAN_IT_FMP1 ((uint32_t)CAN_IER_FMPIE1)
442 #define CAN_IT_FF1 ((uint32_t)CAN_IER_FFIE1)
443 #define CAN_IT_FOV1 ((uint32_t)CAN_IER_FOVIE1)
445 /* Operating Mode Interrupts */
446 #define CAN_IT_WKU ((uint32_t)CAN_IER_WKUIE)
447 #define CAN_IT_SLK ((uint32_t)CAN_IER_SLKIE)
449 /* Error Interrupts */
450 #define CAN_IT_EWG ((uint32_t)CAN_IER_EWGIE)
451 #define CAN_IT_EPV ((uint32_t)CAN_IER_EPVIE)
452 #define CAN_IT_BOF ((uint32_t)CAN_IER_BOFIE)
453 #define CAN_IT_LEC ((uint32_t)CAN_IER_LECIE)
454 #define CAN_IT_ERR ((uint32_t)CAN_IER_ERRIE)
462 #define CAN_TXMAILBOX_0 ((uint8_t)0x00U)
463 #define CAN_TXMAILBOX_1 ((uint8_t)0x01U)
464 #define CAN_TXMAILBOX_2 ((uint8_t)0x02U)
465 
473 /* Exported macro ------------------------------------------------------------*/
482 #define __HAL_CAN_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CAN_STATE_RESET)
483 
490 #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__))
491 
498 #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__))
499 
506 #define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \
507 ((uint8_t)((__HANDLE__)->Instance->RF0R&(uint32_t)0x03)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&(uint32_t)0x03)))
508 
536 #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \
537 ((((__FLAG__) >> 8) == 5)? ((((__HANDLE__)->Instance->TSR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \
538  (((__FLAG__) >> 8) == 2)? ((((__HANDLE__)->Instance->RF0R) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \
539  (((__FLAG__) >> 8) == 4)? ((((__HANDLE__)->Instance->RF1R) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \
540  (((__FLAG__) >> 8) == 1)? ((((__HANDLE__)->Instance->MSR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \
541  ((((__HANDLE__)->Instance->ESR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))))
542 
567 #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \
568 ((((__FLAG__) >> 8) == 5)? (((__HANDLE__)->Instance->TSR) = ((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \
569  (((__FLAG__) >> 8) == 2)? (((__HANDLE__)->Instance->RF0R) = ((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \
570  (((__FLAG__) >> 8) == 4)? (((__HANDLE__)->Instance->RF1R) = ((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \
571  (((__HANDLE__)->Instance->MSR) = ((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))))
572 
582 #define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
583 
590 #define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\
591 (((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0)) == (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0)) :\
592  ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1)) == (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1)) :\
593  ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2)))
594 
601 #define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \
602 ((__HANDLE__)->Instance->RF0R = CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R = CAN_RF1R_RFOM1))
603 
610 #define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\
611 (((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR = CAN_TSR_ABRQ0) :\
612  ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR = CAN_TSR_ABRQ1) :\
613  ((__HANDLE__)->Instance->TSR = CAN_TSR_ABRQ2))
614 
624 #define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \
625 ((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF))
626 
631 /* Exported functions --------------------------------------------------------*/
639 /* Initialization/de-initialization functions ***********************************/
652 /* I/O operation functions ******************************************************/
653 HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout);
655 HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout);
656 HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber);
670 /* Peripheral State functions ***************************************************/
671 uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan);
672 HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan);
681 /* Private types -------------------------------------------------------------*/
690 /* Private variables ---------------------------------------------------------*/
699 /* Private constants ---------------------------------------------------------*/
703 #define CAN_TXSTATUS_NOMAILBOX ((uint8_t)0x04U)
704 #define CAN_FLAG_MASK ((uint32_t)0x000000FFU)
705 
709 /* Private macros ------------------------------------------------------------*/
713 #define IS_CAN_MODE(MODE) (((MODE) == CAN_MODE_NORMAL) || \
714  ((MODE) == CAN_MODE_LOOPBACK)|| \
715  ((MODE) == CAN_MODE_SILENT) || \
716  ((MODE) == CAN_MODE_SILENT_LOOPBACK))
717 #define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \
718  ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ))
719 #define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ)
720 #define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ)
721 #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024))
722 #define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27)
723 #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \
724  ((MODE) == CAN_FILTERMODE_IDLIST))
725 #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \
726  ((SCALE) == CAN_FILTERSCALE_32BIT))
727 #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \
728  ((FIFO) == CAN_FILTER_FIFO1))
729 #define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28)
730 
731 #define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02))
732 #define IS_CAN_STDID(STDID) ((STDID) <= ((uint32_t)0x7FF))
733 #define IS_CAN_EXTID(EXTID) ((EXTID) <= ((uint32_t)0x1FFFFFFF))
734 #define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08))
735 
736 #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_ID_STD) || \
737  ((IDTYPE) == CAN_ID_EXT))
738 #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE))
739 #define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1))
740 
745 /* Private functions ---------------------------------------------------------*/
761 #ifdef __cplusplus
762 }
763 #endif
764 
765 #endif /* __STM32F7xx_CAN_H */
766 
767 
768 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan)
CAN handle Structure definition.
__IO uint32_t ErrorCode
HAL_LockTypeDef
HAL Lock structures definition.
HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan)
HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan)
HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef *hcan)
HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, CAN_FilterConfTypeDef *sFilterConfig)
void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan)
void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef *hcan)
void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef *hcan)
CAN_TypeDef * Instance
Controller Area Network.
Definition: stm32f745xx.h:275
CAN init structure definition.
#define __IO
Definition: core_cm0.h:213
HAL_CAN_StateTypeDef
HAL State structures definition.
CAN filter configuration structure definition.
CAN_InitTypeDef Init
CAN Rx message structure definition.
CAN Tx message structure definition.
HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan)
void HAL_CAN_MspDeInit(CAN_HandleTypeDef *hcan)
HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan)
HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout)
This file contains HAL common defines, enumeration, macros and structures definitions.
HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan)
HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber)
void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan)
__IO HAL_CAN_StateTypeDef State
HAL_StatusTypeDef
HAL Status structures definition.
void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan)
HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout)
CanTxMsgTypeDef * pTxMsg
CanRxMsgTypeDef * pRxMsg
HAL_LockTypeDef Lock