]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil/ST_Library/include/stm32f7xx_hal_can.h
Final V8.2.1 release ready for tagging:
[freertos] / FreeRTOS / Demo / CORTEX_M7_STM32F7_STM32756G-EVAL_IAR_Keil / ST_Library / include / stm32f7xx_hal_can.h
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f7xx_hal_can.h\r
4   * @author  MCD Application Team\r
5   * @version V1.0.0RC1\r
6   * @date    24-March-2015\r
7   * @brief   Header file of CAN HAL module.\r
8   ******************************************************************************\r
9   * @attention\r
10   *\r
11   * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>\r
12   *\r
13   * Redistribution and use in source and binary forms, with or without modification,\r
14   * are permitted provided that the following conditions are met:\r
15   *   1. Redistributions of source code must retain the above copyright notice,\r
16   *      this list of conditions and the following disclaimer.\r
17   *   2. Redistributions in binary form must reproduce the above copyright notice,\r
18   *      this list of conditions and the following disclaimer in the documentation\r
19   *      and/or other materials provided with the distribution.\r
20   *   3. Neither the name of STMicroelectronics nor the names of its contributors\r
21   *      may be used to endorse or promote products derived from this software\r
22   *      without specific prior written permission.\r
23   *\r
24   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
25   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
26   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
27   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r
28   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
29   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r
30   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r
31   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
32   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
33   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
34   *\r
35   ******************************************************************************\r
36   */\r
37 \r
38 /* Define to prevent recursive inclusion -------------------------------------*/\r
39 #ifndef __STM32F7xx_HAL_CAN_H\r
40 #define __STM32F7xx_HAL_CAN_H\r
41 \r
42 #ifdef __cplusplus\r
43  extern "C" {\r
44 #endif\r
45 \r
46 /* Includes ------------------------------------------------------------------*/\r
47 #include "stm32f7xx_hal_def.h"\r
48 \r
49 /** @addtogroup STM32F7xx_HAL_Driver\r
50   * @{\r
51   */\r
52 \r
53 /** @addtogroup CAN\r
54   * @{\r
55   */\r
56 \r
57 /* Exported types ------------------------------------------------------------*/\r
58 /** @defgroup CAN_Exported_Types CAN Exported Types\r
59   * @{\r
60   */\r
61 \r
62 /**\r
63   * @brief  HAL State structures definition\r
64   */\r
65 typedef enum\r
66 {\r
67   HAL_CAN_STATE_RESET             = 0x00,  /*!< CAN not yet initialized or disabled */\r
68   HAL_CAN_STATE_READY             = 0x01,  /*!< CAN initialized and ready for use   */\r
69   HAL_CAN_STATE_BUSY              = 0x02,  /*!< CAN process is ongoing              */\r
70   HAL_CAN_STATE_BUSY_TX           = 0x12,  /*!< CAN process is ongoing              */\r
71   HAL_CAN_STATE_BUSY_RX           = 0x22,  /*!< CAN process is ongoing              */\r
72   HAL_CAN_STATE_BUSY_TX_RX        = 0x32,  /*!< CAN process is ongoing              */\r
73   HAL_CAN_STATE_TIMEOUT           = 0x03,  /*!< Timeout state                       */\r
74   HAL_CAN_STATE_ERROR             = 0x04   /*!< CAN error state                     */\r
75 \r
76 }HAL_CAN_StateTypeDef;\r
77 \r
78 /**\r
79   * @brief  CAN init structure definition\r
80   */\r
81 typedef struct\r
82 {\r
83   uint32_t Prescaler;  /*!< Specifies the length of a time quantum.\r
84                             This parameter must be a number between Min_Data = 1 and Max_Data = 1024 */\r
85 \r
86   uint32_t Mode;       /*!< Specifies the CAN operating mode.\r
87                             This parameter can be a value of @ref CAN_operating_mode */\r
88 \r
89   uint32_t SJW;        /*!< Specifies the maximum number of time quanta\r
90                             the CAN hardware is allowed to lengthen or\r
91                             shorten a bit to perform resynchronization.\r
92                             This parameter can be a value of @ref CAN_synchronisation_jump_width */\r
93 \r
94   uint32_t BS1;        /*!< Specifies the number of time quanta in Bit Segment 1.\r
95                             This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_1 */\r
96 \r
97   uint32_t BS2;        /*!< Specifies the number of time quanta in Bit Segment 2.\r
98                             This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */\r
99 \r
100   uint32_t TTCM;       /*!< Enable or disable the time triggered communication mode.\r
101                             This parameter can be set to ENABLE or DISABLE. */\r
102 \r
103   uint32_t ABOM;       /*!< Enable or disable the automatic bus-off management.\r
104                             This parameter can be set to ENABLE or DISABLE */\r
105 \r
106   uint32_t AWUM;       /*!< Enable or disable the automatic wake-up mode.\r
107                             This parameter can be set to ENABLE or DISABLE */\r
108 \r
109   uint32_t NART;       /*!< Enable or disable the non-automatic retransmission mode.\r
110                             This parameter can be set to ENABLE or DISABLE */\r
111 \r
112   uint32_t RFLM;       /*!< Enable or disable the receive FIFO Locked mode.\r
113                             This parameter can be set to ENABLE or DISABLE */\r
114 \r
115   uint32_t TXFP;       /*!< Enable or disable the transmit FIFO priority.\r
116                             This parameter can be set to ENABLE or DISABLE */\r
117 }CAN_InitTypeDef;\r
118 \r
119 /**\r
120   * @brief  CAN filter configuration structure definition\r
121   */\r
122 typedef struct\r
123 {\r
124   uint32_t FilterIdHigh;          /*!< Specifies the filter identification number (MSBs for a 32-bit\r
125                                        configuration, first one for a 16-bit configuration).\r
126                                        This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r
127 \r
128   uint32_t FilterIdLow;           /*!< Specifies the filter identification number (LSBs for a 32-bit\r
129                                        configuration, second one for a 16-bit configuration).\r
130                                        This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r
131 \r
132   uint32_t FilterMaskIdHigh;      /*!< Specifies the filter mask number or identification number,\r
133                                        according to the mode (MSBs for a 32-bit configuration,\r
134                                        first one for a 16-bit configuration).\r
135                                        This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r
136 \r
137   uint32_t FilterMaskIdLow;       /*!< Specifies the filter mask number or identification number,\r
138                                        according to the mode (LSBs for a 32-bit configuration,\r
139                                        second one for a 16-bit configuration).\r
140                                        This parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r
141 \r
142   uint32_t FilterFIFOAssignment;  /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter.\r
143                                        This parameter can be a value of @ref CAN_filter_FIFO */\r
144 \r
145   uint32_t FilterNumber;          /*!< Specifies the filter which will be initialized.\r
146                                        This parameter must be a number between Min_Data = 0 and Max_Data = 27 */\r
147 \r
148   uint32_t FilterMode;            /*!< Specifies the filter mode to be initialized.\r
149                                        This parameter can be a value of @ref CAN_filter_mode */\r
150 \r
151   uint32_t FilterScale;           /*!< Specifies the filter scale.\r
152                                        This parameter can be a value of @ref CAN_filter_scale */\r
153 \r
154   uint32_t FilterActivation;      /*!< Enable or disable the filter.\r
155                                        This parameter can be set to ENABLE or DISABLE. */\r
156 \r
157   uint32_t BankNumber;            /*!< Select the start slave bank filter.\r
158                                        This parameter must be a number between Min_Data = 0 and Max_Data = 28 */\r
159 \r
160 }CAN_FilterConfTypeDef;\r
161 \r
162 /**\r
163   * @brief  CAN Tx message structure definition\r
164   */\r
165 typedef struct\r
166 {\r
167   uint32_t StdId;    /*!< Specifies the standard identifier.\r
168                           This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF */\r
169 \r
170   uint32_t ExtId;    /*!< Specifies the extended identifier.\r
171                           This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF */\r
172 \r
173   uint32_t IDE;      /*!< Specifies the type of identifier for the message that will be transmitted.\r
174                           This parameter can be a value of @ref CAN_Identifier_Type */\r
175 \r
176   uint32_t RTR;      /*!< Specifies the type of frame for the message that will be transmitted.\r
177                           This parameter can be a value of @ref CAN_remote_transmission_request */\r
178 \r
179   uint32_t DLC;      /*!< Specifies the length of the frame that will be transmitted.\r
180                           This parameter must be a number between Min_Data = 0 and Max_Data = 8 */\r
181 \r
182   uint32_t Data[8];  /*!< Contains the data to be transmitted.\r
183                           This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF */\r
184 \r
185 }CanTxMsgTypeDef;\r
186 \r
187 /**\r
188   * @brief  CAN Rx message structure definition\r
189   */\r
190 typedef struct\r
191 {\r
192   uint32_t StdId;       /*!< Specifies the standard identifier.\r
193                              This parameter must be a number between Min_Data = 0 and Max_Data = 0x7FF */\r
194 \r
195   uint32_t ExtId;       /*!< Specifies the extended identifier.\r
196                              This parameter must be a number between Min_Data = 0 and Max_Data = 0x1FFFFFFF */\r
197 \r
198   uint32_t IDE;         /*!< Specifies the type of identifier for the message that will be received.\r
199                              This parameter can be a value of @ref CAN_Identifier_Type */\r
200 \r
201   uint32_t RTR;         /*!< Specifies the type of frame for the received message.\r
202                              This parameter can be a value of @ref CAN_remote_transmission_request */\r
203 \r
204   uint32_t DLC;         /*!< Specifies the length of the frame that will be received.\r
205                              This parameter must be a number between Min_Data = 0 and Max_Data = 8 */\r
206 \r
207   uint32_t Data[8];     /*!< Contains the data to be received.\r
208                              This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF */\r
209 \r
210   uint32_t FMI;         /*!< Specifies the index of the filter the message stored in the mailbox passes through.\r
211                              This parameter must be a number between Min_Data = 0 and Max_Data = 0xFF */\r
212 \r
213   uint32_t FIFONumber;  /*!< Specifies the receive FIFO number.\r
214                              This parameter can be CAN_FIFO0 or CAN_FIFO1 */\r
215 \r
216 }CanRxMsgTypeDef;\r
217 \r
218 /**\r
219   * @brief  CAN handle Structure definition\r
220   */\r
221 typedef struct\r
222 {\r
223   CAN_TypeDef                 *Instance;  /*!< Register base address          */\r
224 \r
225   CAN_InitTypeDef             Init;       /*!< CAN required parameters        */\r
226 \r
227   CanTxMsgTypeDef*            pTxMsg;     /*!< Pointer to transmit structure  */\r
228 \r
229   CanRxMsgTypeDef*            pRxMsg;     /*!< Pointer to reception structure */\r
230 \r
231   __IO HAL_CAN_StateTypeDef   State;      /*!< CAN communication state        */\r
232 \r
233   HAL_LockTypeDef             Lock;       /*!< CAN locking object             */\r
234 \r
235   __IO uint32_t               ErrorCode;  /*!< CAN Error code                 */\r
236 \r
237 }CAN_HandleTypeDef;\r
238 \r
239 /**\r
240   * @}\r
241   */\r
242 \r
243 /* Exported constants --------------------------------------------------------*/\r
244 /** @defgroup CAN_Exported_Constants CAN Exported Constants\r
245   * @{\r
246   */\r
247 \r
248 /** @defgroup HAL_CAN_Error_Code HAL CAN Error Code\r
249   * @{\r
250   */\r
251 #define   HAL_CAN_ERROR_NONE      0x00    /*!< No error             */\r
252 #define   HAL_CAN_ERROR_EWG       0x01    /*!< EWG error            */\r
253 #define   HAL_CAN_ERROR_EPV       0x02    /*!< EPV error            */\r
254 #define   HAL_CAN_ERROR_BOF       0x04    /*!< BOF error            */\r
255 #define   HAL_CAN_ERROR_STF       0x08    /*!< Stuff error          */\r
256 #define   HAL_CAN_ERROR_FOR       0x10    /*!< Form error           */\r
257 #define   HAL_CAN_ERROR_ACK       0x20    /*!< Acknowledgment error */\r
258 #define   HAL_CAN_ERROR_BR        0x40    /*!< Bit recessive        */\r
259 #define   HAL_CAN_ERROR_BD        0x80    /*!< LEC dominant         */\r
260 #define   HAL_CAN_ERROR_CRC       0x100   /*!< LEC transfer error   */\r
261 /**\r
262   * @}\r
263   */\r
264 \r
265 /** @defgroup CAN_InitStatus CAN InitStatus\r
266   * @{\r
267   */\r
268 #define CAN_INITSTATUS_FAILED       ((uint8_t)0x00)  /*!< CAN initialization failed */\r
269 #define CAN_INITSTATUS_SUCCESS      ((uint8_t)0x01)  /*!< CAN initialization OK */\r
270 /**\r
271   * @}\r
272   */\r
273 \r
274 /** @defgroup CAN_operating_mode CAN Operating Mode\r
275   * @{\r
276   */\r
277 #define CAN_MODE_NORMAL             ((uint32_t)0x00000000)                     /*!< Normal mode   */\r
278 #define CAN_MODE_LOOPBACK           ((uint32_t)CAN_BTR_LBKM)                   /*!< Loopback mode */\r
279 #define CAN_MODE_SILENT             ((uint32_t)CAN_BTR_SILM)                   /*!< Silent mode   */\r
280 #define CAN_MODE_SILENT_LOOPBACK    ((uint32_t)(CAN_BTR_LBKM | CAN_BTR_SILM))  /*!< Loopback combined with silent mode */\r
281 /**\r
282   * @}\r
283   */\r
284 \r
285 /** @defgroup CAN_synchronisation_jump_width CAN Synchronisation Jump Width\r
286   * @{\r
287   */\r
288 #define CAN_SJW_1TQ                 ((uint32_t)0x00000000)     /*!< 1 time quantum */\r
289 #define CAN_SJW_2TQ                 ((uint32_t)CAN_BTR_SJW_0)  /*!< 2 time quantum */\r
290 #define CAN_SJW_3TQ                 ((uint32_t)CAN_BTR_SJW_1)  /*!< 3 time quantum */\r
291 #define CAN_SJW_4TQ                 ((uint32_t)CAN_BTR_SJW)    /*!< 4 time quantum */\r
292 /**\r
293   * @}\r
294   */\r
295 \r
296 /** @defgroup CAN_time_quantum_in_bit_segment_1 CAN Time Quantum in bit segment 1\r
297   * @{\r
298   */\r
299 #define CAN_BS1_1TQ                 ((uint32_t)0x00000000)                                       /*!< 1 time quantum  */\r
300 #define CAN_BS1_2TQ                 ((uint32_t)CAN_BTR_TS1_0)                                    /*!< 2 time quantum  */\r
301 #define CAN_BS1_3TQ                 ((uint32_t)CAN_BTR_TS1_1)                                    /*!< 3 time quantum  */\r
302 #define CAN_BS1_4TQ                 ((uint32_t)(CAN_BTR_TS1_1 | CAN_BTR_TS1_0))                  /*!< 4 time quantum  */\r
303 #define CAN_BS1_5TQ                 ((uint32_t)CAN_BTR_TS1_2)                                    /*!< 5 time quantum  */\r
304 #define CAN_BS1_6TQ                 ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_0))                  /*!< 6 time quantum  */\r
305 #define CAN_BS1_7TQ                 ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_1))                  /*!< 7 time quantum  */\r
306 #define CAN_BS1_8TQ                 ((uint32_t)(CAN_BTR_TS1_2 | CAN_BTR_TS1_1 | CAN_BTR_TS1_0))  /*!< 8 time quantum  */\r
307 #define CAN_BS1_9TQ                 ((uint32_t)CAN_BTR_TS1_3)                                    /*!< 9 time quantum  */\r
308 #define CAN_BS1_10TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_0))                  /*!< 10 time quantum */\r
309 #define CAN_BS1_11TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_1))                  /*!< 11 time quantum */\r
310 #define CAN_BS1_12TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_1 | CAN_BTR_TS1_0))  /*!< 12 time quantum */\r
311 #define CAN_BS1_13TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2))                  /*!< 13 time quantum */\r
312 #define CAN_BS1_14TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2 | CAN_BTR_TS1_0))  /*!< 14 time quantum */\r
313 #define CAN_BS1_15TQ                ((uint32_t)(CAN_BTR_TS1_3 | CAN_BTR_TS1_2 | CAN_BTR_TS1_1))  /*!< 15 time quantum */\r
314 #define CAN_BS1_16TQ                ((uint32_t)CAN_BTR_TS1) /*!< 16 time quantum */\r
315 /**\r
316   * @}\r
317   */\r
318 \r
319 /** @defgroup CAN_time_quantum_in_bit_segment_2 CAN Time Quantum in bit segment 2\r
320   * @{\r
321   */\r
322 #define CAN_BS2_1TQ                 ((uint32_t)0x00000000)                       /*!< 1 time quantum */\r
323 #define CAN_BS2_2TQ                 ((uint32_t)CAN_BTR_TS2_0)                    /*!< 2 time quantum */\r
324 #define CAN_BS2_3TQ                 ((uint32_t)CAN_BTR_TS2_1)                    /*!< 3 time quantum */\r
325 #define CAN_BS2_4TQ                 ((uint32_t)(CAN_BTR_TS2_1 | CAN_BTR_TS2_0))  /*!< 4 time quantum */\r
326 #define CAN_BS2_5TQ                 ((uint32_t)CAN_BTR_TS2_2)                    /*!< 5 time quantum */\r
327 #define CAN_BS2_6TQ                 ((uint32_t)(CAN_BTR_TS2_2 | CAN_BTR_TS2_0))  /*!< 6 time quantum */\r
328 #define CAN_BS2_7TQ                 ((uint32_t)(CAN_BTR_TS2_2 | CAN_BTR_TS2_1))  /*!< 7 time quantum */\r
329 #define CAN_BS2_8TQ                 ((uint32_t)CAN_BTR_TS2)                      /*!< 8 time quantum */\r
330 /**\r
331   * @}\r
332   */\r
333 \r
334 /** @defgroup CAN_filter_mode  CAN Filter Mode\r
335   * @{\r
336   */\r
337 #define CAN_FILTERMODE_IDMASK       ((uint8_t)0x00)  /*!< Identifier mask mode */\r
338 #define CAN_FILTERMODE_IDLIST       ((uint8_t)0x01)  /*!< Identifier list mode */\r
339 /**\r
340   * @}\r
341   */\r
342 \r
343 /** @defgroup CAN_filter_scale CAN Filter Scale\r
344   * @{\r
345   */\r
346 #define CAN_FILTERSCALE_16BIT       ((uint8_t)0x00)  /*!< Two 16-bit filters */\r
347 #define CAN_FILTERSCALE_32BIT       ((uint8_t)0x01)  /*!< One 32-bit filter  */\r
348 /**\r
349   * @}\r
350   */\r
351 \r
352 /** @defgroup CAN_filter_FIFO CAN Filter FIFO\r
353   * @{\r
354   */\r
355 #define CAN_FILTER_FIFO0             ((uint8_t)0x00)  /*!< Filter FIFO 0 assignment for filter x */\r
356 #define CAN_FILTER_FIFO1             ((uint8_t)0x01)  /*!< Filter FIFO 1 assignment for filter x */\r
357 \r
358 /**\r
359   * @}\r
360   */\r
361 \r
362 /** @defgroup CAN_Identifier_Type CAN Identifier Type\r
363   * @{\r
364   */\r
365 #define CAN_ID_STD             ((uint32_t)0x00000000)  /*!< Standard Id */\r
366 #define CAN_ID_EXT             ((uint32_t)0x00000004)  /*!< Extended Id */\r
367 /**\r
368   * @}\r
369   */\r
370 \r
371 /** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request\r
372   * @{\r
373   */\r
374 #define CAN_RTR_DATA                ((uint32_t)0x00000000)  /*!< Data frame */\r
375 #define CAN_RTR_REMOTE              ((uint32_t)0x00000002)  /*!< Remote frame */\r
376 /**\r
377   * @}\r
378   */\r
379 \r
380 /** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number Constants\r
381   * @{\r
382   */\r
383 #define CAN_FIFO0                   ((uint8_t)0x00)  /*!< CAN FIFO 0 used to receive */\r
384 #define CAN_FIFO1                   ((uint8_t)0x01)  /*!< CAN FIFO 1 used to receive */\r
385 /**\r
386   * @}\r
387   */\r
388 \r
389 /** @defgroup CAN_flags CAN Flags\r
390   * @{\r
391   */\r
392 /* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus()\r
393    and CAN_ClearFlag() functions. */\r
394 /* If the flag is 0x1XXXXXXX, it means that it can only be used with\r
395    CAN_GetFlagStatus() function.  */\r
396 \r
397 /* Transmit Flags */\r
398 #define CAN_FLAG_RQCP0             ((uint32_t)0x00000500)  /*!< Request MailBox0 flag         */\r
399 #define CAN_FLAG_RQCP1             ((uint32_t)0x00000508)  /*!< Request MailBox1 flag         */\r
400 #define CAN_FLAG_RQCP2             ((uint32_t)0x00000510)  /*!< Request MailBox2 flag         */\r
401 #define CAN_FLAG_TXOK0             ((uint32_t)0x00000501)  /*!< Transmission OK MailBox0 flag */\r
402 #define CAN_FLAG_TXOK1             ((uint32_t)0x00000509)  /*!< Transmission OK MailBox1 flag */\r
403 #define CAN_FLAG_TXOK2             ((uint32_t)0x00000511)  /*!< Transmission OK MailBox2 flag */\r
404 #define CAN_FLAG_TME0              ((uint32_t)0x0000051A)  /*!< Transmit mailbox 0 empty flag */\r
405 #define CAN_FLAG_TME1              ((uint32_t)0x0000051B)  /*!< Transmit mailbox 0 empty flag */\r
406 #define CAN_FLAG_TME2              ((uint32_t)0x0000051C)  /*!< Transmit mailbox 0 empty flag */\r
407 \r
408 /* Receive Flags */\r
409 #define CAN_FLAG_FF0               ((uint32_t)0x00000203)  /*!< FIFO 0 Full flag    */\r
410 #define CAN_FLAG_FOV0              ((uint32_t)0x00000204)  /*!< FIFO 0 Overrun flag */\r
411 \r
412 #define CAN_FLAG_FF1               ((uint32_t)0x00000403)  /*!< FIFO 1 Full flag    */\r
413 #define CAN_FLAG_FOV1              ((uint32_t)0x00000404)  /*!< FIFO 1 Overrun flag */\r
414 \r
415 /* Operating Mode Flags */\r
416 #define CAN_FLAG_WKU               ((uint32_t)0x00000103)  /*!< Wake up flag           */\r
417 #define CAN_FLAG_SLAK              ((uint32_t)0x00000101)  /*!< Sleep acknowledge flag */\r
418 #define CAN_FLAG_SLAKI             ((uint32_t)0x00000104)  /*!< Sleep acknowledge flag */\r
419 /* @note When SLAK interrupt is disabled (SLKIE=0), no polling on SLAKI is possible.\r
420          In this case the SLAK bit can be polled.*/\r
421 \r
422 /* Error Flags */\r
423 #define CAN_FLAG_EWG               ((uint32_t)0x00000300)  /*!< Error warning flag   */\r
424 #define CAN_FLAG_EPV               ((uint32_t)0x00000301)  /*!< Error passive flag   */\r
425 #define CAN_FLAG_BOF               ((uint32_t)0x00000302)  /*!< Bus-Off flag         */\r
426 /**\r
427   * @}\r
428   */\r
429 \r
430 /** @defgroup CAN_Interrupts CAN Interrupts\r
431   * @{\r
432   */\r
433 #define CAN_IT_TME                  ((uint32_t)CAN_IER_TMEIE)   /*!< Transmit mailbox empty interrupt */\r
434 \r
435 /* Receive Interrupts */\r
436 #define CAN_IT_FMP0                 ((uint32_t)CAN_IER_FMPIE0)  /*!< FIFO 0 message pending interrupt */\r
437 #define CAN_IT_FF0                  ((uint32_t)CAN_IER_FFIE0)   /*!< FIFO 0 full interrupt            */\r
438 #define CAN_IT_FOV0                 ((uint32_t)CAN_IER_FOVIE0)  /*!< FIFO 0 overrun interrupt         */\r
439 #define CAN_IT_FMP1                 ((uint32_t)CAN_IER_FMPIE1)  /*!< FIFO 1 message pending interrupt */\r
440 #define CAN_IT_FF1                  ((uint32_t)CAN_IER_FFIE1)   /*!< FIFO 1 full interrupt            */\r
441 #define CAN_IT_FOV1                 ((uint32_t)CAN_IER_FOVIE1)  /*!< FIFO 1 overrun interrupt         */\r
442 \r
443 /* Operating Mode Interrupts */\r
444 #define CAN_IT_WKU                  ((uint32_t)CAN_IER_WKUIE)  /*!< Wake-up interrupt           */\r
445 #define CAN_IT_SLK                  ((uint32_t)CAN_IER_SLKIE)  /*!< Sleep acknowledge interrupt */\r
446 \r
447 /* Error Interrupts */\r
448 #define CAN_IT_EWG                  ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt   */\r
449 #define CAN_IT_EPV                  ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt   */\r
450 #define CAN_IT_BOF                  ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt         */\r
451 #define CAN_IT_LEC                  ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */\r
452 #define CAN_IT_ERR                  ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt           */\r
453 /**\r
454   * @}\r
455   */\r
456 \r
457 /** @defgroup CAN_Mailboxes_Definition CAN Mailboxes Definition\r
458   * @{\r
459   */\r
460 #define CAN_TXMAILBOX_0   ((uint8_t)0x00)\r
461 #define CAN_TXMAILBOX_1   ((uint8_t)0x01)\r
462 #define CAN_TXMAILBOX_2   ((uint8_t)0x02)\r
463 /**\r
464   * @}\r
465   */\r
466 \r
467 /**\r
468   * @}\r
469   */\r
470 \r
471 /* Exported macro ------------------------------------------------------------*/\r
472 /** @defgroup CAN_Exported_Macros CAN Exported Macros\r
473   * @{\r
474   */\r
475 \r
476 /** @brief Reset CAN handle state\r
477   * @param  __HANDLE__: specifies the CAN Handle.\r
478   * @retval None\r
479   */\r
480 #define __HAL_CAN_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CAN_STATE_RESET)\r
481 \r
482 /**\r
483   * @brief  Enable the specified CAN interrupts.\r
484   * @param  __HANDLE__: CAN handle\r
485   * @param  __INTERRUPT__: CAN Interrupt\r
486   * @retval None\r
487   */\r
488 #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__))\r
489 \r
490 /**\r
491   * @brief  Disable the specified CAN interrupts.\r
492   * @param  __HANDLE__: CAN handle\r
493   * @param  __INTERRUPT__: CAN Interrupt\r
494   * @retval None\r
495   */\r
496 #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__))\r
497 \r
498 /**\r
499   * @brief  Return the number of pending received messages.\r
500   * @param  __HANDLE__: CAN handle\r
501   * @param  __FIFONUMBER__: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1.\r
502   * @retval The number of pending message.\r
503   */\r
504 #define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \\r
505 ((uint8_t)((__HANDLE__)->Instance->RF0R&(uint32_t)0x03)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&(uint32_t)0x03)))\r
506 \r
507 /** @brief  Check whether the specified CAN flag is set or not.\r
508   * @param  __HANDLE__: CAN Handle\r
509   * @param  __FLAG__: specifies the flag to check.\r
510   *         This parameter can be one of the following values:\r
511   *            @arg CAN_TSR_RQCP0: Request MailBox0 Flag\r
512   *            @arg CAN_TSR_RQCP1: Request MailBox1 Flag\r
513   *            @arg CAN_TSR_RQCP2: Request MailBox2 Flag\r
514   *            @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag\r
515   *            @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag\r
516   *            @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag\r
517   *            @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag\r
518   *            @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag\r
519   *            @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag\r
520   *            @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag\r
521   *            @arg CAN_FLAG_FF0: FIFO 0 Full Flag\r
522   *            @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag\r
523   *            @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag\r
524   *            @arg CAN_FLAG_FF1: FIFO 1 Full Flag\r
525   *            @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag\r
526   *            @arg CAN_FLAG_WKU: Wake up Flag\r
527   *            @arg CAN_FLAG_SLAK: Sleep acknowledge Flag\r
528   *            @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag\r
529   *            @arg CAN_FLAG_EWG: Error Warning Flag\r
530   *            @arg CAN_FLAG_EPV: Error Passive Flag\r
531   *            @arg CAN_FLAG_BOF: Bus-Off Flag\r
532   * @retval The new state of __FLAG__ (TRUE or FALSE).\r
533   */\r
534 #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \\r
535 ((((__FLAG__) >> 8) == 5)? ((((__HANDLE__)->Instance->TSR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
536  (((__FLAG__) >> 8) == 2)? ((((__HANDLE__)->Instance->RF0R) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
537  (((__FLAG__) >> 8) == 4)? ((((__HANDLE__)->Instance->RF1R) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
538  (((__FLAG__) >> 8) == 1)? ((((__HANDLE__)->Instance->MSR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
539  ((((__HANDLE__)->Instance->ESR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))))\r
540 \r
541 /** @brief  Clear the specified CAN pending flag.\r
542   * @param  __HANDLE__: CAN Handle.\r
543   * @param  __FLAG__: specifies the flag to check.\r
544   *         This parameter can be one of the following values:\r
545   *            @arg CAN_TSR_RQCP0: Request MailBox0 Flag\r
546   *            @arg CAN_TSR_RQCP1: Request MailBox1 Flag\r
547   *            @arg CAN_TSR_RQCP2: Request MailBox2 Flag\r
548   *            @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag\r
549   *            @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag\r
550   *            @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag\r
551   *            @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag\r
552   *            @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag\r
553   *            @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag\r
554   *            @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag\r
555   *            @arg CAN_FLAG_FF0: FIFO 0 Full Flag\r
556   *            @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag\r
557   *            @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag\r
558   *            @arg CAN_FLAG_FF1: FIFO 1 Full Flag\r
559   *            @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag\r
560   *            @arg CAN_FLAG_WKU: Wake up Flag\r
561   *            @arg CAN_FLAG_SLAK: Sleep acknowledge Flag\r
562   *            @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag\r
563   *            @arg CAN_FLAG_EWG: Error Warning Flag\r
564   *            @arg CAN_FLAG_EPV: Error Passive Flag\r
565   *            @arg CAN_FLAG_BOF: Bus-Off Flag\r
566   * @retval The new state of __FLAG__ (TRUE or FALSE).\r
567   */\r
568 #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \\r
569 ((((__FLAG__) >> 8) == 5)? (((__HANDLE__)->Instance->TSR) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
570  (((__FLAG__) >> 8) == 2)? (((__HANDLE__)->Instance->RF0R) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
571  (((__FLAG__) >> 8) == 4)? (((__HANDLE__)->Instance->RF1R) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
572  (((__FLAG__) >> 8) == 1)? (((__HANDLE__)->Instance->MSR) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
573  (((__HANDLE__)->Instance->ESR) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))))\r
574 \r
575 /** @brief  Check if the specified CAN interrupt source is enabled or disabled.\r
576   * @param  __HANDLE__: CAN Handle\r
577   * @param  __INTERRUPT__: specifies the CAN interrupt source to check.\r
578   *          This parameter can be one of the following values:\r
579   *             @arg CAN_IT_TME: Transmit mailbox empty interrupt enable\r
580   *             @arg CAN_IT_FMP0: FIFO0 message pending interrupt enable\r
581   *             @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable\r
582   * @retval The new state of __IT__ (TRUE or FALSE).\r
583   */\r
584 #define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)\r
585 \r
586 /**\r
587   * @brief  Check the transmission status of a CAN Frame.\r
588   * @param  __HANDLE__: CAN Handle\r
589   * @param  __TRANSMITMAILBOX__: the number of the mailbox that is used for transmission.\r
590   * @retval The new status of transmission  (TRUE or FALSE).\r
591   */\r
592 #define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\\r
593 (((__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)) :\\r
594  ((__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)) :\\r
595  ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2)))\r
596 \r
597 /**\r
598   * @brief  Release the specified receive FIFO.\r
599   * @param  __HANDLE__: CAN handle\r
600   * @param  __FIFONUMBER__: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1.\r
601   * @retval None\r
602   */\r
603 #define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \\r
604 ((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1))\r
605 \r
606 /**\r
607   * @brief  Cancel a transmit request.\r
608   * @param  __HANDLE__: CAN Handle\r
609   * @param  __TRANSMITMAILBOX__: the number of the mailbox that is used for transmission.\r
610   * @retval None\r
611   */\r
612 #define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\\r
613 (((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\\r
614  ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\\r
615  ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2))\r
616 \r
617 /**\r
618   * @brief  Enable or disable the DBG Freeze for CAN.\r
619   * @param  __HANDLE__: CAN Handle\r
620   * @param  __NEWSTATE__: new state of the CAN peripheral.\r
621   *          This parameter can be: ENABLE (CAN reception/transmission is frozen\r
622   *          during debug. Reception FIFOs can still be accessed/controlled normally)\r
623   *          or DISABLE (CAN is working during debug).\r
624   * @retval None\r
625   */\r
626 #define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \\r
627 ((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF))\r
628 \r
629 /**\r
630   * @}\r
631   */\r
632 \r
633 /* Exported functions --------------------------------------------------------*/\r
634 /** @addtogroup CAN_Exported_Functions\r
635   * @{\r
636   */\r
637 \r
638 /** @addtogroup CAN_Exported_Functions_Group1\r
639   * @{\r
640   */\r
641 /* Initialization/de-initialization functions ***********************************/\r
642 HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan);\r
643 HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig);\r
644 HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan);\r
645 void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan);\r
646 void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan);\r
647 /**\r
648   * @}\r
649   */\r
650 \r
651 /** @addtogroup CAN_Exported_Functions_Group2\r
652   * @{\r
653   */\r
654 /* I/O operation functions ******************************************************/\r
655 HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout);\r
656 HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan);\r
657 HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout);\r
658 HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber);\r
659 HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan);\r
660 HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan);\r
661 void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan);\r
662 void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan);\r
663 void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan);\r
664 void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan);\r
665 /**\r
666   * @}\r
667   */\r
668 \r
669 /** @addtogroup CAN_Exported_Functions_Group3\r
670   * @{\r
671   */\r
672 /* Peripheral State functions ***************************************************/\r
673 uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan);\r
674 HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan);\r
675 /**\r
676   * @}\r
677   */\r
678 \r
679 /**\r
680   * @}\r
681   */\r
682 \r
683 /* Private types -------------------------------------------------------------*/\r
684 /** @defgroup CAN_Private_Types CAN Private Types\r
685   * @{\r
686   */\r
687 \r
688 /**\r
689   * @}\r
690   */\r
691 \r
692 /* Private variables ---------------------------------------------------------*/\r
693 /** @defgroup CAN_Private_Variables CAN Private Variables\r
694   * @{\r
695   */\r
696 \r
697 /**\r
698   * @}\r
699   */ \r
700 \r
701 /* Private constants ---------------------------------------------------------*/\r
702 /** @defgroup CAN_Private_Constants CAN Private Constants\r
703   * @{\r
704   */\r
705 #define CAN_TXSTATUS_NOMAILBOX      ((uint8_t)0x04)  /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */\r
706 #define CAN_FLAG_MASK  ((uint32_t)0x000000FF)\r
707 /**\r
708   * @}\r
709   */\r
710 \r
711 /* Private macros ------------------------------------------------------------*/\r
712 /** @defgroup CAN_Private_Macros CAN Private Macros\r
713   * @{\r
714   */\r
715 #define IS_CAN_MODE(MODE) (((MODE) == CAN_MODE_NORMAL) || \\r
716                            ((MODE) == CAN_MODE_LOOPBACK)|| \\r
717                            ((MODE) == CAN_MODE_SILENT) || \\r
718                            ((MODE) == CAN_MODE_SILENT_LOOPBACK))\r
719 #define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \\r
720                          ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ))\r
721 #define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ)\r
722 #define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ)\r
723 #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024))\r
724 #define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27)\r
725 #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \\r
726                                   ((MODE) == CAN_FILTERMODE_IDLIST))\r
727 #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \\r
728                                     ((SCALE) == CAN_FILTERSCALE_32BIT))\r
729 #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \\r
730                                   ((FIFO) == CAN_FILTER_FIFO1))\r
731 #define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28)\r
732 \r
733 #define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02))\r
734 #define IS_CAN_STDID(STDID)   ((STDID) <= ((uint32_t)0x7FF))\r
735 #define IS_CAN_EXTID(EXTID)   ((EXTID) <= ((uint32_t)0x1FFFFFFF))\r
736 #define IS_CAN_DLC(DLC)       ((DLC) <= ((uint8_t)0x08))\r
737 \r
738 #define IS_CAN_IDTYPE(IDTYPE)  (((IDTYPE) == CAN_ID_STD) || \\r
739                                 ((IDTYPE) == CAN_ID_EXT))\r
740 #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE))\r
741 #define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1))\r
742 \r
743 #define IS_CAN_GET_FLAG(FLAG) (((FLAG) == CAN_FLAG_RQCP2) || ((FLAG) == CAN_FLAG_BOF)   || \\r
744                                ((FLAG) == CAN_FLAG_EPV)   || ((FLAG) == CAN_FLAG_EWG)   || \\r
745                                ((FLAG) == CAN_FLAG_WKU)   || ((FLAG) == CAN_FLAG_FOV0)  || \\r
746                                ((FLAG) == CAN_FLAG_FF0)   || ((FLAG) == CAN_FLAG_SLAK)  || \\r
747                                ((FLAG) == CAN_FLAG_FOV1)  || ((FLAG) == CAN_FLAG_FF1)   || \\r
748                                ((FLAG) == CAN_FLAG_RQCP1) || ((FLAG) == CAN_FLAG_RQCP0))\r
749                                \r
750 \r
751 #define IS_CAN_CLEAR_FLAG(FLAG)(((FLAG) == CAN_FLAG_SLAK)  || ((FLAG) == CAN_FLAG_RQCP2) || \\r
752                                 ((FLAG) == CAN_FLAG_RQCP1) || ((FLAG) == CAN_FLAG_RQCP0) || \\r
753                                 ((FLAG) == CAN_FLAG_FF0)   || ((FLAG) == CAN_FLAG_FOV0)  || \\r
754                                 ((FLAG) == CAN_FLAG_FF1)   || ((FLAG) == CAN_FLAG_FOV1)  || \\r
755                                 ((FLAG) == CAN_FLAG_WKU))\r
756 \r
757 #define IS_CAN_IT(IT)        (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0)  ||\\r
758                              ((IT) == CAN_IT_FF0)  || ((IT) == CAN_IT_FOV0)  ||\\r
759                              ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1)   ||\\r
760                              ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG)   ||\\r
761                              ((IT) == CAN_IT_EPV)  || ((IT) == CAN_IT_BOF)   ||\\r
762                              ((IT) == CAN_IT_LEC)  || ((IT) == CAN_IT_ERR)   ||\\r
763                              ((IT) == CAN_IT_WKU)  || ((IT) == CAN_IT_SLK))\r
764 \r
765 #define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0)    ||\\r
766                              ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1)    ||\\r
767                              ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG)    ||\\r
768                              ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF)    ||\\r
769                              ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR)    ||\\r
770                              ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK))\r
771 \r
772 /**\r
773   * @}\r
774   */\r
775 \r
776 /* Private functions ---------------------------------------------------------*/\r
777 /** @defgroup CAN_Private_Functions CAN Private Functions\r
778   * @{\r
779   */\r
780 \r
781 /**\r
782   * @}\r
783   */\r
784 /**\r
785   * @}\r
786   */\r
787 \r
788 /**\r
789   * @}\r
790   */\r
791 \r
792 #ifdef __cplusplus\r
793 }\r
794 #endif\r
795 \r
796 #endif /* __STM32F7xx_CAN_H */\r
797 \r
798 \r
799 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r