Statistics
| Branch: | Tag: | Revision:

amiro-blt / Target / Modules / PowerManagement_1-1 / Boot / lib / stdperiphlib / STM32F4xx_StdPeriph_Driver / inc / stm32f4xx_can.h @ 367c0652

History | View | Annotate | Download (26.679 KB)

1
/**
2
  ******************************************************************************
3
  * @file    stm32f4xx_can.h
4
  * @author  MCD Application Team
5
  * @version V1.1.0
6
  * @date    11-January-2013
7
  * @brief   This file contains all the functions prototypes for the CAN firmware 
8
  *          library.
9
  ******************************************************************************
10
  * @attention
11
  *
12
  * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
13
  *
14
  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
15
  * You may not use this file except in compliance with the License.
16
  * You may obtain a copy of the License at:
17
  *
18
  *        http://www.st.com/software_license_agreement_liberty_v2
19
  *
20
  * Unless required by applicable law or agreed to in writing, software 
21
  * distributed under the License is distributed on an "AS IS" BASIS, 
22
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
  * See the License for the specific language governing permissions and
24
  * limitations under the License.
25
  *
26
  ******************************************************************************
27
  */
28

    
29
/* Define to prevent recursive inclusion -------------------------------------*/
30
#ifndef __STM32F4xx_CAN_H
31
#define __STM32F4xx_CAN_H
32

    
33
#ifdef __cplusplus
34
 extern "C" {
35
#endif
36

    
37
/* Includes ------------------------------------------------------------------*/
38
#include "stm32f4xx.h"
39

    
40
/** @addtogroup STM32F4xx_StdPeriph_Driver
41
  * @{
42
  */
43

    
44
/** @addtogroup CAN
45
  * @{
46
  */
47

    
48
/* Exported types ------------------------------------------------------------*/
49

    
50
#define IS_CAN_ALL_PERIPH(PERIPH) (((PERIPH) == CAN1) || \
51
                                   ((PERIPH) == CAN2))
52

    
53
/** 
54
  * @brief  CAN init structure definition
55
  */
56
typedef struct
57
{
58
  uint16_t CAN_Prescaler;   /*!< Specifies the length of a time quantum. 
59
                                 It ranges from 1 to 1024. */
60
  
61
  uint8_t CAN_Mode;         /*!< Specifies the CAN operating mode.
62
                                 This parameter can be a value of @ref CAN_operating_mode */
63

    
64
  uint8_t CAN_SJW;          /*!< Specifies the maximum number of time quanta 
65
                                 the CAN hardware is allowed to lengthen or 
66
                                 shorten a bit to perform resynchronization.
67
                                 This parameter can be a value of @ref CAN_synchronisation_jump_width */
68

    
69
  uint8_t CAN_BS1;          /*!< Specifies the number of time quanta in Bit 
70
                                 Segment 1. This parameter can be a value of 
71
                                 @ref CAN_time_quantum_in_bit_segment_1 */
72

    
73
  uint8_t CAN_BS2;          /*!< Specifies the number of time quanta in Bit Segment 2.
74
                                 This parameter can be a value of @ref CAN_time_quantum_in_bit_segment_2 */
75
  
76
  FunctionalState CAN_TTCM; /*!< Enable or disable the time triggered communication mode.
77
                                This parameter can be set either to ENABLE or DISABLE. */
78
  
79
  FunctionalState CAN_ABOM;  /*!< Enable or disable the automatic bus-off management.
80
                                  This parameter can be set either to ENABLE or DISABLE. */
81

    
82
  FunctionalState CAN_AWUM;  /*!< Enable or disable the automatic wake-up mode. 
83
                                  This parameter can be set either to ENABLE or DISABLE. */
84

    
85
  FunctionalState CAN_NART;  /*!< Enable or disable the non-automatic retransmission mode.
86
                                  This parameter can be set either to ENABLE or DISABLE. */
87

    
88
  FunctionalState CAN_RFLM;  /*!< Enable or disable the Receive FIFO Locked mode.
89
                                  This parameter can be set either to ENABLE or DISABLE. */
90

    
91
  FunctionalState CAN_TXFP;  /*!< Enable or disable the transmit FIFO priority.
92
                                  This parameter can be set either to ENABLE or DISABLE. */
93
} CAN_InitTypeDef;
94

    
95
/** 
96
  * @brief  CAN filter init structure definition
97
  */
98
typedef struct
99
{
100
  uint16_t CAN_FilterIdHigh;         /*!< Specifies the filter identification number (MSBs for a 32-bit
101
                                              configuration, first one for a 16-bit configuration).
102
                                              This parameter can be a value between 0x0000 and 0xFFFF */
103

    
104
  uint16_t CAN_FilterIdLow;          /*!< Specifies the filter identification number (LSBs for a 32-bit
105
                                              configuration, second one for a 16-bit configuration).
106
                                              This parameter can be a value between 0x0000 and 0xFFFF */
107

    
108
  uint16_t CAN_FilterMaskIdHigh;     /*!< Specifies the filter mask number or identification number,
109
                                              according to the mode (MSBs for a 32-bit configuration,
110
                                              first one for a 16-bit configuration).
111
                                              This parameter can be a value between 0x0000 and 0xFFFF */
112

    
113
  uint16_t CAN_FilterMaskIdLow;      /*!< Specifies the filter mask number or identification number,
114
                                              according to the mode (LSBs for a 32-bit configuration,
115
                                              second one for a 16-bit configuration).
116
                                              This parameter can be a value between 0x0000 and 0xFFFF */
117

    
118
  uint16_t CAN_FilterFIFOAssignment; /*!< Specifies the FIFO (0 or 1) which will be assigned to the filter.
119
                                              This parameter can be a value of @ref CAN_filter_FIFO */
120
  
121
  uint8_t CAN_FilterNumber;          /*!< Specifies the filter which will be initialized. It ranges from 0 to 13. */
122

    
123
  uint8_t CAN_FilterMode;            /*!< Specifies the filter mode to be initialized.
124
                                              This parameter can be a value of @ref CAN_filter_mode */
125

    
126
  uint8_t CAN_FilterScale;           /*!< Specifies the filter scale.
127
                                              This parameter can be a value of @ref CAN_filter_scale */
128

    
129
  FunctionalState CAN_FilterActivation; /*!< Enable or disable the filter.
130
                                              This parameter can be set either to ENABLE or DISABLE. */
131
} CAN_FilterInitTypeDef;
132

    
133
/** 
134
  * @brief  CAN Tx message structure definition  
135
  */
136
typedef struct
137
{
138
  uint32_t StdId;  /*!< Specifies the standard identifier.
139
                        This parameter can be a value between 0 to 0x7FF. */
140

    
141
  uint32_t ExtId;  /*!< Specifies the extended identifier.
142
                        This parameter can be a value between 0 to 0x1FFFFFFF. */
143

    
144
  uint8_t IDE;     /*!< Specifies the type of identifier for the message that 
145
                        will be transmitted. This parameter can be a value 
146
                        of @ref CAN_identifier_type */
147

    
148
  uint8_t RTR;     /*!< Specifies the type of frame for the message that will 
149
                        be transmitted. This parameter can be a value of 
150
                        @ref CAN_remote_transmission_request */
151

    
152
  uint8_t DLC;     /*!< Specifies the length of the frame that will be 
153
                        transmitted. This parameter can be a value between 
154
                        0 to 8 */
155

    
156
  uint8_t Data[8]; /*!< Contains the data to be transmitted. It ranges from 0 
157
                        to 0xFF. */
158
} CanTxMsg;
159

    
160
/** 
161
  * @brief  CAN Rx message structure definition  
162
  */
163
typedef struct
164
{
165
  uint32_t StdId;  /*!< Specifies the standard identifier.
166
                        This parameter can be a value between 0 to 0x7FF. */
167

    
168
  uint32_t ExtId;  /*!< Specifies the extended identifier.
169
                        This parameter can be a value between 0 to 0x1FFFFFFF. */
170

    
171
  uint8_t IDE;     /*!< Specifies the type of identifier for the message that 
172
                        will be received. This parameter can be a value of 
173
                        @ref CAN_identifier_type */
174

    
175
  uint8_t RTR;     /*!< Specifies the type of frame for the received message.
176
                        This parameter can be a value of 
177
                        @ref CAN_remote_transmission_request */
178

    
179
  uint8_t DLC;     /*!< Specifies the length of the frame that will be received.
180
                        This parameter can be a value between 0 to 8 */
181

    
182
  uint8_t Data[8]; /*!< Contains the data to be received. It ranges from 0 to 
183
                        0xFF. */
184

    
185
  uint8_t FMI;     /*!< Specifies the index of the filter the message stored in 
186
                        the mailbox passes through. This parameter can be a 
187
                        value between 0 to 0xFF */
188
} CanRxMsg;
189

    
190
/* Exported constants --------------------------------------------------------*/
191

    
192
/** @defgroup CAN_Exported_Constants
193
  * @{
194
  */
195

    
196
/** @defgroup CAN_InitStatus 
197
  * @{
198
  */
199

    
200
#define CAN_InitStatus_Failed              ((uint8_t)0x00) /*!< CAN initialization failed */
201
#define CAN_InitStatus_Success             ((uint8_t)0x01) /*!< CAN initialization OK */
202

    
203

    
204
/* Legacy defines */
205
#define CANINITFAILED    CAN_InitStatus_Failed
206
#define CANINITOK        CAN_InitStatus_Success
207
/**
208
  * @}
209
  */
210

    
211
/** @defgroup CAN_operating_mode 
212
  * @{
213
  */
214

    
215
#define CAN_Mode_Normal             ((uint8_t)0x00)  /*!< normal mode */
216
#define CAN_Mode_LoopBack           ((uint8_t)0x01)  /*!< loopback mode */
217
#define CAN_Mode_Silent             ((uint8_t)0x02)  /*!< silent mode */
218
#define CAN_Mode_Silent_LoopBack    ((uint8_t)0x03)  /*!< loopback combined with silent mode */
219

    
220
#define IS_CAN_MODE(MODE) (((MODE) == CAN_Mode_Normal) || \
221
                           ((MODE) == CAN_Mode_LoopBack)|| \
222
                           ((MODE) == CAN_Mode_Silent) || \
223
                           ((MODE) == CAN_Mode_Silent_LoopBack))
224
/**
225
  * @}
226
  */
227

    
228

    
229
 /**
230
  * @defgroup CAN_operating_mode 
231
  * @{
232
  */  
233
#define CAN_OperatingMode_Initialization  ((uint8_t)0x00) /*!< Initialization mode */
234
#define CAN_OperatingMode_Normal          ((uint8_t)0x01) /*!< Normal mode */
235
#define CAN_OperatingMode_Sleep           ((uint8_t)0x02) /*!< sleep mode */
236

    
237

    
238
#define IS_CAN_OPERATING_MODE(MODE) (((MODE) == CAN_OperatingMode_Initialization) ||\
239
                                    ((MODE) == CAN_OperatingMode_Normal)|| \
240
                                                                                                                                                ((MODE) == CAN_OperatingMode_Sleep))
241
/**
242
  * @}
243
  */
244
  
245
/**
246
  * @defgroup CAN_operating_mode_status
247
  * @{
248
  */  
249

    
250
#define CAN_ModeStatus_Failed    ((uint8_t)0x00)                /*!< CAN entering the specific mode failed */
251
#define CAN_ModeStatus_Success   ((uint8_t)!CAN_ModeStatus_Failed)   /*!< CAN entering the specific mode Succeed */
252
/**
253
  * @}
254
  */
255

    
256
/** @defgroup CAN_synchronisation_jump_width 
257
  * @{
258
  */
259
#define CAN_SJW_1tq                 ((uint8_t)0x00)  /*!< 1 time quantum */
260
#define CAN_SJW_2tq                 ((uint8_t)0x01)  /*!< 2 time quantum */
261
#define CAN_SJW_3tq                 ((uint8_t)0x02)  /*!< 3 time quantum */
262
#define CAN_SJW_4tq                 ((uint8_t)0x03)  /*!< 4 time quantum */
263

    
264
#define IS_CAN_SJW(SJW) (((SJW) == CAN_SJW_1tq) || ((SJW) == CAN_SJW_2tq)|| \
265
                         ((SJW) == CAN_SJW_3tq) || ((SJW) == CAN_SJW_4tq))
266
/**
267
  * @}
268
  */
269

    
270
/** @defgroup CAN_time_quantum_in_bit_segment_1 
271
  * @{
272
  */
273
#define CAN_BS1_1tq                 ((uint8_t)0x00)  /*!< 1 time quantum */
274
#define CAN_BS1_2tq                 ((uint8_t)0x01)  /*!< 2 time quantum */
275
#define CAN_BS1_3tq                 ((uint8_t)0x02)  /*!< 3 time quantum */
276
#define CAN_BS1_4tq                 ((uint8_t)0x03)  /*!< 4 time quantum */
277
#define CAN_BS1_5tq                 ((uint8_t)0x04)  /*!< 5 time quantum */
278
#define CAN_BS1_6tq                 ((uint8_t)0x05)  /*!< 6 time quantum */
279
#define CAN_BS1_7tq                 ((uint8_t)0x06)  /*!< 7 time quantum */
280
#define CAN_BS1_8tq                 ((uint8_t)0x07)  /*!< 8 time quantum */
281
#define CAN_BS1_9tq                 ((uint8_t)0x08)  /*!< 9 time quantum */
282
#define CAN_BS1_10tq                ((uint8_t)0x09)  /*!< 10 time quantum */
283
#define CAN_BS1_11tq                ((uint8_t)0x0A)  /*!< 11 time quantum */
284
#define CAN_BS1_12tq                ((uint8_t)0x0B)  /*!< 12 time quantum */
285
#define CAN_BS1_13tq                ((uint8_t)0x0C)  /*!< 13 time quantum */
286
#define CAN_BS1_14tq                ((uint8_t)0x0D)  /*!< 14 time quantum */
287
#define CAN_BS1_15tq                ((uint8_t)0x0E)  /*!< 15 time quantum */
288
#define CAN_BS1_16tq                ((uint8_t)0x0F)  /*!< 16 time quantum */
289

    
290
#define IS_CAN_BS1(BS1) ((BS1) <= CAN_BS1_16tq)
291
/**
292
  * @}
293
  */
294

    
295
/** @defgroup CAN_time_quantum_in_bit_segment_2 
296
  * @{
297
  */
298
#define CAN_BS2_1tq                 ((uint8_t)0x00)  /*!< 1 time quantum */
299
#define CAN_BS2_2tq                 ((uint8_t)0x01)  /*!< 2 time quantum */
300
#define CAN_BS2_3tq                 ((uint8_t)0x02)  /*!< 3 time quantum */
301
#define CAN_BS2_4tq                 ((uint8_t)0x03)  /*!< 4 time quantum */
302
#define CAN_BS2_5tq                 ((uint8_t)0x04)  /*!< 5 time quantum */
303
#define CAN_BS2_6tq                 ((uint8_t)0x05)  /*!< 6 time quantum */
304
#define CAN_BS2_7tq                 ((uint8_t)0x06)  /*!< 7 time quantum */
305
#define CAN_BS2_8tq                 ((uint8_t)0x07)  /*!< 8 time quantum */
306

    
307
#define IS_CAN_BS2(BS2) ((BS2) <= CAN_BS2_8tq)
308
/**
309
  * @}
310
  */
311

    
312
/** @defgroup CAN_clock_prescaler 
313
  * @{
314
  */
315
#define IS_CAN_PRESCALER(PRESCALER) (((PRESCALER) >= 1) && ((PRESCALER) <= 1024))
316
/**
317
  * @}
318
  */
319

    
320
/** @defgroup CAN_filter_number 
321
  * @{
322
  */
323
#define IS_CAN_FILTER_NUMBER(NUMBER) ((NUMBER) <= 27)
324
/**
325
  * @}
326
  */
327

    
328
/** @defgroup CAN_filter_mode 
329
  * @{
330
  */
331
#define CAN_FilterMode_IdMask       ((uint8_t)0x00)  /*!< identifier/mask mode */
332
#define CAN_FilterMode_IdList       ((uint8_t)0x01)  /*!< identifier list mode */
333

    
334
#define IS_CAN_FILTER_MODE(MODE) (((MODE) == CAN_FilterMode_IdMask) || \
335
                                  ((MODE) == CAN_FilterMode_IdList))
336
/**
337
  * @}
338
  */
339

    
340
/** @defgroup CAN_filter_scale 
341
  * @{
342
  */
343
#define CAN_FilterScale_16bit       ((uint8_t)0x00) /*!< Two 16-bit filters */
344
#define CAN_FilterScale_32bit       ((uint8_t)0x01) /*!< One 32-bit filter */
345

    
346
#define IS_CAN_FILTER_SCALE(SCALE) (((SCALE) == CAN_FilterScale_16bit) || \
347
                                    ((SCALE) == CAN_FilterScale_32bit))
348
/**
349
  * @}
350
  */
351

    
352
/** @defgroup CAN_filter_FIFO
353
  * @{
354
  */
355
#define CAN_Filter_FIFO0             ((uint8_t)0x00)  /*!< Filter FIFO 0 assignment for filter x */
356
#define CAN_Filter_FIFO1             ((uint8_t)0x01)  /*!< Filter FIFO 1 assignment for filter x */
357
#define IS_CAN_FILTER_FIFO(FIFO) (((FIFO) == CAN_FilterFIFO0) || \
358
                                  ((FIFO) == CAN_FilterFIFO1))
359

    
360
/* Legacy defines */
361
#define CAN_FilterFIFO0  CAN_Filter_FIFO0
362
#define CAN_FilterFIFO1  CAN_Filter_FIFO1
363
/**
364
  * @}
365
  */
366

    
367
/** @defgroup CAN_Start_bank_filter_for_slave_CAN 
368
  * @{
369
  */
370
#define IS_CAN_BANKNUMBER(BANKNUMBER) (((BANKNUMBER) >= 1) && ((BANKNUMBER) <= 27))
371
/**
372
  * @}
373
  */
374

    
375
/** @defgroup CAN_Tx 
376
  * @{
377
  */
378
#define IS_CAN_TRANSMITMAILBOX(TRANSMITMAILBOX) ((TRANSMITMAILBOX) <= ((uint8_t)0x02))
379
#define IS_CAN_STDID(STDID)   ((STDID) <= ((uint32_t)0x7FF))
380
#define IS_CAN_EXTID(EXTID)   ((EXTID) <= ((uint32_t)0x1FFFFFFF))
381
#define IS_CAN_DLC(DLC)       ((DLC) <= ((uint8_t)0x08))
382
/**
383
  * @}
384
  */
385

    
386
/** @defgroup CAN_identifier_type 
387
  * @{
388
  */
389
#define CAN_Id_Standard             ((uint32_t)0x00000000)  /*!< Standard Id */
390
#define CAN_Id_Extended             ((uint32_t)0x00000004)  /*!< Extended Id */
391
#define IS_CAN_IDTYPE(IDTYPE) (((IDTYPE) == CAN_Id_Standard) || \
392
                               ((IDTYPE) == CAN_Id_Extended))
393

    
394
/* Legacy defines */
395
#define CAN_ID_STD      CAN_Id_Standard           
396
#define CAN_ID_EXT      CAN_Id_Extended
397
/**
398
  * @}
399
  */
400

    
401
/** @defgroup CAN_remote_transmission_request 
402
  * @{
403
  */
404
#define CAN_RTR_Data                ((uint32_t)0x00000000)  /*!< Data frame */
405
#define CAN_RTR_Remote              ((uint32_t)0x00000002)  /*!< Remote frame */
406
#define IS_CAN_RTR(RTR) (((RTR) == CAN_RTR_Data) || ((RTR) == CAN_RTR_Remote))
407

    
408
/* Legacy defines */
409
#define CAN_RTR_DATA     CAN_RTR_Data         
410
#define CAN_RTR_REMOTE   CAN_RTR_Remote
411
/**
412
  * @}
413
  */
414

    
415
/** @defgroup CAN_transmit_constants 
416
  * @{
417
  */
418
#define CAN_TxStatus_Failed         ((uint8_t)0x00)/*!< CAN transmission failed */
419
#define CAN_TxStatus_Ok             ((uint8_t)0x01) /*!< CAN transmission succeeded */
420
#define CAN_TxStatus_Pending        ((uint8_t)0x02) /*!< CAN transmission pending */
421
#define CAN_TxStatus_NoMailBox      ((uint8_t)0x04) /*!< CAN cell did not provide 
422
                                                         an empty mailbox */
423
/* Legacy defines */        
424
#define CANTXFAILED                  CAN_TxStatus_Failed
425
#define CANTXOK                      CAN_TxStatus_Ok
426
#define CANTXPENDING                 CAN_TxStatus_Pending
427
#define CAN_NO_MB                    CAN_TxStatus_NoMailBox
428
/**
429
  * @}
430
  */
431

    
432
/** @defgroup CAN_receive_FIFO_number_constants 
433
  * @{
434
  */
435
#define CAN_FIFO0                 ((uint8_t)0x00) /*!< CAN FIFO 0 used to receive */
436
#define CAN_FIFO1                 ((uint8_t)0x01) /*!< CAN FIFO 1 used to receive */
437

    
438
#define IS_CAN_FIFO(FIFO) (((FIFO) == CAN_FIFO0) || ((FIFO) == CAN_FIFO1))
439
/**
440
  * @}
441
  */
442

    
443
/** @defgroup CAN_sleep_constants 
444
  * @{
445
  */
446
#define CAN_Sleep_Failed     ((uint8_t)0x00) /*!< CAN did not enter the sleep mode */
447
#define CAN_Sleep_Ok         ((uint8_t)0x01) /*!< CAN entered the sleep mode */
448

    
449
/* Legacy defines */        
450
#define CANSLEEPFAILED   CAN_Sleep_Failed
451
#define CANSLEEPOK       CAN_Sleep_Ok
452
/**
453
  * @}
454
  */
455

    
456
/** @defgroup CAN_wake_up_constants 
457
  * @{
458
  */
459
#define CAN_WakeUp_Failed        ((uint8_t)0x00) /*!< CAN did not leave the sleep mode */
460
#define CAN_WakeUp_Ok            ((uint8_t)0x01) /*!< CAN leaved the sleep mode */
461

    
462
/* Legacy defines */
463
#define CANWAKEUPFAILED   CAN_WakeUp_Failed        
464
#define CANWAKEUPOK       CAN_WakeUp_Ok        
465
/**
466
  * @}
467
  */
468

    
469
/**
470
  * @defgroup CAN_Error_Code_constants
471
  * @{
472
  */                                                         
473
#define CAN_ErrorCode_NoErr           ((uint8_t)0x00) /*!< No Error */ 
474
#define        CAN_ErrorCode_StuffErr        ((uint8_t)0x10) /*!< Stuff Error */ 
475
#define        CAN_ErrorCode_FormErr         ((uint8_t)0x20) /*!< Form Error */ 
476
#define        CAN_ErrorCode_ACKErr          ((uint8_t)0x30) /*!< Acknowledgment Error */ 
477
#define        CAN_ErrorCode_BitRecessiveErr ((uint8_t)0x40) /*!< Bit Recessive Error */ 
478
#define        CAN_ErrorCode_BitDominantErr  ((uint8_t)0x50) /*!< Bit Dominant Error */ 
479
#define        CAN_ErrorCode_CRCErr          ((uint8_t)0x60) /*!< CRC Error  */ 
480
#define        CAN_ErrorCode_SoftwareSetErr  ((uint8_t)0x70) /*!< Software Set Error */ 
481
/**
482
  * @}
483
  */
484

    
485
/** @defgroup CAN_flags 
486
  * @{
487
  */
488
/* If the flag is 0x3XXXXXXX, it means that it can be used with CAN_GetFlagStatus()
489
   and CAN_ClearFlag() functions. */
490
/* If the flag is 0x1XXXXXXX, it means that it can only be used with 
491
   CAN_GetFlagStatus() function.  */
492

    
493
/* Transmit Flags */
494
#define CAN_FLAG_RQCP0             ((uint32_t)0x38000001) /*!< Request MailBox0 Flag */
495
#define CAN_FLAG_RQCP1             ((uint32_t)0x38000100) /*!< Request MailBox1 Flag */
496
#define CAN_FLAG_RQCP2             ((uint32_t)0x38010000) /*!< Request MailBox2 Flag */
497

    
498
/* Receive Flags */
499
#define CAN_FLAG_FMP0              ((uint32_t)0x12000003) /*!< FIFO 0 Message Pending Flag */
500
#define CAN_FLAG_FF0               ((uint32_t)0x32000008) /*!< FIFO 0 Full Flag            */
501
#define CAN_FLAG_FOV0              ((uint32_t)0x32000010) /*!< FIFO 0 Overrun Flag         */
502
#define CAN_FLAG_FMP1              ((uint32_t)0x14000003) /*!< FIFO 1 Message Pending Flag */
503
#define CAN_FLAG_FF1               ((uint32_t)0x34000008) /*!< FIFO 1 Full Flag            */
504
#define CAN_FLAG_FOV1              ((uint32_t)0x34000010) /*!< FIFO 1 Overrun Flag         */
505

    
506
/* Operating Mode Flags */
507
#define CAN_FLAG_WKU               ((uint32_t)0x31000008) /*!< Wake up Flag */
508
#define CAN_FLAG_SLAK              ((uint32_t)0x31000012) /*!< Sleep acknowledge Flag */
509
/* @note When SLAK interrupt is disabled (SLKIE=0), no polling on SLAKI is possible. 
510
         In this case the SLAK bit can be polled.*/
511

    
512
/* Error Flags */
513
#define CAN_FLAG_EWG               ((uint32_t)0x10F00001) /*!< Error Warning Flag   */
514
#define CAN_FLAG_EPV               ((uint32_t)0x10F00002) /*!< Error Passive Flag   */
515
#define CAN_FLAG_BOF               ((uint32_t)0x10F00004) /*!< Bus-Off Flag         */
516
#define CAN_FLAG_LEC               ((uint32_t)0x30F00070) /*!< Last error code Flag */
517

    
518
#define IS_CAN_GET_FLAG(FLAG) (((FLAG) == CAN_FLAG_LEC)  || ((FLAG) == CAN_FLAG_BOF)   || \
519
                               ((FLAG) == CAN_FLAG_EPV)  || ((FLAG) == CAN_FLAG_EWG)   || \
520
                               ((FLAG) == CAN_FLAG_WKU)  || ((FLAG) == CAN_FLAG_FOV0)  || \
521
                               ((FLAG) == CAN_FLAG_FF0)  || ((FLAG) == CAN_FLAG_FMP0)  || \
522
                               ((FLAG) == CAN_FLAG_FOV1) || ((FLAG) == CAN_FLAG_FF1)   || \
523
                               ((FLAG) == CAN_FLAG_FMP1) || ((FLAG) == CAN_FLAG_RQCP2) || \
524
                               ((FLAG) == CAN_FLAG_RQCP1)|| ((FLAG) == CAN_FLAG_RQCP0) || \
525
                               ((FLAG) == CAN_FLAG_SLAK ))
526

    
527
#define IS_CAN_CLEAR_FLAG(FLAG)(((FLAG) == CAN_FLAG_LEC) || ((FLAG) == CAN_FLAG_RQCP2) || \
528
                                ((FLAG) == CAN_FLAG_RQCP1)  || ((FLAG) == CAN_FLAG_RQCP0) || \
529
                                ((FLAG) == CAN_FLAG_FF0)  || ((FLAG) == CAN_FLAG_FOV0) ||\
530
                                ((FLAG) == CAN_FLAG_FF1) || ((FLAG) == CAN_FLAG_FOV1) || \
531
                                ((FLAG) == CAN_FLAG_WKU) || ((FLAG) == CAN_FLAG_SLAK))
532
/**
533
  * @}
534
  */
535

    
536
  
537
/** @defgroup CAN_interrupts 
538
  * @{
539
  */ 
540
#define CAN_IT_TME                  ((uint32_t)0x00000001) /*!< Transmit mailbox empty Interrupt*/
541

    
542
/* Receive Interrupts */
543
#define CAN_IT_FMP0                 ((uint32_t)0x00000002) /*!< FIFO 0 message pending Interrupt*/
544
#define CAN_IT_FF0                  ((uint32_t)0x00000004) /*!< FIFO 0 full Interrupt*/
545
#define CAN_IT_FOV0                 ((uint32_t)0x00000008) /*!< FIFO 0 overrun Interrupt*/
546
#define CAN_IT_FMP1                 ((uint32_t)0x00000010) /*!< FIFO 1 message pending Interrupt*/
547
#define CAN_IT_FF1                  ((uint32_t)0x00000020) /*!< FIFO 1 full Interrupt*/
548
#define CAN_IT_FOV1                 ((uint32_t)0x00000040) /*!< FIFO 1 overrun Interrupt*/
549

    
550
/* Operating Mode Interrupts */
551
#define CAN_IT_WKU                  ((uint32_t)0x00010000) /*!< Wake-up Interrupt*/
552
#define CAN_IT_SLK                  ((uint32_t)0x00020000) /*!< Sleep acknowledge Interrupt*/
553

    
554
/* Error Interrupts */
555
#define CAN_IT_EWG                  ((uint32_t)0x00000100) /*!< Error warning Interrupt*/
556
#define CAN_IT_EPV                  ((uint32_t)0x00000200) /*!< Error passive Interrupt*/
557
#define CAN_IT_BOF                  ((uint32_t)0x00000400) /*!< Bus-off Interrupt*/
558
#define CAN_IT_LEC                  ((uint32_t)0x00000800) /*!< Last error code Interrupt*/
559
#define CAN_IT_ERR                  ((uint32_t)0x00008000) /*!< Error Interrupt*/
560

    
561
/* Flags named as Interrupts : kept only for FW compatibility */
562
#define CAN_IT_RQCP0   CAN_IT_TME
563
#define CAN_IT_RQCP1   CAN_IT_TME
564
#define CAN_IT_RQCP2   CAN_IT_TME
565

    
566

    
567
#define IS_CAN_IT(IT)        (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FMP0)  ||\
568
                             ((IT) == CAN_IT_FF0)  || ((IT) == CAN_IT_FOV0)  ||\
569
                             ((IT) == CAN_IT_FMP1) || ((IT) == CAN_IT_FF1)   ||\
570
                             ((IT) == CAN_IT_FOV1) || ((IT) == CAN_IT_EWG)   ||\
571
                             ((IT) == CAN_IT_EPV)  || ((IT) == CAN_IT_BOF)   ||\
572
                             ((IT) == CAN_IT_LEC)  || ((IT) == CAN_IT_ERR)   ||\
573
                             ((IT) == CAN_IT_WKU)  || ((IT) == CAN_IT_SLK))
574

    
575
#define IS_CAN_CLEAR_IT(IT) (((IT) == CAN_IT_TME) || ((IT) == CAN_IT_FF0)    ||\
576
                             ((IT) == CAN_IT_FOV0)|| ((IT) == CAN_IT_FF1)    ||\
577
                             ((IT) == CAN_IT_FOV1)|| ((IT) == CAN_IT_EWG)    ||\
578
                             ((IT) == CAN_IT_EPV) || ((IT) == CAN_IT_BOF)    ||\
579
                             ((IT) == CAN_IT_LEC) || ((IT) == CAN_IT_ERR)    ||\
580
                             ((IT) == CAN_IT_WKU) || ((IT) == CAN_IT_SLK))
581
/**
582
  * @}
583
  */
584

    
585
/**
586
  * @}
587
  */
588

    
589
/* Exported macro ------------------------------------------------------------*/
590
/* Exported functions --------------------------------------------------------*/  
591

    
592
/*  Function used to set the CAN configuration to the default reset state *****/ 
593
void CAN_DeInit(CAN_TypeDef* CANx);
594

    
595
/* Initialization and Configuration functions *********************************/ 
596
uint8_t CAN_Init(CAN_TypeDef* CANx, CAN_InitTypeDef* CAN_InitStruct);
597
void CAN_FilterInit(CAN_FilterInitTypeDef* CAN_FilterInitStruct);
598
void CAN_StructInit(CAN_InitTypeDef* CAN_InitStruct);
599
void CAN_SlaveStartBank(uint8_t CAN_BankNumber); 
600
void CAN_DBGFreeze(CAN_TypeDef* CANx, FunctionalState NewState);
601
void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState);
602

    
603
/* CAN Frames Transmission functions ******************************************/
604
uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage);
605
uint8_t CAN_TransmitStatus(CAN_TypeDef* CANx, uint8_t TransmitMailbox);
606
void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox);
607

    
608
/* CAN Frames Reception functions *********************************************/
609
void CAN_Receive(CAN_TypeDef* CANx, uint8_t FIFONumber, CanRxMsg* RxMessage);
610
void CAN_FIFORelease(CAN_TypeDef* CANx, uint8_t FIFONumber);
611
uint8_t CAN_MessagePending(CAN_TypeDef* CANx, uint8_t FIFONumber);
612

    
613
/* Operation modes functions **************************************************/
614
uint8_t CAN_OperatingModeRequest(CAN_TypeDef* CANx, uint8_t CAN_OperatingMode);
615
uint8_t CAN_Sleep(CAN_TypeDef* CANx);
616
uint8_t CAN_WakeUp(CAN_TypeDef* CANx);
617

    
618
/* CAN Bus Error management functions *****************************************/
619
uint8_t CAN_GetLastErrorCode(CAN_TypeDef* CANx);
620
uint8_t CAN_GetReceiveErrorCounter(CAN_TypeDef* CANx);
621
uint8_t CAN_GetLSBTransmitErrorCounter(CAN_TypeDef* CANx);
622

    
623
/* Interrupts and flags management functions **********************************/
624
void CAN_ITConfig(CAN_TypeDef* CANx, uint32_t CAN_IT, FunctionalState NewState);
625
FlagStatus CAN_GetFlagStatus(CAN_TypeDef* CANx, uint32_t CAN_FLAG);
626
void CAN_ClearFlag(CAN_TypeDef* CANx, uint32_t CAN_FLAG);
627
ITStatus CAN_GetITStatus(CAN_TypeDef* CANx, uint32_t CAN_IT);
628
void CAN_ClearITPendingBit(CAN_TypeDef* CANx, uint32_t CAN_IT);
629

    
630
#ifdef __cplusplus
631
}
632
#endif
633

    
634
#endif /* __STM32F4xx_CAN_H */
635

    
636
/**
637
  * @}
638
  */
639

    
640
/**
641
  * @}
642
  */
643

    
644
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/