Subversion Repositories DashDisplay

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f1xx_hal_spi.h
4
  * @author  MCD Application Team
5 mjames 5
  * @version V1.0.4
6
  * @date    29-April-2016
2 mjames 7
  * @brief   Header file of SPI HAL module.
8
  ******************************************************************************
9
  * @attention
10
  *
5 mjames 11
  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
2 mjames 12
  *
13
  * Redistribution and use in source and binary forms, with or without modification,
14
  * are permitted provided that the following conditions are met:
15
  *   1. Redistributions of source code must retain the above copyright notice,
16
  *      this list of conditions and the following disclaimer.
17
  *   2. Redistributions in binary form must reproduce the above copyright notice,
18
  *      this list of conditions and the following disclaimer in the documentation
19
  *      and/or other materials provided with the distribution.
20
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
21
  *      may be used to endorse or promote products derived from this software
22
  *      without specific prior written permission.
23
  *
24
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
  *
35
  ******************************************************************************
36
  */
37
 
38
/* Define to prevent recursive inclusion -------------------------------------*/
39
#ifndef __STM32F1xx_HAL_SPI_H
40
#define __STM32F1xx_HAL_SPI_H
41
 
42
#ifdef __cplusplus
43
 extern "C" {
44
#endif
45
 
46
/* Includes ------------------------------------------------------------------*/
47
#include "stm32f1xx_hal_def.h"  
48
 
49
/** @addtogroup STM32F1xx_HAL_Driver
50
  * @{
51
  */
52
 
53
/** @addtogroup SPI
54
  * @{
55
  */
56
 
57
/* Exported types ------------------------------------------------------------*/
58
/** @defgroup SPI_Exported_Types SPI Exported Types
59
  * @{
60
  */
61
 
62
/**
63
  * @brief  SPI Configuration Structure definition  
64
  */
65
typedef struct
66
{
67
  uint32_t Mode;               /*!< Specifies the SPI operating mode.
68
                                    This parameter can be a value of @ref SPI_mode */
69
 
70
  uint32_t Direction;          /*!< Specifies the SPI Directional mode state.
71
                                    This parameter can be a value of @ref SPI_Direction_mode */
72
 
73
  uint32_t DataSize;           /*!< Specifies the SPI data size.
74
                                    This parameter can be a value of @ref SPI_data_size */
75
 
76
  uint32_t CLKPolarity;        /*!< Specifies the serial clock steady state.
77
                                    This parameter can be a value of @ref SPI_Clock_Polarity */
78
 
79
  uint32_t CLKPhase;           /*!< Specifies the clock active edge for the bit capture.
80
                                    This parameter can be a value of @ref SPI_Clock_Phase */
81
 
82
  uint32_t NSS;                /*!< Specifies whether the NSS signal is managed by
83
                                    hardware (NSS pin) or by software using the SSI bit.
84
                                    This parameter can be a value of @ref SPI_Slave_Select_management */
85
 
86
  uint32_t BaudRatePrescaler;  /*!< Specifies the Baud Rate prescaler value which will be
87
                                    used to configure the transmit and receive SCK clock.
88
                                    This parameter can be a value of @ref SPI_BaudRate_Prescaler
89
                                    @note The communication clock is derived from the master
90
                                    clock. The slave clock does not need to be set */
91
 
92
  uint32_t FirstBit;           /*!< Specifies whether data transfers start from MSB or LSB bit.
93
                                    This parameter can be a value of @ref SPI_MSB_LSB_transmission */
94
 
95
  uint32_t TIMode;             /*!< Specifies if the TI mode is enabled or not.
96
                                    This parameter can be a value of @ref SPI_TI_mode */
97
 
98
  uint32_t CRCCalculation;     /*!< Specifies if the CRC calculation is enabled or not.
99
                                    This parameter can be a value of @ref SPI_CRC_Calculation */
100
 
101
  uint32_t CRCPolynomial;      /*!< Specifies the polynomial used for the CRC calculation.
102
                                    This parameter must be a number between Min_Data = 0 and Max_Data = 65535 */
103
 
104
}SPI_InitTypeDef;
105
 
106
/**
107
  * @brief  HAL SPI State structure definition
108
  */
109
typedef enum
110
{
111
  HAL_SPI_STATE_RESET      = 0x00,  /*!< SPI not yet initialized or disabled                */
112
  HAL_SPI_STATE_READY      = 0x01,  /*!< SPI initialized and ready for use                  */
113
  HAL_SPI_STATE_BUSY       = 0x02,  /*!< SPI process is ongoing                             */
114
  HAL_SPI_STATE_BUSY_TX    = 0x12,  /*!< Data Transmission process is ongoing               */
115
  HAL_SPI_STATE_BUSY_RX    = 0x22,  /*!< Data Reception process is ongoing                  */
116
  HAL_SPI_STATE_BUSY_TX_RX = 0x32,  /*!< Data Transmission and Reception process is ongoing */
117
  HAL_SPI_STATE_ERROR      = 0x03   /*!< SPI error state                                    */
118
 
119
}HAL_SPI_StateTypeDef;
120
 
121
 
122
/**
123
  * @brief  SPI handle Structure definition
124
  */
125
typedef struct __SPI_HandleTypeDef
126
{
127
  SPI_TypeDef                *Instance;    /*!< SPI registers base address */
128
 
129
  SPI_InitTypeDef            Init;         /*!< SPI communication parameters */
130
 
131
  uint8_t                    *pTxBuffPtr;  /*!< Pointer to SPI Tx transfer Buffer */
132
 
133
  uint16_t                   TxXferSize;   /*!< SPI Tx transfer size */
134
 
135
  uint16_t                   TxXferCount;  /*!< SPI Tx Transfer Counter */
136
 
137
  uint8_t                    *pRxBuffPtr;  /*!< Pointer to SPI Rx transfer Buffer */
138
 
139
  uint16_t                   RxXferSize;   /*!< SPI Rx transfer size */
140
 
141
  uint16_t                   RxXferCount;  /*!< SPI Rx Transfer Counter */
142
 
143
  DMA_HandleTypeDef          *hdmatx;      /*!< SPI Tx DMA handle parameters */
144
 
145
  DMA_HandleTypeDef          *hdmarx;      /*!< SPI Rx DMA handle parameters */
146
 
147
  void                       (*RxISR)(struct __SPI_HandleTypeDef * hspi); /*!< function pointer on Rx ISR */
148
 
149
  void                       (*TxISR)(struct __SPI_HandleTypeDef * hspi); /*!< function pointer on Tx ISR */
150
 
151
  HAL_LockTypeDef            Lock;         /*!< SPI locking object */
152
 
153
  __IO HAL_SPI_StateTypeDef  State;        /*!< SPI communication state */
154
 
155
  __IO uint32_t  ErrorCode;    /*!< SPI Error code */
156
 
157
}SPI_HandleTypeDef;
158
/**
159
  * @}
160
  */
161
 
162
 
163
/* Exported constants --------------------------------------------------------*/
164
 
165
/** @defgroup SPI_Exported_Constants SPI Exported Constants
166
  * @{
167
  */
168
 
169
/** @defgroup SPI_Error_Codes SPI Error Codes
170
  * @{
171
  */
172
#define HAL_SPI_ERROR_NONE      ((uint32_t)0x00)    /*!< No error             */
173
#define HAL_SPI_ERROR_MODF      ((uint32_t)0x01)    /*!< MODF error           */
174
#define HAL_SPI_ERROR_CRC       ((uint32_t)0x02)    /*!< CRC error            */
175
#define HAL_SPI_ERROR_OVR       ((uint32_t)0x04)    /*!< OVR error            */
176
#define HAL_SPI_ERROR_DMA       ((uint32_t)0x08)    /*!< DMA transfer error   */
177
#define HAL_SPI_ERROR_FLAG      ((uint32_t)0x10)    /*!< Flag: RXNE,TXE, BSY  */
178
/**
179
  * @}
180
  */
181
 
182
 
183
 
184
 
185
/** @defgroup SPI_mode SPI mode
186
  * @{
187
  */
188
#define SPI_MODE_SLAVE                  ((uint32_t)0x00000000)
189
#define SPI_MODE_MASTER                 (SPI_CR1_MSTR | SPI_CR1_SSI)
190
 
191
/**
192
  * @}
193
  */
194
 
195
/** @defgroup SPI_Direction_mode SPI Direction mode
196
  * @{
197
  */
198
#define SPI_DIRECTION_2LINES            ((uint32_t)0x00000000)
199
#define SPI_DIRECTION_2LINES_RXONLY     SPI_CR1_RXONLY
200
#define SPI_DIRECTION_1LINE             SPI_CR1_BIDIMODE
201
 
202
/**
203
  * @}
204
  */
205
 
206
/** @defgroup SPI_data_size SPI data size
207
  * @{
208
  */
209
#define SPI_DATASIZE_8BIT               ((uint32_t)0x00000000)
210
#define SPI_DATASIZE_16BIT              SPI_CR1_DFF
211
 
212
/**
213
  * @}
214
  */
215
 
216
/** @defgroup SPI_Clock_Polarity SPI Clock Polarity
217
  * @{
218
  */
219
#define SPI_POLARITY_LOW                ((uint32_t)0x00000000)
220
#define SPI_POLARITY_HIGH               SPI_CR1_CPOL
221
 
222
/**
223
  * @}
224
  */
225
 
226
/** @defgroup SPI_Clock_Phase SPI Clock Phase
227
  * @{
228
  */
229
#define SPI_PHASE_1EDGE                 ((uint32_t)0x00000000)
230
#define SPI_PHASE_2EDGE                 SPI_CR1_CPHA
231
 
232
/**
233
  * @}
234
  */
235
 
236
/** @defgroup SPI_Slave_Select_management SPI Slave Select management
237
  * @{
238
  */
239
#define SPI_NSS_SOFT                    SPI_CR1_SSM
240
#define SPI_NSS_HARD_INPUT              ((uint32_t)0x00000000)
241
#define SPI_NSS_HARD_OUTPUT             ((uint32_t)(SPI_CR2_SSOE << 16))
242
 
243
/**
244
  * @}
245
  */
246
 
247
/** @defgroup SPI_BaudRate_Prescaler SPI BaudRate Prescaler
248
  * @{
249
  */
250
#define SPI_BAUDRATEPRESCALER_2         ((uint32_t)0x00000000)
251
#define SPI_BAUDRATEPRESCALER_4         ((uint32_t)SPI_CR1_BR_0)
252
#define SPI_BAUDRATEPRESCALER_8         ((uint32_t)SPI_CR1_BR_1)
253
#define SPI_BAUDRATEPRESCALER_16        ((uint32_t)SPI_CR1_BR_1 | SPI_CR1_BR_0)
254
#define SPI_BAUDRATEPRESCALER_32        ((uint32_t)SPI_CR1_BR_2)
255
#define SPI_BAUDRATEPRESCALER_64        ((uint32_t)SPI_CR1_BR_2 | SPI_CR1_BR_0)
256
#define SPI_BAUDRATEPRESCALER_128       ((uint32_t)SPI_CR1_BR_2 | SPI_CR1_BR_1)
257
#define SPI_BAUDRATEPRESCALER_256       ((uint32_t)SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0)
258
 
259
/**
260
  * @}
261
  */
262
 
263
/** @defgroup SPI_MSB_LSB_transmission SPI MSB LSB transmission
264
  * @{
265
  */
266
#define SPI_FIRSTBIT_MSB                ((uint32_t)0x00000000)
267
#define SPI_FIRSTBIT_LSB                SPI_CR1_LSBFIRST
268
 
269
/**
270
  * @}
271
  */
272
 
273
/** @defgroup SPI_TI_mode SPI TI mode disable
274
  * @brief  SPI TI Mode not supported for STM32F1xx family
275
  * @{
276
  */
277
#define SPI_TIMODE_DISABLE             ((uint32_t)0x00000000)
278
 
279
/**
280
  * @}
281
  */
282
 
283
/** @defgroup SPI_CRC_Calculation SPI CRC Calculation
284
  * @{
285
  */
286
#define SPI_CRCCALCULATION_DISABLE      ((uint32_t)0x00000000)
287
#define SPI_CRCCALCULATION_ENABLE       SPI_CR1_CRCEN
288
 
289
/**
290
  * @}
291
  */
292
 
293
/** @defgroup SPI_Interrupt_configuration_definition SPI Interrupt configuration definition
294
  * @{
295
  */
296
#define SPI_IT_TXE                      SPI_CR2_TXEIE
297
#define SPI_IT_RXNE                     SPI_CR2_RXNEIE
298
#define SPI_IT_ERR                      SPI_CR2_ERRIE
299
/**
300
  * @}
301
  */
302
 
303
/** @defgroup SPI_Flag_definition SPI Flag definition
304
  * @{
305
  */
306
#define SPI_FLAG_RXNE                   SPI_SR_RXNE
307
#define SPI_FLAG_TXE                    SPI_SR_TXE
308
#define SPI_FLAG_CRCERR                 SPI_SR_CRCERR
309
#define SPI_FLAG_MODF                   SPI_SR_MODF
310
#define SPI_FLAG_OVR                    SPI_SR_OVR
311
#define SPI_FLAG_BSY                    SPI_SR_BSY
312
 
313
/**
314
  * @}
315
  */
316
 
317
/**
318
  * @}
319
  */
320
 
321
 
322
/* Private constants ---------------------------------------------------------*/
323
/** @defgroup SPI_Private_Constants SPI Private Constants
324
  * @{
325
  */
326
#define SPI_INVALID_CRC_ERROR     0          /* CRC error wrongly detected */
327
#define SPI_VALID_CRC_ERROR       1          /* CRC error is true */
328
/**
329
  * @}
330
  */
331
 
332
 
333
/* Exported macro ------------------------------------------------------------*/
334
/** @defgroup SPI_Exported_Macros SPI Exported Macros
335
  * @{
336
  */
337
 
338
/** @brief Reset SPI handle state
339
  * @param  __HANDLE__: specifies the SPI handle.
340
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
341
  * @retval None
342
  */
343
#define __HAL_SPI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SPI_STATE_RESET)
344
 
345
/** @brief  Enable the specified SPI interrupts.
346
  * @param  __HANDLE__: specifies the SPI handle.
347
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
348
  * @param  __INTERRUPT__: specifies the interrupt source to enable.
349
  *         This parameter can be one of the following values:
350
  *            @arg SPI_IT_TXE: Tx buffer empty interrupt enable
351
  *            @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
352
  *            @arg SPI_IT_ERR: Error interrupt enable
353
  * @retval None
354
  */
355
#define __HAL_SPI_ENABLE_IT(__HANDLE__, __INTERRUPT__)   SET_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__))
356
 
357
/** @brief  Disable the specified SPI interrupts.
358
  * @param  __HANDLE__: specifies the SPI handle.
359
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
360
  * @param  __INTERRUPT__: specifies the interrupt source to disable.
361
  *         This parameter can be one of the following values:
362
  *            @arg SPI_IT_TXE: Tx buffer empty interrupt enable
363
  *            @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
364
  *            @arg SPI_IT_ERR: Error interrupt enable
365
  * @retval None
366
  */
367
#define __HAL_SPI_DISABLE_IT(__HANDLE__, __INTERRUPT__)  CLEAR_BIT((__HANDLE__)->Instance->CR2, (__INTERRUPT__))
368
 
369
/** @brief  Check if the specified SPI interrupt source is enabled or disabled.
370
  * @param  __HANDLE__: specifies the SPI handle.
371
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
372
  * @param  __INTERRUPT__: specifies the SPI interrupt source to check.
373
  *          This parameter can be one of the following values:
374
  *             @arg SPI_IT_TXE: Tx buffer empty interrupt enable
375
  *             @arg SPI_IT_RXNE: RX buffer not empty interrupt enable
376
  *             @arg SPI_IT_ERR: Error interrupt enable
377
  * @retval The new state of __IT__ (TRUE or FALSE).
378
  */
379
#define __HAL_SPI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
380
 
381
/** @brief  Check whether the specified SPI flag is set or not.
382
  * @param  __HANDLE__: specifies the SPI handle.
383
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
384
  * @param  __FLAG__: specifies the flag to check.
385
  *         This parameter can be one of the following values:
386
  *            @arg SPI_FLAG_RXNE: Receive buffer not empty flag
387
  *            @arg SPI_FLAG_TXE: Transmit buffer empty flag
388
  *            @arg SPI_FLAG_CRCERR: CRC error flag
389
  *            @arg SPI_FLAG_MODF: Mode fault flag
390
  *            @arg SPI_FLAG_OVR: Overrun flag
391
  *            @arg SPI_FLAG_BSY: Busy flag
392
  * @retval The new state of __FLAG__ (TRUE or FALSE).
393
  */
394
#define __HAL_SPI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
395
 
396
/** @brief  Clear the SPI CRCERR pending flag.
397
  * @param  __HANDLE__: specifies the SPI handle.
398
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
399
  * @retval None
400
  */
401
#define __HAL_SPI_CLEAR_CRCERRFLAG(__HANDLE__) ((__HANDLE__)->Instance->SR = ~(SPI_FLAG_CRCERR))
402
 
403
/** @brief  Clear the SPI MODF pending flag.
404
  * @param  __HANDLE__: specifies the SPI handle.
405
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
406
  * @retval None
407
  */
408
#define __HAL_SPI_CLEAR_MODFFLAG(__HANDLE__)                      \
409
do{                                                               \
410
    __IO uint32_t tmpreg;                                         \
411
    tmpreg = (__HANDLE__)->Instance->SR;                          \
412
    tmpreg = CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE); \
413
    UNUSED(tmpreg);                                               \
414
}while(0) 
415
 
416
/** @brief  Clear the SPI OVR pending flag.
417
  * @param  __HANDLE__: specifies the SPI handle.
418
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
419
  * @retval None
420
  */
421
#define __HAL_SPI_CLEAR_OVRFLAG(__HANDLE__)                \
422
do{                                                        \
423
    __IO uint32_t tmpreg;                                  \
424
    tmpreg = (__HANDLE__)->Instance->DR;                   \
425
    tmpreg = (__HANDLE__)->Instance->SR;                   \
426
    UNUSED(tmpreg);                                        \
427
}while(0)  
428
 
429
 
430
/** @brief  Enables the SPI.
431
  * @param  __HANDLE__: specifies the SPI Handle.
432
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
433
  * @retval None
434
  */                                                
435
#define __HAL_SPI_ENABLE(__HANDLE__)  SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE)
436
 
437
/** @brief  Disables the SPI.
438
  * @param  __HANDLE__: specifies the SPI Handle.
439
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
440
  * @retval None
441
  */                                          
442
#define __HAL_SPI_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE)
443
 
444
/**
445
  * @}
446
  */
447
 
448
 
449
/* Private macros -----------------------------------------------------------*/
450
/** @defgroup SPI_Private_Macros SPI Private Macros
451
  * @{
452
  */
453
 
454
/** @brief  Checks if SPI Mode parameter is in allowed range.
455
  * @param  __MODE__: specifies the SPI Mode.
456
  *         This parameter can be a value of @ref SPI_mode
457
  * @retval None
458
  */
459
#define IS_SPI_MODE(__MODE__) (((__MODE__) == SPI_MODE_SLAVE) || ((__MODE__) == SPI_MODE_MASTER))
460
 
461
/** @brief  Checks if SPI Direction Mode parameter is in allowed range.
462
  * @param  __MODE__: specifies the SPI Direction Mode.
463
  *         This parameter can be a value of @ref SPI_Direction_mode
464
  * @retval None
465
  */
466
#define IS_SPI_DIRECTION_MODE(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES)        || \
467
                                         ((__MODE__) == SPI_DIRECTION_2LINES_RXONLY) || \
468
                                         ((__MODE__) == SPI_DIRECTION_1LINE))
469
 
470
/** @brief  Checks if SPI Direction Mode parameter is 1 or 2 lines.
471
  * @param  __MODE__: specifies the SPI Direction Mode.
472
  * @retval None
473
  */
474
#define IS_SPI_DIRECTION_2LINES_OR_1LINE(__MODE__) (((__MODE__) == SPI_DIRECTION_2LINES)  || \
475
                                                    ((__MODE__) == SPI_DIRECTION_1LINE))
476
 
477
/** @brief  Checks if SPI Direction Mode parameter is 2 lines.
478
  * @param  __MODE__: specifies the SPI Direction Mode.
479
  * @retval None
480
  */
481
#define IS_SPI_DIRECTION_2LINES(__MODE__) ((__MODE__) == SPI_DIRECTION_2LINES)
482
 
483
/** @brief  Checks if SPI Data Size parameter is in allowed range.
484
  * @param  __DATASIZE__: specifies the SPI Data Size.
485
  *         This parameter can be a value of @ref SPI_data_size
486
  * @retval None
487
  */
488
#define IS_SPI_DATASIZE(__DATASIZE__) (((__DATASIZE__) == SPI_DATASIZE_16BIT) || \
489
                                       ((__DATASIZE__) == SPI_DATASIZE_8BIT))
490
 
491
/** @brief  Checks if SPI Serial clock steady state parameter is in allowed range.
492
  * @param  __CPOL__: specifies the SPI serial clock steady state.
493
  *         This parameter can be a value of @ref SPI_Clock_Polarity
494
  * @retval None
495
  */
496
#define IS_SPI_CPOL(__CPOL__) (((__CPOL__) == SPI_POLARITY_LOW) || \
497
                               ((__CPOL__) == SPI_POLARITY_HIGH))
498
 
499
/** @brief  Checks if SPI Clock Phase parameter is in allowed range.
500
  * @param  __CPHA__: specifies the SPI Clock Phase.
501
  *         This parameter can be a value of @ref SPI_Clock_Phase
502
  * @retval None
503
  */
504
#define IS_SPI_CPHA(__CPHA__) (((__CPHA__) == SPI_PHASE_1EDGE) || \
505
                               ((__CPHA__) == SPI_PHASE_2EDGE))
506
 
507
/** @brief  Checks if SPI Slave select parameter is in allowed range.
508
  * @param  __NSS__: specifies the SPI Slave Slelect management parameter.
509
  *         This parameter can be a value of @ref SPI_Slave_Select_management
510
  * @retval None
511
  */
512
#define IS_SPI_NSS(__NSS__) (((__NSS__) == SPI_NSS_SOFT)       || \
513
                             ((__NSS__) == SPI_NSS_HARD_INPUT) || \
514
                             ((__NSS__) == SPI_NSS_HARD_OUTPUT))
515
 
516
/** @brief  Checks if SPI Baudrate prescaler parameter is in allowed range.
517
  * @param  __PRESCALER__: specifies the SPI Baudrate prescaler.
518
  *         This parameter can be a value of @ref SPI_BaudRate_Prescaler
519
  * @retval None
520
  */
521
#define IS_SPI_BAUDRATE_PRESCALER(__PRESCALER__) (((__PRESCALER__) == SPI_BAUDRATEPRESCALER_2)   || \
522
                                                  ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_4)   || \
523
                                                  ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_8)   || \
524
                                                  ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_16)  || \
525
                                                  ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_32)  || \
526
                                                  ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_64)  || \
527
                                                  ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_128) || \
528
                                                  ((__PRESCALER__) == SPI_BAUDRATEPRESCALER_256))
529
 
530
/** @brief  Checks if SPI MSB LSB transmission parameter is in allowed range.
531
  * @param  __BIT__: specifies the SPI MSB LSB transmission (whether data transfer starts from MSB or LSB bit).
532
  *         This parameter can be a value of @ref SPI_MSB_LSB_transmission
533
  * @retval None
534
  */
535
#define IS_SPI_FIRST_BIT(__BIT__) (((__BIT__) == SPI_FIRSTBIT_MSB) || \
536
                                   ((__BIT__) == SPI_FIRSTBIT_LSB))
537
 
538
/** @brief  Checks if SPI TI mode parameter is in allowed range.
539
  * @param  __MODE__: specifies the SPI TI mode.
540
  *         This parameter can be a value of @ref SPI_TI_mode
541
  * @retval None
542
  */
543
#define IS_SPI_TIMODE(__MODE__) ((__MODE__) == SPI_TIMODE_DISABLE)
544
 
545
/** @brief  Checks if SPI CRC calculation enabled state is in allowed range.
546
  * @param  __CALCULATION__: specifies the SPI CRC calculation enable state.
547
  *         This parameter can be a value of @ref SPI_CRC_Calculation
548
  * @retval None
549
  */
550
#define IS_SPI_CRC_CALCULATION(__CALCULATION__) (((__CALCULATION__) == SPI_CRCCALCULATION_DISABLE) || \
551
                                                 ((__CALCULATION__) == SPI_CRCCALCULATION_ENABLE))
552
 
553
/** @brief  Checks if SPI polynomial value to be used for the CRC calculation, is in allowed range.
554
  * @param  __POLYNOMIAL__: specifies the SPI polynomial value to be used for the CRC calculation.
555
  *         This parameter must be a number between Min_Data = 0 and Max_Data = 65535
556
  * @retval None
557
  */
558
#define IS_SPI_CRC_POLYNOMIAL(__POLYNOMIAL__) (((__POLYNOMIAL__) >= 0x1) && ((__POLYNOMIAL__) <= 0xFFFF))
559
 
560
/** @brief  Sets the SPI transmit-only mode.
561
  * @param  __HANDLE__: specifies the SPI Handle.
562
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
563
  * @retval None
564
  */
565
#define SPI_1LINE_TX(__HANDLE__)  SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE)
566
 
567
/** @brief  Sets the SPI receive-only mode.
568
  * @param  __HANDLE__: specifies the SPI Handle.
569
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
570
  * @retval None
571
  */              
572
#define SPI_1LINE_RX(__HANDLE__)  CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_BIDIOE) 
573
 
574
/** @brief  Resets the CRC calculation of the SPI.
575
  * @param  __HANDLE__: specifies the SPI Handle.
576
  *         This parameter can be SPI where x: 1, 2, or 3 to select the SPI peripheral.
577
  * @retval None
578
  */
579
#define SPI_RESET_CRC(__HANDLE__) do{CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);\
580
                                     SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_CRCEN);}while(0)
581
 
582
/**
583
  * @}
584
  */
585
 
586
/* Exported functions --------------------------------------------------------*/
587
/** @addtogroup SPI_Exported_Functions
588
  * @{
589
  */
590
 
591
/* Initialization/de-initialization functions  **********************************/
592
/** @addtogroup SPI_Exported_Functions_Group1
593
  * @{
594
  */
595
HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi);
596
HAL_StatusTypeDef HAL_SPI_DeInit (SPI_HandleTypeDef *hspi);
597
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi);
598
void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi);
599
/**
600
  * @}
601
  */
602
 
603
/* I/O operation functions  *****************************************************/
604
/** @addtogroup SPI_Exported_Functions_Group2
605
  * @{
606
  */
607
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
608
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);
609
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout);
610
HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
611
HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
612
HAL_StatusTypeDef HAL_SPI_TransmitReceive_IT(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
613
HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
614
HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size);
615
HAL_StatusTypeDef HAL_SPI_TransmitReceive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size);
616
HAL_StatusTypeDef HAL_SPI_DMAPause(SPI_HandleTypeDef *hspi);
617
HAL_StatusTypeDef HAL_SPI_DMAResume(SPI_HandleTypeDef *hspi);
618
HAL_StatusTypeDef HAL_SPI_DMAStop(SPI_HandleTypeDef *hspi);
619
 
620
void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi);
621
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi);
622
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi);
623
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi);
624
void HAL_SPI_ErrorCallback(SPI_HandleTypeDef *hspi);
625
void HAL_SPI_TxHalfCpltCallback(SPI_HandleTypeDef *hspi);
626
void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi);
627
void HAL_SPI_TxRxHalfCpltCallback(SPI_HandleTypeDef *hspi);
628
/**
629
  * @}
630
  */
631
 
632
 
633
/* Peripheral State and Control functions  **************************************/
634
/** @addtogroup SPI_Exported_Functions_Group3
635
  * @{
636
  */
637
HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi);
638
uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi);
639
 
640
/**
641
  * @}
642
  */
643
 
644
/**
645
  * @}
646
  */
647
 
648
 
649
/* Private functions --------------------------------------------------------*/
650
/** @addtogroup SPI_Private_Functions
651
  * @{
652
  */
653
uint8_t SPI_ISCRCErrorValid(SPI_HandleTypeDef *hspi);
654
 
655
/**
656
  * @}
657
  */
658
 
659
 
660
/**
661
  * @}
662
  */
663
 
664
/**
665
  * @}
666
  */
667
 
668
#ifdef __cplusplus
669
}
670
#endif
671
 
672
#endif /* __STM32F1xx_HAL_SPI_H */
673
 
674
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/