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 | 69661903 | Thomas Schöpping | /**
|
---|---|---|---|
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>© 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****/
|