]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_STM32F7_STM32756G-EVAL/ST_Library/include/stm32f7xx_hal_can.h
Update version number ready for V8.2.1 release.
[freertos] / FreeRTOS / Demo / CORTEX_M7_STM32F7_STM32756G-EVAL / 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 V0.3.0\r
6   * @date    06-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 /* Legacy defines */\r
358 #define CAN_FilterFIFO0  CAN_FILTER_FIFO0\r
359 #define CAN_FilterFIFO1  CAN_FILTER_FIFO1\r
360 /**\r
361   * @}\r
362   */\r
363 \r
364 /** @defgroup CAN_Identifier_Type CAN Identifier Type\r
365   * @{\r
366   */\r
367 #define CAN_ID_STD             ((uint32_t)0x00000000)  /*!< Standard Id */\r
368 #define CAN_ID_EXT             ((uint32_t)0x00000004)  /*!< Extended Id */\r
369 /**\r
370   * @}\r
371   */\r
372 \r
373 /** @defgroup CAN_remote_transmission_request CAN Remote Transmission Request\r
374   * @{\r
375   */\r
376 #define CAN_RTR_DATA                ((uint32_t)0x00000000)  /*!< Data frame */\r
377 #define CAN_RTR_REMOTE              ((uint32_t)0x00000002)  /*!< Remote frame */\r
378 /**\r
379   * @}\r
380   */\r
381 \r
382 /** @defgroup CAN_receive_FIFO_number_constants CAN Receive FIFO Number Constants\r
383   * @{\r
384   */\r
385 #define CAN_FIFO0                   ((uint8_t)0x00)  /*!< CAN FIFO 0 used to receive */\r
386 #define CAN_FIFO1                   ((uint8_t)0x01)  /*!< CAN FIFO 1 used to receive */\r
387 /**\r
388   * @}\r
389   */\r
390 \r
391 /** @defgroup CAN_flags CAN Flags\r
392   * @{\r
393   */\r
394 /* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus()\r
395    and CAN_ClearFlag() functions. */\r
396 /* If the flag is 0x1XXXXXXX, it means that it can only be used with\r
397    CAN_GetFlagStatus() function.  */\r
398 \r
399 /* Transmit Flags */\r
400 #define CAN_FLAG_RQCP0             ((uint32_t)0x00000500)  /*!< Request MailBox0 flag         */\r
401 #define CAN_FLAG_RQCP1             ((uint32_t)0x00000508)  /*!< Request MailBox1 flag         */\r
402 #define CAN_FLAG_RQCP2             ((uint32_t)0x00000510)  /*!< Request MailBox2 flag         */\r
403 #define CAN_FLAG_TXOK0             ((uint32_t)0x00000501)  /*!< Transmission OK MailBox0 flag */\r
404 #define CAN_FLAG_TXOK1             ((uint32_t)0x00000509)  /*!< Transmission OK MailBox1 flag */\r
405 #define CAN_FLAG_TXOK2             ((uint32_t)0x00000511)  /*!< Transmission OK MailBox2 flag */\r
406 #define CAN_FLAG_TME0              ((uint32_t)0x0000051A)  /*!< Transmit mailbox 0 empty flag */\r
407 #define CAN_FLAG_TME1              ((uint32_t)0x0000051B)  /*!< Transmit mailbox 0 empty flag */\r
408 #define CAN_FLAG_TME2              ((uint32_t)0x0000051C)  /*!< Transmit mailbox 0 empty flag */\r
409 \r
410 /* Receive Flags */\r
411 #define CAN_FLAG_FF0               ((uint32_t)0x00000203)  /*!< FIFO 0 Full flag    */\r
412 #define CAN_FLAG_FOV0              ((uint32_t)0x00000204)  /*!< FIFO 0 Overrun flag */\r
413 \r
414 #define CAN_FLAG_FF1               ((uint32_t)0x00000403)  /*!< FIFO 1 Full flag    */\r
415 #define CAN_FLAG_FOV1              ((uint32_t)0x00000404)  /*!< FIFO 1 Overrun flag */\r
416 \r
417 /* Operating Mode Flags */\r
418 #define CAN_FLAG_WKU               ((uint32_t)0x00000103)  /*!< Wake up flag           */\r
419 #define CAN_FLAG_SLAK              ((uint32_t)0x00000101)  /*!< Sleep acknowledge flag */\r
420 #define CAN_FLAG_SLAKI             ((uint32_t)0x00000104)  /*!< Sleep acknowledge flag */\r
421 /* @note When SLAK interrupt is disabled (SLKIE=0), no polling on SLAKI is possible.\r
422          In this case the SLAK bit can be polled.*/\r
423 \r
424 /* Error Flags */\r
425 #define CAN_FLAG_EWG               ((uint32_t)0x00000300)  /*!< Error warning flag   */\r
426 #define CAN_FLAG_EPV               ((uint32_t)0x00000301)  /*!< Error passive flag   */\r
427 #define CAN_FLAG_BOF               ((uint32_t)0x00000302)  /*!< Bus-Off flag         */\r
428 /**\r
429   * @}\r
430   */\r
431 \r
432 /** @defgroup CAN_Interrupts CAN Interrupts\r
433   * @{\r
434   */\r
435 #define CAN_IT_TME                  ((uint32_t)CAN_IER_TMEIE)   /*!< Transmit mailbox empty interrupt */\r
436 \r
437 /* Receive Interrupts */\r
438 #define CAN_IT_FMP0                 ((uint32_t)CAN_IER_FMPIE0)  /*!< FIFO 0 message pending interrupt */\r
439 #define CAN_IT_FF0                  ((uint32_t)CAN_IER_FFIE0)   /*!< FIFO 0 full interrupt            */\r
440 #define CAN_IT_FOV0                 ((uint32_t)CAN_IER_FOVIE0)  /*!< FIFO 0 overrun interrupt         */\r
441 #define CAN_IT_FMP1                 ((uint32_t)CAN_IER_FMPIE1)  /*!< FIFO 1 message pending interrupt */\r
442 #define CAN_IT_FF1                  ((uint32_t)CAN_IER_FFIE1)   /*!< FIFO 1 full interrupt            */\r
443 #define CAN_IT_FOV1                 ((uint32_t)CAN_IER_FOVIE1)  /*!< FIFO 1 overrun interrupt         */\r
444 \r
445 /* Operating Mode Interrupts */\r
446 #define CAN_IT_WKU                  ((uint32_t)CAN_IER_WKUIE)  /*!< Wake-up interrupt           */\r
447 #define CAN_IT_SLK                  ((uint32_t)CAN_IER_SLKIE)  /*!< Sleep acknowledge interrupt */\r
448 \r
449 /* Error Interrupts */\r
450 #define CAN_IT_EWG                  ((uint32_t)CAN_IER_EWGIE) /*!< Error warning interrupt   */\r
451 #define CAN_IT_EPV                  ((uint32_t)CAN_IER_EPVIE) /*!< Error passive interrupt   */\r
452 #define CAN_IT_BOF                  ((uint32_t)CAN_IER_BOFIE) /*!< Bus-off interrupt         */\r
453 #define CAN_IT_LEC                  ((uint32_t)CAN_IER_LECIE) /*!< Last error code interrupt */\r
454 #define CAN_IT_ERR                  ((uint32_t)CAN_IER_ERRIE) /*!< Error Interrupt           */\r
455 \r
456 /* Flags named as Interrupts : kept only for FW compatibility */\r
457 #define CAN_IT_RQCP0   CAN_IT_TME\r
458 #define CAN_IT_RQCP1   CAN_IT_TME\r
459 #define CAN_IT_RQCP2   CAN_IT_TME\r
460 /**\r
461   * @}\r
462   */\r
463 \r
464 /** @defgroup CAN_Mailboxes_Definition CAN Mailboxes Definition\r
465   * @{\r
466   */\r
467 #define CAN_TXMAILBOX_0   ((uint8_t)0x00)\r
468 #define CAN_TXMAILBOX_1   ((uint8_t)0x01)\r
469 #define CAN_TXMAILBOX_2   ((uint8_t)0x02)\r
470 /**\r
471   * @}\r
472   */\r
473 \r
474 /**\r
475   * @}\r
476   */\r
477 \r
478 /* Exported macro ------------------------------------------------------------*/\r
479 /** @defgroup CAN_Exported_Macros CAN Exported Macros\r
480   * @{\r
481   */\r
482 \r
483 /** @brief Reset CAN handle state\r
484   * @param  __HANDLE__: specifies the CAN Handle.\r
485   * @retval None\r
486   */\r
487 #define __HAL_CAN_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_CAN_STATE_RESET)\r
488 \r
489 /**\r
490   * @brief  Enable the specified CAN interrupts.\r
491   * @param  __HANDLE__: CAN handle\r
492   * @param  __INTERRUPT__: CAN Interrupt\r
493   * @retval None\r
494   */\r
495 #define __HAL_CAN_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) |= (__INTERRUPT__))\r
496 \r
497 /**\r
498   * @brief  Disable the specified CAN interrupts.\r
499   * @param  __HANDLE__: CAN handle\r
500   * @param  __INTERRUPT__: CAN Interrupt\r
501   * @retval None\r
502   */\r
503 #define __HAL_CAN_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->IER) &= ~(__INTERRUPT__))\r
504 \r
505 /**\r
506   * @brief  Return the number of pending received messages.\r
507   * @param  __HANDLE__: CAN handle\r
508   * @param  __FIFONUMBER__: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1.\r
509   * @retval The number of pending message.\r
510   */\r
511 #define __HAL_CAN_MSG_PENDING(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \\r
512 ((uint8_t)((__HANDLE__)->Instance->RF0R&(uint32_t)0x03)) : ((uint8_t)((__HANDLE__)->Instance->RF1R&(uint32_t)0x03)))\r
513 \r
514 /** @brief  Check whether the specified CAN flag is set or not.\r
515   * @param  __HANDLE__: CAN Handle\r
516   * @param  __FLAG__: specifies the flag to check.\r
517   *         This parameter can be one of the following values:\r
518   *            @arg CAN_TSR_RQCP0: Request MailBox0 Flag\r
519   *            @arg CAN_TSR_RQCP1: Request MailBox1 Flag\r
520   *            @arg CAN_TSR_RQCP2: Request MailBox2 Flag\r
521   *            @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag\r
522   *            @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag\r
523   *            @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag\r
524   *            @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag\r
525   *            @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag\r
526   *            @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag\r
527   *            @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag\r
528   *            @arg CAN_FLAG_FF0: FIFO 0 Full Flag\r
529   *            @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag\r
530   *            @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag\r
531   *            @arg CAN_FLAG_FF1: FIFO 1 Full Flag\r
532   *            @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag\r
533   *            @arg CAN_FLAG_WKU: Wake up Flag\r
534   *            @arg CAN_FLAG_SLAK: Sleep acknowledge Flag\r
535   *            @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag\r
536   *            @arg CAN_FLAG_EWG: Error Warning Flag\r
537   *            @arg CAN_FLAG_EPV: Error Passive Flag\r
538   *            @arg CAN_FLAG_BOF: Bus-Off Flag\r
539   * @retval The new state of __FLAG__ (TRUE or FALSE).\r
540   */\r
541 #define __HAL_CAN_GET_FLAG(__HANDLE__, __FLAG__) \\r
542 ((((__FLAG__) >> 8) == 5)? ((((__HANDLE__)->Instance->TSR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
543  (((__FLAG__) >> 8) == 2)? ((((__HANDLE__)->Instance->RF0R) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
544  (((__FLAG__) >> 8) == 4)? ((((__HANDLE__)->Instance->RF1R) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
545  (((__FLAG__) >> 8) == 1)? ((((__HANDLE__)->Instance->MSR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
546  ((((__HANDLE__)->Instance->ESR) & (1 << ((__FLAG__) & CAN_FLAG_MASK))) == (1 << ((__FLAG__) & CAN_FLAG_MASK))))\r
547 \r
548 /** @brief  Clear the specified CAN pending flag.\r
549   * @param  __HANDLE__: CAN Handle.\r
550   * @param  __FLAG__: specifies the flag to check.\r
551   *         This parameter can be one of the following values:\r
552   *            @arg CAN_TSR_RQCP0: Request MailBox0 Flag\r
553   *            @arg CAN_TSR_RQCP1: Request MailBox1 Flag\r
554   *            @arg CAN_TSR_RQCP2: Request MailBox2 Flag\r
555   *            @arg CAN_FLAG_TXOK0: Transmission OK MailBox0 Flag\r
556   *            @arg CAN_FLAG_TXOK1: Transmission OK MailBox1 Flag\r
557   *            @arg CAN_FLAG_TXOK2: Transmission OK MailBox2 Flag\r
558   *            @arg CAN_FLAG_TME0: Transmit mailbox 0 empty Flag\r
559   *            @arg CAN_FLAG_TME1: Transmit mailbox 1 empty Flag\r
560   *            @arg CAN_FLAG_TME2: Transmit mailbox 2 empty Flag\r
561   *            @arg CAN_FLAG_FMP0: FIFO 0 Message Pending Flag\r
562   *            @arg CAN_FLAG_FF0: FIFO 0 Full Flag\r
563   *            @arg CAN_FLAG_FOV0: FIFO 0 Overrun Flag\r
564   *            @arg CAN_FLAG_FMP1: FIFO 1 Message Pending Flag\r
565   *            @arg CAN_FLAG_FF1: FIFO 1 Full Flag\r
566   *            @arg CAN_FLAG_FOV1: FIFO 1 Overrun Flag\r
567   *            @arg CAN_FLAG_WKU: Wake up Flag\r
568   *            @arg CAN_FLAG_SLAK: Sleep acknowledge Flag\r
569   *            @arg CAN_FLAG_SLAKI: Sleep acknowledge Flag\r
570   *            @arg CAN_FLAG_EWG: Error Warning Flag\r
571   *            @arg CAN_FLAG_EPV: Error Passive Flag\r
572   *            @arg CAN_FLAG_BOF: Bus-Off Flag\r
573   * @retval The new state of __FLAG__ (TRUE or FALSE).\r
574   */\r
575 #define __HAL_CAN_CLEAR_FLAG(__HANDLE__, __FLAG__) \\r
576 ((((__FLAG__) >> 8) == 5)? (((__HANDLE__)->Instance->TSR) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
577  (((__FLAG__) >> 8) == 2)? (((__HANDLE__)->Instance->RF0R) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
578  (((__FLAG__) >> 8) == 4)? (((__HANDLE__)->Instance->RF1R) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
579  (((__FLAG__) >> 8) == 1)? (((__HANDLE__)->Instance->MSR) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))): \\r
580  (((__HANDLE__)->Instance->ESR) = ~((uint32_t)1 << ((__FLAG__) & CAN_FLAG_MASK))))\r
581 \r
582 /** @brief  Check if the specified CAN interrupt source is enabled or disabled.\r
583   * @param  __HANDLE__: CAN Handle\r
584   * @param  __INTERRUPT__: specifies the CAN interrupt source to check.\r
585   *          This parameter can be one of the following values:\r
586   *             @arg CAN_IT_TME: Transmit mailbox empty interrupt enable\r
587   *             @arg CAN_IT_FMP0: FIFO0 message pending interrupt enable\r
588   *             @arg CAN_IT_FMP1: FIFO1 message pending interrupt enable\r
589   * @retval The new state of __IT__ (TRUE or FALSE).\r
590   */\r
591 #define __HAL_CAN_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)\r
592 \r
593 /**\r
594   * @brief  Check the transmission status of a CAN Frame.\r
595   * @param  __HANDLE__: CAN Handle\r
596   * @param  __TRANSMITMAILBOX__: the number of the mailbox that is used for transmission.\r
597   * @retval The new status of transmission  (TRUE or FALSE).\r
598   */\r
599 #define __HAL_CAN_TRANSMIT_STATUS(__HANDLE__, __TRANSMITMAILBOX__)\\r
600 (((__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
601  ((__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
602  ((((__HANDLE__)->Instance->TSR) & (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2)) == (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2)))\r
603 \r
604 /**\r
605   * @brief  Release the specified receive FIFO.\r
606   * @param  __HANDLE__: CAN handle\r
607   * @param  __FIFONUMBER__: Receive FIFO number, CAN_FIFO0 or CAN_FIFO1.\r
608   * @retval None\r
609   */\r
610 #define __HAL_CAN_FIFO_RELEASE(__HANDLE__, __FIFONUMBER__) (((__FIFONUMBER__) == CAN_FIFO0)? \\r
611 ((__HANDLE__)->Instance->RF0R |= CAN_RF0R_RFOM0) : ((__HANDLE__)->Instance->RF1R |= CAN_RF1R_RFOM1))\r
612 \r
613 /**\r
614   * @brief  Cancel a transmit request.\r
615   * @param  __HANDLE__: CAN Handle\r
616   * @param  __TRANSMITMAILBOX__: the number of the mailbox that is used for transmission.\r
617   * @retval None\r
618   */\r
619 #define __HAL_CAN_CANCEL_TRANSMIT(__HANDLE__, __TRANSMITMAILBOX__)\\r
620 (((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_0)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ0) :\\r
621  ((__TRANSMITMAILBOX__) == CAN_TXMAILBOX_1)? ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ1) :\\r
622  ((__HANDLE__)->Instance->TSR |= CAN_TSR_ABRQ2))\r
623 \r
624 /**\r
625   * @brief  Enable or disable the DBG Freeze for CAN.\r
626   * @param  __HANDLE__: CAN Handle\r
627   * @param  __NEWSTATE__: new state of the CAN peripheral.\r
628   *          This parameter can be: ENABLE (CAN reception/transmission is frozen\r
629   *          during debug. Reception FIFOs can still be accessed/controlled normally)\r
630   *          or DISABLE (CAN is working during debug).\r
631   * @retval None\r
632   */\r
633 #define __HAL_CAN_DBG_FREEZE(__HANDLE__, __NEWSTATE__) (((__NEWSTATE__) == ENABLE)? \\r
634 ((__HANDLE__)->Instance->MCR |= CAN_MCR_DBF) : ((__HANDLE__)->Instance->MCR &= ~CAN_MCR_DBF))\r
635 \r
636 /**\r
637   * @}\r
638   */\r
639 \r
640 /* Exported functions --------------------------------------------------------*/\r
641 /** @addtogroup CAN_Exported_Functions\r
642   * @{\r
643   */\r
644 \r
645 /** @addtogroup CAN_Exported_Functions_Group1\r
646   * @{\r
647   */\r
648 /* Initialization/de-initialization functions ***********************************/\r
649 HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef* hcan);\r
650 HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef* hcan, CAN_FilterConfTypeDef* sFilterConfig);\r
651 HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef* hcan);\r
652 void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan);\r
653 void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan);\r
654 /**\r
655   * @}\r
656   */\r
657 \r
658 /** @addtogroup CAN_Exported_Functions_Group2\r
659   * @{\r
660   */\r
661 /* I/O operation functions ******************************************************/\r
662 HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef *hcan, uint32_t Timeout);\r
663 HAL_StatusTypeDef HAL_CAN_Transmit_IT(CAN_HandleTypeDef *hcan);\r
664 HAL_StatusTypeDef HAL_CAN_Receive(CAN_HandleTypeDef *hcan, uint8_t FIFONumber, uint32_t Timeout);\r
665 HAL_StatusTypeDef HAL_CAN_Receive_IT(CAN_HandleTypeDef *hcan, uint8_t FIFONumber);\r
666 HAL_StatusTypeDef HAL_CAN_Sleep(CAN_HandleTypeDef *hcan);\r
667 HAL_StatusTypeDef HAL_CAN_WakeUp(CAN_HandleTypeDef *hcan);\r
668 void HAL_CAN_IRQHandler(CAN_HandleTypeDef* hcan);\r
669 void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan);\r
670 void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan);\r
671 void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan);\r
672 /**\r
673   * @}\r
674   */\r
675 \r
676 /** @addtogroup CAN_Exported_Functions_Group3\r
677   * @{\r
678   */\r
679 /* Peripheral State functions ***************************************************/\r
680 uint32_t HAL_CAN_GetError(CAN_HandleTypeDef *hcan);\r
681 HAL_CAN_StateTypeDef HAL_CAN_GetState(CAN_HandleTypeDef* hcan);\r
682 /**\r
683   * @}\r
684   */\r
685 \r
686 /**\r
687   * @}\r
688   */\r
689 \r
690 /* Private types -------------------------------------------------------------*/\r
691 /** @defgroup CAN_Private_Types CAN Private Types\r
692   * @{\r
693   */\r
694 \r
695 /**\r
696   * @}\r
697   */\r
698 \r
699 /* Private variables ---------------------------------------------------------*/\r
700 /** @defgroup CAN_Private_Variables CAN Private Variables\r
701   * @{\r
702   */\r
703 \r
704 /**\r
705   * @}\r
706   */ \r
707 \r
708 /* Private constants ---------------------------------------------------------*/\r
709 /** @defgroup CAN_Private_Constants CAN Private Constants\r
710   * @{\r
711   */\r
712 #define CAN_TXSTATUS_FAILED         ((uint8_t)0x00)  /*!< CAN transmission failed */\r
713 #define CAN_TXSTATUS_OK             ((uint8_t)0x01)  /*!< CAN transmission succeeded */\r
714 #define CAN_TXSTATUS_PENDING        ((uint8_t)0x02)  /*!< CAN transmission pending */\r
715 #define CAN_TXSTATUS_NOMAILBOX      ((uint8_t)0x04)  /*!< CAN cell did not provide CAN_TxStatus_NoMailBox */\r
716 #define CAN_FLAG_MASK  ((uint32_t)0x000000FF)\r
717 /**\r
718   * @}\r
719   */\r
720 \r
721 /* Private macros ------------------------------------------------------------*/\r
722 /** @defgroup CAN_Private_Macros CAN Private Macros\r
723   * @{\r
724   */\r
725 #define IS_CAN_MODE(MODE) (((MODE) == CAN_MODE_NORMAL) || \\r
726                            ((MODE) == CAN_MODE_LOOPBACK)|| \\r
727                            ((MODE) == CAN_MODE_SILENT) || \\r
728                            ((MODE) == CAN_MODE_SILENT_LOOPBACK))\r
729 #define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1TQ) || ((SJW) == CAN_SJW_2TQ)|| \\r
730                          ((SJW) == CAN_SJW_3TQ) || ((SJW) == CAN_SJW_4TQ))\r
731 #define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16TQ)\r
732 #define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8TQ)\r
733 #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024))\r
734 #define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27)\r
735 #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FILTERMODE_IDMASK) || \\r
736                                   ((MODE) == CAN_FILTERMODE_IDLIST))\r
737 #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FILTERSCALE_16BIT) || \\r
738                                     ((SCALE) == CAN_FILTERSCALE_32BIT))\r
739 #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FILTER_FIFO0) || \\r
740                                   ((FIFO) == CAN_FILTER_FIFO1))\r
741 #define IS_CAN_BANKNUMBER(BANKNUMBER) ((BANKNUMBER) <= 28)\r
742 \r
743 #define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02))\r
744 #define IS_CAN_STDID(STDID)   ((STDID) <= ((uint32_t)0x7FF))\r
745 #define IS_CAN_EXTID(EXTID)   ((EXTID) <= ((uint32_t)0x1FFFFFFF))\r
746 #define IS_CAN_DLC(DLC)       ((DLC) <= ((uint8_t)0x08))\r
747 \r
748 #define IS_CAN_IDTYPE(IDTYPE)  (((IDTYPE) == CAN_ID_STD) || \\r
749                                 ((IDTYPE) == CAN_ID_EXT))\r
750 #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_DATA) || ((RTR) == CAN_RTR_REMOTE))\r
751 #define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1))\r
752 \r
753 #define IS_CAN_GET_FLAG(FLAG) (((FLAG) == CAN_FLAG_RQCP2) || ((FLAG) == CAN_FLAG_BOF)   || \\r
754                                ((FLAG) == CAN_FLAG_EPV)   || ((FLAG) == CAN_FLAG_EWG)   || \\r
755                                ((FLAG) == CAN_FLAG_WKU)   || ((FLAG) == CAN_FLAG_FOV0)  || \\r
756                                ((FLAG) == CAN_FLAG_FF0)   || ((FLAG) == CAN_FLAG_SLAK)  || \\r
757                                ((FLAG) == CAN_FLAG_FOV1)  || ((FLAG) == CAN_FLAG_FF1)   || \\r
758                                ((FLAG) == CAN_FLAG_RQCP1) || ((FLAG) == CAN_FLAG_RQCP0))\r
759                                \r
760 \r
761 #define IS_CAN_CLEAR_FLAG(FLAG)(((FLAG) == CAN_FLAG_SLAK)  || ((FLAG) == CAN_FLAG_RQCP2) || \\r
762                                 ((FLAG) == CAN_FLAG_RQCP1) || ((FLAG) == CAN_FLAG_RQCP0) || \\r
763                                 ((FLAG) == CAN_FLAG_FF0)   || ((FLAG) == CAN_FLAG_FOV0)  || \\r
764                                 ((FLAG) == CAN_FLAG_FF1)   || ((FLAG) == CAN_FLAG_FOV1)  || \\r
765                                 ((FLAG) == CAN_FLAG_WKU))\r
766 \r
767 #define IS_CAN_IT(IT)        (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0)  ||\\r
768                              ((IT) == CAN_IT_FF0)  || ((IT) == CAN_IT_FOV0)  ||\\r
769                              ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1)   ||\\r
770                              ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG)   ||\\r
771                              ((IT) == CAN_IT_EPV)  || ((IT) == CAN_IT_BOF)   ||\\r
772                              ((IT) == CAN_IT_LEC)  || ((IT) == CAN_IT_ERR)   ||\\r
773                              ((IT) == CAN_IT_WKU)  || ((IT) == CAN_IT_SLK))\r
774 \r
775 #define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0)    ||\\r
776                              ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1)    ||\\r
777                              ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG)    ||\\r
778                              ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF)    ||\\r
779                              ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR)    ||\\r
780                              ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK))\r
781 \r
782 /**\r
783   * @}\r
784   */\r
785 \r
786 /* Private functions ---------------------------------------------------------*/\r
787 /** @defgroup CAN_Private_Functions CAN Private Functions\r
788   * @{\r
789   */\r
790 \r
791 /**\r
792   * @}\r
793   */\r
794 /**\r
795   * @}\r
796   */\r
797 \r
798 /**\r
799   * @}\r
800   */\r
801 \r
802 #ifdef __cplusplus\r
803 }\r
804 #endif\r
805 \r
806 #endif /* __STM32F7xx_CAN_H */\r
807 \r
808 \r
809 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r