]> git.sur5r.net Git - freertos/blob - Demo/CORTEX_M4F_STM32F407ZG-SK/Libraries/STM32F4xx_StdPeriph_Driver/inc/stm32f4xx_can.h
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / CORTEX_M4F_STM32F407ZG-SK / Libraries / STM32F4xx_StdPeriph_Driver / inc / stm32f4xx_can.h
1 /**\r
2   ******************************************************************************\r
3   * @file    stm32f4xx_can.h\r
4   * @author  MCD Application Team\r
5   * @version V1.0.0\r
6   * @date    30-September-2011\r
7   * @brief   This file contains all the functions prototypes for the CAN firmware \r
8   *          library.\r
9   ******************************************************************************\r
10   * @attention\r
11   *\r
12   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
13   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE\r
14   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY\r
15   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING\r
16   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE\r
17   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
18   *\r
19   * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>\r
20   ******************************************************************************\r
21   */\r
22 \r
23 /* Define to prevent recursive inclusion -------------------------------------*/\r
24 #ifndef __STM32F4xx_CAN_H\r
25 #define __STM32F4xx_CAN_H\r
26 \r
27 #ifdef __cplusplus\r
28  extern "C" {\r
29 #endif\r
30 \r
31 /* Includes ------------------------------------------------------------------*/\r
32 #include "stm32f4xx.h"\r
33 \r
34 /** @addtogroup STM32F4xx_StdPeriph_Driver\r
35   * @{\r
36   */\r
37 \r
38 /** @addtogroup CAN\r
39   * @{\r
40   */\r
41 \r
42 /* Exported types ------------------------------------------------------------*/\r
43 \r
44 #define IS_CAN_ALL_PERIPH(PERIPH) (((PERIPH) == CAN1) || \\r
45                                    ((PERIPH) == CAN2))\r
46 \r
47 /** \r
48   * @brief  CAN init structure definition\r
49   */\r
50 typedef struct\r
51 {\r
52   uint16_t CAN_Prescaler;   /*!< Specifies the length of a time quantum. \r
53                                  It ranges from 1 to 1024. */\r
54   \r
55   uint8_t CAN_Mode;         /*!< Specifies the CAN operating mode.\r
56                                  This parameter can be a value of @ref CAN_operating_mode */\r
57 \r
58   uint8_t CAN_SJW;          /*!< Specifies the maximum number of time quanta \r
59                                  the CAN hardware is allowed to lengthen or \r
60                                  shorten a bit to perform resynchronization.\r
61                                  This parameter can be a value of @ref CAN_synchronisation_jump_width */\r
62 \r
63   uint8_t CAN_BS1;          /*!< Specifies the number of time quanta in Bit \r
64                                  Segment 1. This parameter can be a value of \r
65                                  @ref CAN_time_quantum_in_bit_segment_1 */\r
66 \r
67   uint8_t CAN_BS2;          /*!< Specifies the number of time quanta in Bit Segment 2.\r
68                                  This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */\r
69   \r
70   FunctionalState CAN_TTCM; /*!< Enable or disable the time triggered communication mode.\r
71                                 This parameter can be set either to ENABLE or DISABLE. */\r
72   \r
73   FunctionalState CAN_ABOM;  /*!< Enable or disable the automatic bus-off management.\r
74                                   This parameter can be set either to ENABLE or DISABLE. */\r
75 \r
76   FunctionalState CAN_AWUM;  /*!< Enable or disable the automatic wake-up mode. \r
77                                   This parameter can be set either to ENABLE or DISABLE. */\r
78 \r
79   FunctionalState CAN_NART;  /*!< Enable or disable the non-automatic retransmission mode.\r
80                                   This parameter can be set either to ENABLE or DISABLE. */\r
81 \r
82   FunctionalState CAN_RFLM;  /*!< Enable or disable the Receive FIFO Locked mode.\r
83                                   This parameter can be set either to ENABLE or DISABLE. */\r
84 \r
85   FunctionalState CAN_TXFP;  /*!< Enable or disable the transmit FIFO priority.\r
86                                   This parameter can be set either to ENABLE or DISABLE. */\r
87 } CAN_InitTypeDef;\r
88 \r
89 /** \r
90   * @brief  CAN filter init structure definition\r
91   */\r
92 typedef struct\r
93 {\r
94   uint16_t CAN_FilterIdHigh;         /*!< Specifies the filter identification number (MSBs for a 32-bit\r
95                                               configuration, first one for a 16-bit configuration).\r
96                                               This parameter can be a value between 0x0000 and 0xFFFF */\r
97 \r
98   uint16_t CAN_FilterIdLow;          /*!< Specifies the filter identification number (LSBs for a 32-bit\r
99                                               configuration, second one for a 16-bit configuration).\r
100                                               This parameter can be a value between 0x0000 and 0xFFFF */\r
101 \r
102   uint16_t CAN_FilterMaskIdHigh;     /*!< Specifies the filter mask number or identification number,\r
103                                               according to the mode (MSBs for a 32-bit configuration,\r
104                                               first one for a 16-bit configuration).\r
105                                               This parameter can be a value between 0x0000 and 0xFFFF */\r
106 \r
107   uint16_t CAN_FilterMaskIdLow;      /*!< Specifies the filter mask number or identification number,\r
108                                               according to the mode (LSBs for a 32-bit configuration,\r
109                                               second one for a 16-bit configuration).\r
110                                               This parameter can be a value between 0x0000 and 0xFFFF */\r
111 \r
112   uint16_t CAN_FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter.\r
113                                               This parameter can be a value of @ref CAN_filter_FIFO */\r
114   \r
115   uint8_t CAN_FilterNumber;          /*!< Specifies the filter which will be initialized. It ranges from 0 to 13. */\r
116 \r
117   uint8_t CAN_FilterMode;            /*!< Specifies the filter mode to be initialized.\r
118                                               This parameter can be a value of @ref CAN_filter_mode */\r
119 \r
120   uint8_t CAN_FilterScale;           /*!< Specifies the filter scale.\r
121                                               This parameter can be a value of @ref CAN_filter_scale */\r
122 \r
123   FunctionalState CAN_FilterActivation; /*!< Enable or disable the filter.\r
124                                               This parameter can be set either to ENABLE or DISABLE. */\r
125 } CAN_FilterInitTypeDef;\r
126 \r
127 /** \r
128   * @brief  CAN Tx message structure definition  \r
129   */\r
130 typedef struct\r
131 {\r
132   uint32_t StdId;  /*!< Specifies the standard identifier.\r
133                         This parameter can be a value between 0 to 0x7FF. */\r
134 \r
135   uint32_t ExtId;  /*!< Specifies the extended identifier.\r
136                         This parameter can be a value between 0 to 0x1FFFFFFF. */\r
137 \r
138   uint8_t IDE;     /*!< Specifies the type of identifier for the message that \r
139                         will be transmitted. This parameter can be a value \r
140                         of @ref CAN_identifier_type */\r
141 \r
142   uint8_t RTR;     /*!< Specifies the type of frame for the message that will \r
143                         be transmitted. This parameter can be a value of \r
144                         @ref CAN_remote_transmission_request */\r
145 \r
146   uint8_t DLC;     /*!< Specifies the length of the frame that will be \r
147                         transmitted. This parameter can be a value between \r
148                         0 to 8 */\r
149 \r
150   uint8_t Data[8]; /*!< Contains the data to be transmitted. It ranges from 0 \r
151                         to 0xFF. */\r
152 } CanTxMsg;\r
153 \r
154 /** \r
155   * @brief  CAN Rx message structure definition  \r
156   */\r
157 typedef struct\r
158 {\r
159   uint32_t StdId;  /*!< Specifies the standard identifier.\r
160                         This parameter can be a value between 0 to 0x7FF. */\r
161 \r
162   uint32_t ExtId;  /*!< Specifies the extended identifier.\r
163                         This parameter can be a value between 0 to 0x1FFFFFFF. */\r
164 \r
165   uint8_t IDE;     /*!< Specifies the type of identifier for the message that \r
166                         will be received. This parameter can be a value of \r
167                         @ref CAN_identifier_type */\r
168 \r
169   uint8_t RTR;     /*!< Specifies the type of frame for the received message.\r
170                         This parameter can be a value of \r
171                         @ref CAN_remote_transmission_request */\r
172 \r
173   uint8_t DLC;     /*!< Specifies the length of the frame that will be received.\r
174                         This parameter can be a value between 0 to 8 */\r
175 \r
176   uint8_t Data[8]; /*!< Contains the data to be received. It ranges from 0 to \r
177                         0xFF. */\r
178 \r
179   uint8_t FMI;     /*!< Specifies the index of the filter the message stored in \r
180                         the mailbox passes through. This parameter can be a \r
181                         value between 0 to 0xFF */\r
182 } CanRxMsg;\r
183 \r
184 /* Exported constants --------------------------------------------------------*/\r
185 \r
186 /** @defgroup CAN_Exported_Constants\r
187   * @{\r
188   */\r
189 \r
190 /** @defgroup CAN_InitStatus \r
191   * @{\r
192   */\r
193 \r
194 #define CAN_InitStatus_Failed              ((uint8_t)0x00) /*!< CAN initialization failed */\r
195 #define CAN_InitStatus_Success             ((uint8_t)0x01) /*!< CAN initialization OK */\r
196 \r
197 \r
198 /* Legacy defines */\r
199 #define CANINITFAILED    CAN_InitStatus_Failed\r
200 #define CANINITOK        CAN_InitStatus_Success\r
201 /**\r
202   * @}\r
203   */\r
204 \r
205 /** @defgroup CAN_operating_mode \r
206   * @{\r
207   */\r
208 \r
209 #define CAN_Mode_Normal             ((uint8_t)0x00)  /*!< normal mode */\r
210 #define CAN_Mode_LoopBack           ((uint8_t)0x01)  /*!< loopback mode */\r
211 #define CAN_Mode_Silent             ((uint8_t)0x02)  /*!< silent mode */\r
212 #define CAN_Mode_Silent_LoopBack    ((uint8_t)0x03)  /*!< loopback combined with silent mode */\r
213 \r
214 #define IS_CAN_MODE(MODE) (((MODE) == CAN_Mode_Normal) || \\r
215                            ((MODE) == CAN_Mode_LoopBack)|| \\r
216                            ((MODE) == CAN_Mode_Silent) || \\r
217                            ((MODE) == CAN_Mode_Silent_LoopBack))\r
218 /**\r
219   * @}\r
220   */\r
221 \r
222 \r
223  /**\r
224   * @defgroup CAN_operating_mode \r
225   * @{\r
226   */  \r
227 #define CAN_OperatingMode_Initialization  ((uint8_t)0x00) /*!< Initialization mode */\r
228 #define CAN_OperatingMode_Normal          ((uint8_t)0x01) /*!< Normal mode */\r
229 #define CAN_OperatingMode_Sleep           ((uint8_t)0x02) /*!< sleep mode */\r
230 \r
231 \r
232 #define IS_CAN_OPERATING_MODE(MODE) (((MODE) == CAN_OperatingMode_Initialization) ||\\r
233                                     ((MODE) == CAN_OperatingMode_Normal)|| \\r
234                                                                                                                                                 ((MODE) == CAN_OperatingMode_Sleep))\r
235 /**\r
236   * @}\r
237   */\r
238   \r
239 /**\r
240   * @defgroup CAN_operating_mode_status\r
241   * @{\r
242   */  \r
243 \r
244 #define CAN_ModeStatus_Failed    ((uint8_t)0x00)                /*!< CAN entering the specific mode failed */\r
245 #define CAN_ModeStatus_Success   ((uint8_t)!CAN_ModeStatus_Failed)   /*!< CAN entering the specific mode Succeed */\r
246 /**\r
247   * @}\r
248   */\r
249 \r
250 /** @defgroup CAN_synchronisation_jump_width \r
251   * @{\r
252   */\r
253 #define CAN_SJW_1tq                 ((uint8_t)0x00)  /*!< 1 time quantum */\r
254 #define CAN_SJW_2tq                 ((uint8_t)0x01)  /*!< 2 time quantum */\r
255 #define CAN_SJW_3tq                 ((uint8_t)0x02)  /*!< 3 time quantum */\r
256 #define CAN_SJW_4tq                 ((uint8_t)0x03)  /*!< 4 time quantum */\r
257 \r
258 #define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1tq) || ((SJW) == CAN_SJW_2tq)|| \\r
259                          ((SJW) == CAN_SJW_3tq) || ((SJW) == CAN_SJW_4tq))\r
260 /**\r
261   * @}\r
262   */\r
263 \r
264 /** @defgroup CAN_time_quantum_in_bit_segment_1 \r
265   * @{\r
266   */\r
267 #define CAN_BS1_1tq                 ((uint8_t)0x00)  /*!< 1 time quantum */\r
268 #define CAN_BS1_2tq                 ((uint8_t)0x01)  /*!< 2 time quantum */\r
269 #define CAN_BS1_3tq                 ((uint8_t)0x02)  /*!< 3 time quantum */\r
270 #define CAN_BS1_4tq                 ((uint8_t)0x03)  /*!< 4 time quantum */\r
271 #define CAN_BS1_5tq                 ((uint8_t)0x04)  /*!< 5 time quantum */\r
272 #define CAN_BS1_6tq                 ((uint8_t)0x05)  /*!< 6 time quantum */\r
273 #define CAN_BS1_7tq                 ((uint8_t)0x06)  /*!< 7 time quantum */\r
274 #define CAN_BS1_8tq                 ((uint8_t)0x07)  /*!< 8 time quantum */\r
275 #define CAN_BS1_9tq                 ((uint8_t)0x08)  /*!< 9 time quantum */\r
276 #define CAN_BS1_10tq                ((uint8_t)0x09)  /*!< 10 time quantum */\r
277 #define CAN_BS1_11tq                ((uint8_t)0x0A)  /*!< 11 time quantum */\r
278 #define CAN_BS1_12tq                ((uint8_t)0x0B)  /*!< 12 time quantum */\r
279 #define CAN_BS1_13tq                ((uint8_t)0x0C)  /*!< 13 time quantum */\r
280 #define CAN_BS1_14tq                ((uint8_t)0x0D)  /*!< 14 time quantum */\r
281 #define CAN_BS1_15tq                ((uint8_t)0x0E)  /*!< 15 time quantum */\r
282 #define CAN_BS1_16tq                ((uint8_t)0x0F)  /*!< 16 time quantum */\r
283 \r
284 #define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16tq)\r
285 /**\r
286   * @}\r
287   */\r
288 \r
289 /** @defgroup CAN_time_quantum_in_bit_segment_2 \r
290   * @{\r
291   */\r
292 #define CAN_BS2_1tq                 ((uint8_t)0x00)  /*!< 1 time quantum */\r
293 #define CAN_BS2_2tq                 ((uint8_t)0x01)  /*!< 2 time quantum */\r
294 #define CAN_BS2_3tq                 ((uint8_t)0x02)  /*!< 3 time quantum */\r
295 #define CAN_BS2_4tq                 ((uint8_t)0x03)  /*!< 4 time quantum */\r
296 #define CAN_BS2_5tq                 ((uint8_t)0x04)  /*!< 5 time quantum */\r
297 #define CAN_BS2_6tq                 ((uint8_t)0x05)  /*!< 6 time quantum */\r
298 #define CAN_BS2_7tq                 ((uint8_t)0x06)  /*!< 7 time quantum */\r
299 #define CAN_BS2_8tq                 ((uint8_t)0x07)  /*!< 8 time quantum */\r
300 \r
301 #define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8tq)\r
302 /**\r
303   * @}\r
304   */\r
305 \r
306 /** @defgroup CAN_clock_prescaler \r
307   * @{\r
308   */\r
309 #define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024))\r
310 /**\r
311   * @}\r
312   */\r
313 \r
314 /** @defgroup CAN_filter_number \r
315   * @{\r
316   */\r
317 #define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27)\r
318 /**\r
319   * @}\r
320   */\r
321 \r
322 /** @defgroup CAN_filter_mode \r
323   * @{\r
324   */\r
325 #define CAN_FilterMode_IdMask       ((uint8_t)0x00)  /*!< identifier/mask mode */\r
326 #define CAN_FilterMode_IdList       ((uint8_t)0x01)  /*!< identifier list mode */\r
327 \r
328 #define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FilterMode_IdMask) || \\r
329                                   ((MODE) == CAN_FilterMode_IdList))\r
330 /**\r
331   * @}\r
332   */\r
333 \r
334 /** @defgroup CAN_filter_scale \r
335   * @{\r
336   */\r
337 #define CAN_FilterScale_16bit       ((uint8_t)0x00) /*!< Two 16-bit filters */\r
338 #define CAN_FilterScale_32bit       ((uint8_t)0x01) /*!< One 32-bit filter */\r
339 \r
340 #define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FilterScale_16bit) || \\r
341                                     ((SCALE) == CAN_FilterScale_32bit))\r
342 /**\r
343   * @}\r
344   */\r
345 \r
346 /** @defgroup CAN_filter_FIFO\r
347   * @{\r
348   */\r
349 #define CAN_Filter_FIFO0             ((uint8_t)0x00)  /*!< Filter FIFO 0 assignment for filter x */\r
350 #define CAN_Filter_FIFO1             ((uint8_t)0x01)  /*!< Filter FIFO 1 assignment for filter x */\r
351 #define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FilterFIFO0) || \\r
352                                   ((FIFO) == CAN_FilterFIFO1))\r
353 \r
354 /* Legacy defines */\r
355 #define CAN_FilterFIFO0  CAN_Filter_FIFO0\r
356 #define CAN_FilterFIFO1  CAN_Filter_FIFO1\r
357 /**\r
358   * @}\r
359   */\r
360 \r
361 /** @defgroup CAN_Start_bank_filter_for_slave_CAN \r
362   * @{\r
363   */\r
364 #define IS_CAN_BANKNUMBER(BANKNUMBER) (((BANKNUMBER) >= 1) && ((BANKNUMBER) <= 27))\r
365 /**\r
366   * @}\r
367   */\r
368 \r
369 /** @defgroup CAN_Tx \r
370   * @{\r
371   */\r
372 #define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02))\r
373 #define IS_CAN_STDID(STDID)   ((STDID) <= ((uint32_t)0x7FF))\r
374 #define IS_CAN_EXTID(EXTID)   ((EXTID) <= ((uint32_t)0x1FFFFFFF))\r
375 #define IS_CAN_DLC(DLC)       ((DLC) <= ((uint8_t)0x08))\r
376 /**\r
377   * @}\r
378   */\r
379 \r
380 /** @defgroup CAN_identifier_type \r
381   * @{\r
382   */\r
383 #define CAN_Id_Standard             ((uint32_t)0x00000000)  /*!< Standard Id */\r
384 #define CAN_Id_Extended             ((uint32_t)0x00000004)  /*!< Extended Id */\r
385 #define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_Id_Standard) || \\r
386                                ((IDTYPE) == CAN_Id_Extended))\r
387 \r
388 /* Legacy defines */\r
389 #define CAN_ID_STD      CAN_Id_Standard           \r
390 #define CAN_ID_EXT      CAN_Id_Extended\r
391 /**\r
392   * @}\r
393   */\r
394 \r
395 /** @defgroup CAN_remote_transmission_request \r
396   * @{\r
397   */\r
398 #define CAN_RTR_Data                ((uint32_t)0x00000000)  /*!< Data frame */\r
399 #define CAN_RTR_Remote              ((uint32_t)0x00000002)  /*!< Remote frame */\r
400 #define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_Data) || ((RTR) == CAN_RTR_Remote))\r
401 \r
402 /* Legacy defines */\r
403 #define CAN_RTR_DATA     CAN_RTR_Data         \r
404 #define CAN_RTR_REMOTE   CAN_RTR_Remote\r
405 /**\r
406   * @}\r
407   */\r
408 \r
409 /** @defgroup CAN_transmit_constants \r
410   * @{\r
411   */\r
412 #define CAN_TxStatus_Failed         ((uint8_t)0x00)/*!< CAN transmission failed */\r
413 #define CAN_TxStatus_Ok             ((uint8_t)0x01) /*!< CAN transmission succeeded */\r
414 #define CAN_TxStatus_Pending        ((uint8_t)0x02) /*!< CAN transmission pending */\r
415 #define CAN_TxStatus_NoMailBox      ((uint8_t)0x04) /*!< CAN cell did not provide \r
416                                                          an empty mailbox */\r
417 /* Legacy defines */    \r
418 #define CANTXFAILED                  CAN_TxStatus_Failed\r
419 #define CANTXOK                      CAN_TxStatus_Ok\r
420 #define CANTXPENDING                 CAN_TxStatus_Pending\r
421 #define CAN_NO_MB                    CAN_TxStatus_NoMailBox\r
422 /**\r
423   * @}\r
424   */\r
425 \r
426 /** @defgroup CAN_receive_FIFO_number_constants \r
427   * @{\r
428   */\r
429 #define CAN_FIFO0                 ((uint8_t)0x00) /*!< CAN FIFO 0 used to receive */\r
430 #define CAN_FIFO1                 ((uint8_t)0x01) /*!< CAN FIFO 1 used to receive */\r
431 \r
432 #define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1))\r
433 /**\r
434   * @}\r
435   */\r
436 \r
437 /** @defgroup CAN_sleep_constants \r
438   * @{\r
439   */\r
440 #define CAN_Sleep_Failed     ((uint8_t)0x00) /*!< CAN did not enter the sleep mode */\r
441 #define CAN_Sleep_Ok         ((uint8_t)0x01) /*!< CAN entered the sleep mode */\r
442 \r
443 /* Legacy defines */    \r
444 #define CANSLEEPFAILED   CAN_Sleep_Failed\r
445 #define CANSLEEPOK       CAN_Sleep_Ok\r
446 /**\r
447   * @}\r
448   */\r
449 \r
450 /** @defgroup CAN_wake_up_constants \r
451   * @{\r
452   */\r
453 #define CAN_WakeUp_Failed        ((uint8_t)0x00) /*!< CAN did not leave the sleep mode */\r
454 #define CAN_WakeUp_Ok            ((uint8_t)0x01) /*!< CAN leaved the sleep mode */\r
455 \r
456 /* Legacy defines */\r
457 #define CANWAKEUPFAILED   CAN_WakeUp_Failed        \r
458 #define CANWAKEUPOK       CAN_WakeUp_Ok        \r
459 /**\r
460   * @}\r
461   */\r
462 \r
463 /**\r
464   * @defgroup CAN_Error_Code_constants\r
465   * @{\r
466   */                                                         \r
467 #define CAN_ErrorCode_NoErr           ((uint8_t)0x00) /*!< No Error */ \r
468 #define CAN_ErrorCode_StuffErr        ((uint8_t)0x10) /*!< Stuff Error */ \r
469 #define CAN_ErrorCode_FormErr         ((uint8_t)0x20) /*!< Form Error */ \r
470 #define CAN_ErrorCode_ACKErr          ((uint8_t)0x30) /*!< Acknowledgment Error */ \r
471 #define CAN_ErrorCode_BitRecessiveErr ((uint8_t)0x40) /*!< Bit Recessive Error */ \r
472 #define CAN_ErrorCode_BitDominantErr  ((uint8_t)0x50) /*!< Bit Dominant Error */ \r
473 #define CAN_ErrorCode_CRCErr          ((uint8_t)0x60) /*!< CRC Error  */ \r
474 #define CAN_ErrorCode_SoftwareSetErr  ((uint8_t)0x70) /*!< Software Set Error */ \r
475 /**\r
476   * @}\r
477   */\r
478 \r
479 /** @defgroup CAN_flags \r
480   * @{\r
481   */\r
482 /* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus()\r
483    and CAN_ClearFlag() functions. */\r
484 /* If the flag is 0x1XXXXXXX, it means that it can only be used with \r
485    CAN_GetFlagStatus() function.  */\r
486 \r
487 /* Transmit Flags */\r
488 #define CAN_FLAG_RQCP0             ((uint32_t)0x38000001) /*!< Request MailBox0 Flag */\r
489 #define CAN_FLAG_RQCP1             ((uint32_t)0x38000100) /*!< Request MailBox1 Flag */\r
490 #define CAN_FLAG_RQCP2             ((uint32_t)0x38010000) /*!< Request MailBox2 Flag */\r
491 \r
492 /* Receive Flags */\r
493 #define CAN_FLAG_FMP0              ((uint32_t)0x12000003) /*!< FIFO 0 Message Pending Flag */\r
494 #define CAN_FLAG_FF0               ((uint32_t)0x32000008) /*!< FIFO 0 Full Flag            */\r
495 #define CAN_FLAG_FOV0              ((uint32_t)0x32000010) /*!< FIFO 0 Overrun Flag         */\r
496 #define CAN_FLAG_FMP1              ((uint32_t)0x14000003) /*!< FIFO 1 Message Pending Flag */\r
497 #define CAN_FLAG_FF1               ((uint32_t)0x34000008) /*!< FIFO 1 Full Flag            */\r
498 #define CAN_FLAG_FOV1              ((uint32_t)0x34000010) /*!< FIFO 1 Overrun Flag         */\r
499 \r
500 /* Operating Mode Flags */\r
501 #define CAN_FLAG_WKU               ((uint32_t)0x31000008) /*!< Wake up Flag */\r
502 #define CAN_FLAG_SLAK              ((uint32_t)0x31000012) /*!< Sleep acknowledge Flag */\r
503 /* @note When SLAK interrupt is disabled (SLKIE=0), no polling on SLAKI is possible. \r
504          In this case the SLAK bit can be polled.*/\r
505 \r
506 /* Error Flags */\r
507 #define CAN_FLAG_EWG               ((uint32_t)0x10F00001) /*!< Error Warning Flag   */\r
508 #define CAN_FLAG_EPV               ((uint32_t)0x10F00002) /*!< Error Passive Flag   */\r
509 #define CAN_FLAG_BOF               ((uint32_t)0x10F00004) /*!< Bus-Off Flag         */\r
510 #define CAN_FLAG_LEC               ((uint32_t)0x30F00070) /*!< Last error code Flag */\r
511 \r
512 #define IS_CAN_GET_FLAG(FLAG) (((FLAG) == CAN_FLAG_LEC)  || ((FLAG) == CAN_FLAG_BOF)   || \\r
513                                ((FLAG) == CAN_FLAG_EPV)  || ((FLAG) == CAN_FLAG_EWG)   || \\r
514                                ((FLAG) == CAN_FLAG_WKU)  || ((FLAG) == CAN_FLAG_FOV0)  || \\r
515                                ((FLAG) == CAN_FLAG_FF0)  || ((FLAG) == CAN_FLAG_FMP0)  || \\r
516                                ((FLAG) == CAN_FLAG_FOV1) || ((FLAG) == CAN_FLAG_FF1)   || \\r
517                                ((FLAG) == CAN_FLAG_FMP1) || ((FLAG) == CAN_FLAG_RQCP2) || \\r
518                                ((FLAG) == CAN_FLAG_RQCP1)|| ((FLAG) == CAN_FLAG_RQCP0) || \\r
519                                ((FLAG) == CAN_FLAG_SLAK ))\r
520 \r
521 #define IS_CAN_CLEAR_FLAG(FLAG)(((FLAG) == CAN_FLAG_LEC) || ((FLAG) == CAN_FLAG_RQCP2) || \\r
522                                 ((FLAG) == CAN_FLAG_RQCP1)  || ((FLAG) == CAN_FLAG_RQCP0) || \\r
523                                 ((FLAG) == CAN_FLAG_FF0)  || ((FLAG) == CAN_FLAG_FOV0) ||\\r
524                                 ((FLAG) == CAN_FLAG_FF1) || ((FLAG) == CAN_FLAG_FOV1) || \\r
525                                 ((FLAG) == CAN_FLAG_WKU) || ((FLAG) == CAN_FLAG_SLAK))\r
526 /**\r
527   * @}\r
528   */\r
529 \r
530   \r
531 /** @defgroup CAN_interrupts \r
532   * @{\r
533   */ \r
534 #define CAN_IT_TME                  ((uint32_t)0x00000001) /*!< Transmit mailbox empty Interrupt*/\r
535 \r
536 /* Receive Interrupts */\r
537 #define CAN_IT_FMP0                 ((uint32_t)0x00000002) /*!< FIFO 0 message pending Interrupt*/\r
538 #define CAN_IT_FF0                  ((uint32_t)0x00000004) /*!< FIFO 0 full Interrupt*/\r
539 #define CAN_IT_FOV0                 ((uint32_t)0x00000008) /*!< FIFO 0 overrun Interrupt*/\r
540 #define CAN_IT_FMP1                 ((uint32_t)0x00000010) /*!< FIFO 1 message pending Interrupt*/\r
541 #define CAN_IT_FF1                  ((uint32_t)0x00000020) /*!< FIFO 1 full Interrupt*/\r
542 #define CAN_IT_FOV1                 ((uint32_t)0x00000040) /*!< FIFO 1 overrun Interrupt*/\r
543 \r
544 /* Operating Mode Interrupts */\r
545 #define CAN_IT_WKU                  ((uint32_t)0x00010000) /*!< Wake-up Interrupt*/\r
546 #define CAN_IT_SLK                  ((uint32_t)0x00020000) /*!< Sleep acknowledge Interrupt*/\r
547 \r
548 /* Error Interrupts */\r
549 #define CAN_IT_EWG                  ((uint32_t)0x00000100) /*!< Error warning Interrupt*/\r
550 #define CAN_IT_EPV                  ((uint32_t)0x00000200) /*!< Error passive Interrupt*/\r
551 #define CAN_IT_BOF                  ((uint32_t)0x00000400) /*!< Bus-off Interrupt*/\r
552 #define CAN_IT_LEC                  ((uint32_t)0x00000800) /*!< Last error code Interrupt*/\r
553 #define CAN_IT_ERR                  ((uint32_t)0x00008000) /*!< Error Interrupt*/\r
554 \r
555 /* Flags named as Interrupts : kept only for FW compatibility */\r
556 #define CAN_IT_RQCP0   CAN_IT_TME\r
557 #define CAN_IT_RQCP1   CAN_IT_TME\r
558 #define CAN_IT_RQCP2   CAN_IT_TME\r
559 \r
560 \r
561 #define IS_CAN_IT(IT)        (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0)  ||\\r
562                              ((IT) == CAN_IT_FF0)  || ((IT) == CAN_IT_FOV0)  ||\\r
563                              ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1)   ||\\r
564                              ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG)   ||\\r
565                              ((IT) == CAN_IT_EPV)  || ((IT) == CAN_IT_BOF)   ||\\r
566                              ((IT) == CAN_IT_LEC)  || ((IT) == CAN_IT_ERR)   ||\\r
567                              ((IT) == CAN_IT_WKU)  || ((IT) == CAN_IT_SLK))\r
568 \r
569 #define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0)    ||\\r
570                              ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1)    ||\\r
571                              ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG)    ||\\r
572                              ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF)    ||\\r
573                              ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR)    ||\\r
574                              ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK))\r
575 /**\r
576   * @}\r
577   */\r
578 \r
579 /**\r
580   * @}\r
581   */\r
582 \r
583 /* Exported macro ------------------------------------------------------------*/\r
584 /* Exported functions --------------------------------------------------------*/  \r
585 \r
586 /*  Function used to set the CAN configuration to the default reset state *****/ \r
587 void CAN_DeInit(CAN_TypeDef* CANx);\r
588 \r
589 /* Initialization and Configuration functions *********************************/ \r
590 uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct);\r
591 void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct);\r
592 void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct);\r
593 void CAN_SlaveStartBank(uint8_t CAN_BankNumber); \r
594 void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState);\r
595 void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState);\r
596 \r
597 /* CAN Frames Transmission functions ******************************************/\r
598 uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage);\r
599 uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox);\r
600 void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox);\r
601 \r
602 /* CAN Frames Reception functions *********************************************/\r
603 void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage);\r
604 void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber);\r
605 uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber);\r
606 \r
607 /* Operation modes functions **************************************************/\r
608 uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode);\r
609 uint8_t CAN_Sleep(CAN_TypeDef* CANx);\r
610 uint8_t CAN_WakeUp(CAN_TypeDef* CANx);\r
611 \r
612 /* CAN Bus Error management functions *****************************************/\r
613 uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx);\r
614 uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx);\r
615 uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx);\r
616 \r
617 /* Interrupts and flags management functions **********************************/\r
618 void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState);\r
619 FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG);\r
620 void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG);\r
621 ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT);\r
622 void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT);\r
623 \r
624 #ifdef __cplusplus\r
625 }\r
626 #endif\r
627 \r
628 #endif /* __STM32F4xx_CAN_H */\r
629 \r
630 /**\r
631   * @}\r
632   */\r
633 \r
634 /**\r
635   * @}\r
636   */\r
637 \r
638 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/\r