Subversion Repositories ScreenTimer

Rev

Details | Last modification | View Log | RSS feed

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