Subversion Repositories ScreenTimer

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f0xx_hal_smartcard_ex.h
4
  * @author  MCD Application Team
5
  * @brief   Header file of SMARTCARD HAL Extended module.
6
  ******************************************************************************
7
  * @attention
8
  *
9
  * <h2><center>&copy; Copyright (c) 2016 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_SMARTCARD_EX_H
22
#define STM32F0xx_HAL_SMARTCARD_EX_H
23
 
24
#ifdef __cplusplus
25
extern "C" {
26
#endif
27
#if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
28
/* Includes ------------------------------------------------------------------*/
29
#include "stm32f0xx_hal_def.h"
30
 
31
/** @addtogroup STM32F0xx_HAL_Driver
32
  * @{
33
  */
34
 
35
/** @addtogroup SMARTCARDEx
36
  * @{
37
  */
38
 
39
/* Exported types ------------------------------------------------------------*/
40
/* Exported constants --------------------------------------------------------*/
41
 
42
/** @addtogroup SMARTCARDEx_Exported_Constants  SMARTCARD Extended Exported Constants
43
  * @{
44
  */
45
 
46
/** @defgroup SMARTCARDEx_Transmission_Completion_Indication SMARTCARD Transmission Completion Indication
47
  * @{
48
  */
49
#if defined(USART_TCBGT_SUPPORT)
50
#define SMARTCARD_TCBGT      SMARTCARD_IT_TCBGT /*!< SMARTCARD transmission complete before guard time */
51
#endif /* USART_TCBGT_SUPPORT */
52
#define SMARTCARD_TC         SMARTCARD_IT_TC    /*!< SMARTCARD transmission complete (flag raised when guard time has elapsed) */
53
/**
54
  * @}
55
  */
56
 
57
/** @defgroup SMARTCARDEx_Advanced_Features_Initialization_Type SMARTCARD advanced feature initialization type
58
  * @{
59
  */
60
#define SMARTCARD_ADVFEATURE_NO_INIT                 0x00000000U    /*!< No advanced feature initialization                  */
61
#define SMARTCARD_ADVFEATURE_TXINVERT_INIT           0x00000001U    /*!< TX pin active level inversion                       */
62
#define SMARTCARD_ADVFEATURE_RXINVERT_INIT           0x00000002U    /*!< RX pin active level inversion                       */
63
#define SMARTCARD_ADVFEATURE_DATAINVERT_INIT         0x00000004U    /*!< Binary data inversion                               */
64
#define SMARTCARD_ADVFEATURE_SWAP_INIT               0x00000008U    /*!< TX/RX pins swap                                     */
65
#define SMARTCARD_ADVFEATURE_RXOVERRUNDISABLE_INIT   0x00000010U    /*!< RX overrun disable                                  */
66
#define SMARTCARD_ADVFEATURE_DMADISABLEONERROR_INIT  0x00000020U    /*!< DMA disable on Reception Error                      */
67
#define SMARTCARD_ADVFEATURE_MSBFIRST_INIT           0x00000080U    /*!< Most significant bit sent/received first            */
68
#if defined(USART_TCBGT_SUPPORT)
69
#define SMARTCARD_ADVFEATURE_TXCOMPLETION            0x00000100U    /*!< TX completion indication before of after guard time */
70
#endif /* USART_TCBGT_SUPPORT */
71
/**
72
  * @}
73
  */
74
 
75
/** @defgroup SMARTCARDEx_Flags SMARTCARD Flags
76
  *        Elements values convention: 0xXXXX
77
  *           - 0xXXXX  : Flag mask in the ISR register
78
  * @{
79
  */
80
#if defined(USART_TCBGT_SUPPORT)
81
#define SMARTCARD_FLAG_TCBGT          USART_ISR_TCBGT         /*!< SMARTCARD transmission complete before guard time completion */
82
#endif /* USART_TCBGT_SUPPORT */
83
#define SMARTCARD_FLAG_REACK          USART_ISR_REACK         /*!< SMARTCARD receive enable acknowledge flag  */
84
#define SMARTCARD_FLAG_TEACK          USART_ISR_TEACK         /*!< SMARTCARD transmit enable acknowledge flag */
85
#define SMARTCARD_FLAG_BUSY           USART_ISR_BUSY          /*!< SMARTCARD busy flag                        */
86
#define SMARTCARD_FLAG_EOBF           USART_ISR_EOBF          /*!< SMARTCARD end of block flag                */
87
#define SMARTCARD_FLAG_RTOF           USART_ISR_RTOF          /*!< SMARTCARD receiver timeout flag            */
88
#define SMARTCARD_FLAG_TXE            USART_ISR_TXE           /*!< SMARTCARD transmit data register empty     */
89
#define SMARTCARD_FLAG_TC             USART_ISR_TC            /*!< SMARTCARD transmission complete            */
90
#define SMARTCARD_FLAG_RXNE           USART_ISR_RXNE          /*!< SMARTCARD read data register not empty     */
91
#define SMARTCARD_FLAG_IDLE           USART_ISR_IDLE          /*!< SMARTCARD idle line detection              */
92
#define SMARTCARD_FLAG_ORE            USART_ISR_ORE           /*!< SMARTCARD overrun error                    */
93
#define SMARTCARD_FLAG_NE             USART_ISR_NE            /*!< SMARTCARD noise error                      */
94
#define SMARTCARD_FLAG_FE             USART_ISR_FE            /*!< SMARTCARD frame error                      */
95
#define SMARTCARD_FLAG_PE             USART_ISR_PE            /*!< SMARTCARD parity error                     */
96
/**
97
  * @}
98
  */
99
 
100
/** @defgroup SMARTCARDEx_Interrupt_definition SMARTCARD Interrupts Definition
101
  *        Elements values convention: 000ZZZZZ0XXYYYYYb
102
  *           - YYYYY  : Interrupt source position in the XX register (5 bits)
103
  *           - XX  : Interrupt source register (2 bits)
104
  *                 - 01: CR1 register
105
  *                 - 10: CR2 register
106
  *                 - 11: CR3 register
107
  *           - ZZZZZ  : Flag position in the ISR register(5 bits)
108
  * @{
109
  */
110
#define SMARTCARD_IT_PE                     0x0028U           /*!< SMARTCARD parity error interruption                 */
111
#define SMARTCARD_IT_TXE                    0x0727U           /*!< SMARTCARD transmit data register empty interruption */
112
#define SMARTCARD_IT_TC                     0x0626U           /*!< SMARTCARD transmission complete interruption        */
113
#define SMARTCARD_IT_RXNE                   0x0525U           /*!< SMARTCARD read data register not empty interruption */
114
#define SMARTCARD_IT_IDLE                   0x0424U           /*!< SMARTCARD idle line detection interruption          */
115
 
116
#define SMARTCARD_IT_ERR                    0x0060U           /*!< SMARTCARD error interruption         */
117
#define SMARTCARD_IT_ORE                    0x0300U           /*!< SMARTCARD overrun error interruption */
118
#define SMARTCARD_IT_NE                     0x0200U           /*!< SMARTCARD noise error interruption   */
119
#define SMARTCARD_IT_FE                     0x0100U           /*!< SMARTCARD frame error interruption   */
120
 
121
#define SMARTCARD_IT_EOB                    0x0C3BU           /*!< SMARTCARD end of block interruption     */
122
#define SMARTCARD_IT_RTO                    0x0B3AU           /*!< SMARTCARD receiver timeout interruption */
123
#if defined(USART_TCBGT_SUPPORT)
124
#define SMARTCARD_IT_TCBGT                  0x1978U           /*!< SMARTCARD transmission complete before guard time completion interruption */
125
#endif /* USART_TCBGT_SUPPORT */
126
 
127
/**
128
  * @}
129
  */
130
 
131
/** @defgroup SMARTCARDEx_IT_CLEAR_Flags SMARTCARD Interruption Clear Flags
132
  * @{
133
  */
134
#define SMARTCARD_CLEAR_PEF                 USART_ICR_PECF    /*!< SMARTCARD parity error clear flag          */
135
#define SMARTCARD_CLEAR_FEF                 USART_ICR_FECF    /*!< SMARTCARD framing error clear flag         */
136
#define SMARTCARD_CLEAR_NEF                 USART_ICR_NCF     /*!< SMARTCARD noise error detected clear flag  */
137
#define SMARTCARD_CLEAR_OREF                USART_ICR_ORECF   /*!< SMARTCARD overrun error clear flag         */
138
#define SMARTCARD_CLEAR_IDLEF               USART_ICR_IDLECF  /*!< SMARTCARD idle line detected clear flag    */
139
#define SMARTCARD_CLEAR_TCF                 USART_ICR_TCCF    /*!< SMARTCARD transmission complete clear flag */
140
#if defined(USART_TCBGT_SUPPORT)
141
#define SMARTCARD_CLEAR_TCBGTF              USART_ICR_TCBGTCF /*!< SMARTCARD transmission complete before guard time completion clear flag */
142
#endif /* USART_TCBGT_SUPPORT */
143
#define SMARTCARD_CLEAR_RTOF                USART_ICR_RTOCF   /*!< SMARTCARD receiver time out clear flag     */
144
#define SMARTCARD_CLEAR_EOBF                USART_ICR_EOBCF   /*!< SMARTCARD end of block clear flag          */
145
/**
146
  * @}
147
  */
148
 
149
/**
150
  * @}
151
  */
152
/* Exported macros -----------------------------------------------------------*/
153
/* Private macros ------------------------------------------------------------*/
154
/** @defgroup SMARTCARDEx_Private_Macros SMARTCARD Extended Private Macros
155
  * @{
156
  */
157
 
158
/** @brief  Report the SMARTCARD clock source.
159
  * @param  __HANDLE__ specifies the SMARTCARD Handle.
160
  * @param  __CLOCKSOURCE__ output variable.
161
  * @retval the SMARTCARD clocking source, written in __CLOCKSOURCE__.
162
  */
163
#if defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx)
164
#define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
165
  do {                                                         \
166
     switch(__HAL_RCC_GET_USART1_SOURCE())                     \
167
     {                                                         \
168
      case RCC_USART1CLKSOURCE_PCLK1:                          \
169
        (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;           \
170
        break;                                                 \
171
      case RCC_USART1CLKSOURCE_HSI:                            \
172
        (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;             \
173
        break;                                                 \
174
      case RCC_USART1CLKSOURCE_SYSCLK:                         \
175
        (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK;          \
176
        break;                                                 \
177
      case RCC_USART1CLKSOURCE_LSE:                            \
178
        (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;             \
179
        break;                                                 \
180
      default:                                                 \
181
        (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;       \
182
        break;                                                 \
183
     }                                                         \
184
  } while(0)
185
#elif defined (STM32F030x8) || defined (STM32F070x6) ||  defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F051x8) || defined (STM32F058xx)
186
#define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
187
  do {                                                         \
188
    if((__HANDLE__)->Instance == USART1)                       \
189
    {                                                          \
190
       switch(__HAL_RCC_GET_USART1_SOURCE())                   \
191
       {                                                       \
192
        case RCC_USART1CLKSOURCE_PCLK1:                        \
193
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;         \
194
          break;                                               \
195
        case RCC_USART1CLKSOURCE_HSI:                          \
196
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;           \
197
          break;                                               \
198
        case RCC_USART1CLKSOURCE_SYSCLK:                       \
199
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK;        \
200
          break;                                               \
201
        case RCC_USART1CLKSOURCE_LSE:                          \
202
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;           \
203
          break;                                               \
204
        default:                                               \
205
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;     \
206
          break;                                               \
207
       }                                                       \
208
    }                                                          \
209
    else if((__HANDLE__)->Instance == USART2)                  \
210
    {                                                          \
211
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
212
    }                                                          \
213
    else                                                       \
214
    {                                                          \
215
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;         \
216
    }                                                          \
217
  } while(0)
218
#elif defined (STM32F070xB)
219
#define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
220
  do {                                                         \
221
    if((__HANDLE__)->Instance == USART1)                       \
222
    {                                                          \
223
       switch(__HAL_RCC_GET_USART1_SOURCE())                   \
224
       {                                                       \
225
        case RCC_USART1CLKSOURCE_PCLK1:                        \
226
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;         \
227
          break;                                               \
228
        case RCC_USART1CLKSOURCE_HSI:                          \
229
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;           \
230
          break;                                               \
231
        case RCC_USART1CLKSOURCE_SYSCLK:                       \
232
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK;        \
233
          break;                                               \
234
        case RCC_USART1CLKSOURCE_LSE:                          \
235
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;           \
236
          break;                                               \
237
        default:                                               \
238
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;     \
239
          break;                                               \
240
       }                                                       \
241
    }                                                          \
242
    else if((__HANDLE__)->Instance == USART2)                  \
243
    {                                                          \
244
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
245
    }                                                          \
246
    else if((__HANDLE__)->Instance == USART3)                  \
247
    {                                                          \
248
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
249
    }                                                          \
250
    else if((__HANDLE__)->Instance == USART4)                  \
251
    {                                                          \
252
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
253
    }                                                          \
254
    else                                                       \
255
    {                                                          \
256
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;         \
257
    }                                                          \
258
  } while(0)
259
#elif defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)
260
#define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
261
  do {                                                         \
262
    if((__HANDLE__)->Instance == USART1)                       \
263
    {                                                          \
264
       switch(__HAL_RCC_GET_USART1_SOURCE())                   \
265
       {                                                       \
266
        case RCC_USART1CLKSOURCE_PCLK1:                        \
267
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;         \
268
          break;                                               \
269
        case RCC_USART1CLKSOURCE_HSI:                          \
270
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;           \
271
          break;                                               \
272
        case RCC_USART1CLKSOURCE_SYSCLK:                       \
273
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK;        \
274
          break;                                               \
275
        case RCC_USART1CLKSOURCE_LSE:                          \
276
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;           \
277
          break;                                               \
278
        default:                                               \
279
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;     \
280
          break;                                               \
281
       }                                                       \
282
    }                                                          \
283
    else if((__HANDLE__)->Instance == USART2)                  \
284
    {                                                          \
285
       switch(__HAL_RCC_GET_USART2_SOURCE())                   \
286
       {                                                       \
287
        case RCC_USART2CLKSOURCE_PCLK1:                        \
288
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;         \
289
          break;                                               \
290
        case RCC_USART2CLKSOURCE_HSI:                          \
291
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;           \
292
          break;                                               \
293
        case RCC_USART2CLKSOURCE_SYSCLK:                       \
294
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK;        \
295
          break;                                               \
296
        case RCC_USART2CLKSOURCE_LSE:                          \
297
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;           \
298
          break;                                               \
299
        default:                                               \
300
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;     \
301
          break;                                               \
302
       }                                                       \
303
    }                                                          \
304
    else if((__HANDLE__)->Instance == USART3)                  \
305
    {                                                          \
306
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
307
    }                                                          \
308
    else if((__HANDLE__)->Instance == USART4)                  \
309
    {                                                          \
310
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
311
    }                                                          \
312
    else                                                       \
313
    {                                                          \
314
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;         \
315
    }                                                          \
316
  } while(0)
317
#elif defined(STM32F091xC) || defined (STM32F098xx)
318
#define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
319
  do {                                                         \
320
    if((__HANDLE__)->Instance == USART1)                       \
321
    {                                                          \
322
       switch(__HAL_RCC_GET_USART1_SOURCE())                   \
323
       {                                                       \
324
        case RCC_USART1CLKSOURCE_PCLK1:                        \
325
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;         \
326
          break;                                               \
327
        case RCC_USART1CLKSOURCE_HSI:                          \
328
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;           \
329
          break;                                               \
330
        case RCC_USART1CLKSOURCE_SYSCLK:                       \
331
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK;        \
332
          break;                                               \
333
        case RCC_USART1CLKSOURCE_LSE:                          \
334
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;           \
335
          break;                                               \
336
        default:                                               \
337
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;     \
338
          break;                                               \
339
       }                                                       \
340
    }                                                          \
341
    else if((__HANDLE__)->Instance == USART2)                  \
342
    {                                                          \
343
       switch(__HAL_RCC_GET_USART2_SOURCE())                   \
344
       {                                                       \
345
        case RCC_USART2CLKSOURCE_PCLK1:                        \
346
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;         \
347
          break;                                               \
348
        case RCC_USART2CLKSOURCE_HSI:                          \
349
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;           \
350
          break;                                               \
351
        case RCC_USART2CLKSOURCE_SYSCLK:                       \
352
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK;        \
353
          break;                                               \
354
        case RCC_USART2CLKSOURCE_LSE:                          \
355
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;           \
356
          break;                                               \
357
        default:                                               \
358
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;     \
359
          break;                                               \
360
       }                                                       \
361
    }                                                          \
362
    else if((__HANDLE__)->Instance == USART3)                  \
363
    {                                                          \
364
       switch(__HAL_RCC_GET_USART3_SOURCE())                   \
365
       {                                                       \
366
        case RCC_USART3CLKSOURCE_PCLK1:                        \
367
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;         \
368
          break;                                               \
369
        case RCC_USART3CLKSOURCE_HSI:                          \
370
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;           \
371
          break;                                               \
372
        case RCC_USART3CLKSOURCE_SYSCLK:                       \
373
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK;        \
374
          break;                                               \
375
        case RCC_USART3CLKSOURCE_LSE:                          \
376
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;           \
377
          break;                                               \
378
        default:                                               \
379
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;     \
380
          break;                                               \
381
       }                                                       \
382
    }                                                          \
383
    else if((__HANDLE__)->Instance == USART4)                  \
384
    {                                                          \
385
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
386
    }                                                          \
387
    else if((__HANDLE__)->Instance == USART5)                  \
388
    {                                                          \
389
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
390
    }                                                          \
391
    else if((__HANDLE__)->Instance == USART6)                  \
392
    {                                                          \
393
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
394
    }                                                          \
395
    else if((__HANDLE__)->Instance == USART7)                  \
396
    {                                                          \
397
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
398
    }                                                          \
399
    else if((__HANDLE__)->Instance == USART8)                  \
400
    {                                                          \
401
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
402
    }                                                          \
403
    else                                                       \
404
    {                                                          \
405
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;         \
406
    }                                                          \
407
  } while(0)
408
#elif defined(STM32F030xC)
409
#define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
410
  do {                                                         \
411
    if((__HANDLE__)->Instance == USART1)                       \
412
    {                                                          \
413
       switch(__HAL_RCC_GET_USART1_SOURCE())                   \
414
       {                                                       \
415
        case RCC_USART1CLKSOURCE_PCLK1:                        \
416
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;         \
417
          break;                                               \
418
        case RCC_USART1CLKSOURCE_HSI:                          \
419
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;           \
420
          break;                                               \
421
        case RCC_USART1CLKSOURCE_SYSCLK:                       \
422
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK;        \
423
          break;                                               \
424
        case RCC_USART1CLKSOURCE_LSE:                          \
425
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;           \
426
          break;                                               \
427
        default:                                               \
428
          (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;     \
429
          break;                                               \
430
       }                                                       \
431
    }                                                          \
432
    else if((__HANDLE__)->Instance == USART2)                  \
433
    {                                                          \
434
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
435
    }                                                          \
436
    else if((__HANDLE__)->Instance == USART3)                  \
437
    {                                                          \
438
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
439
    }                                                          \
440
    else if((__HANDLE__)->Instance == USART4)                  \
441
    {                                                          \
442
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
443
    }                                                          \
444
    else if((__HANDLE__)->Instance == USART5)                  \
445
    {                                                          \
446
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
447
    }                                                          \
448
    else if((__HANDLE__)->Instance == USART6)                  \
449
    {                                                          \
450
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1;             \
451
    }                                                          \
452
    else                                                       \
453
    {                                                          \
454
      (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;         \
455
    }                                                          \
456
  } while(0)
457
#endif /* defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx) */
458
/** @brief  Set the Transmission Completion flag
459
  * @param  __HANDLE__ specifies the SMARTCARD Handle.
460
  * @note  If TCBGT (Transmission Complete Before Guard Time) flag is not available or if
461
  *        AdvancedInit.TxCompletionIndication is not already filled, the latter is forced
462
  *        to SMARTCARD_TC (transmission completion indication when guard time has elapsed).
463
  * @retval None
464
  */
465
#if defined(USART_TCBGT_SUPPORT)
466
#define SMARTCARD_TRANSMISSION_COMPLETION_SETTING(__HANDLE__)                                                \
467
  do {                                                                                                       \
468
    if (HAL_IS_BIT_CLR((__HANDLE__)->AdvancedInit.AdvFeatureInit, SMARTCARD_ADVFEATURE_TXCOMPLETION))        \
469
    {                                                                                                        \
470
      (__HANDLE__)->AdvancedInit.TxCompletionIndication = SMARTCARD_TC;                                      \
471
    }                                                                                                        \
472
    else                                                                                                     \
473
    {                                                                                                        \
474
      assert_param(IS_SMARTCARD_TRANSMISSION_COMPLETION((__HANDLE__)->AdvancedInit.TxCompletionIndication)); \
475
    }                                                                                                        \
476
  } while(0U)
477
#else
478
#define SMARTCARD_TRANSMISSION_COMPLETION_SETTING(__HANDLE__)         \
479
  do {                                                                \
480
    (__HANDLE__)->AdvancedInit.TxCompletionIndication = SMARTCARD_TC; \
481
  } while(0U)
482
#endif /* USART_TCBGT_SUPPORT */
483
 
484
/** @brief  Return the transmission completion flag.
485
  * @param  __HANDLE__ specifies the SMARTCARD Handle.
486
  * @note  Based on AdvancedInit.TxCompletionIndication setting, return TC or TCBGT flag.
487
  *        When TCBGT flag (Transmission Complete Before Guard Time) is not available, TC flag is
488
  *        reported.
489
  * @retval Transmission completion flag
490
  */
491
#if defined(USART_TCBGT_SUPPORT)
492
#define SMARTCARD_TRANSMISSION_COMPLETION_FLAG(__HANDLE__)  \
493
  (((__HANDLE__)->AdvancedInit.TxCompletionIndication == SMARTCARD_TC) ? (SMARTCARD_FLAG_TC) :  (SMARTCARD_FLAG_TCBGT))
494
#else
495
#define SMARTCARD_TRANSMISSION_COMPLETION_FLAG(__HANDLE__)    (SMARTCARD_FLAG_TC)
496
#endif /* USART_TCBGT_SUPPORT */
497
 
498
 
499
/** @brief Ensure that SMARTCARD frame transmission completion used flag is valid.
500
  * @param __TXCOMPLETE__ SMARTCARD frame transmission completion used flag.
501
  * @retval SET (__TXCOMPLETE__ is valid) or RESET (__TXCOMPLETE__ is invalid)
502
  */
503
#if defined(USART_TCBGT_SUPPORT)
504
#define IS_SMARTCARD_TRANSMISSION_COMPLETION(__TXCOMPLETE__) (((__TXCOMPLETE__) == SMARTCARD_TCBGT) || \
505
                                                              ((__TXCOMPLETE__) == SMARTCARD_TC))
506
#else
507
#define IS_SMARTCARD_TRANSMISSION_COMPLETION(__TXCOMPLETE__) ((__TXCOMPLETE__) == SMARTCARD_TC)
508
#endif /* USART_TCBGT_SUPPORT */
509
 
510
/**
511
  * @}
512
  */
513
 
514
/* Exported functions --------------------------------------------------------*/
515
/** @addtogroup SMARTCARDEx_Exported_Functions
516
  * @{
517
  */
518
 
519
/* Initialization and de-initialization functions  ****************************/
520
/* IO operation methods *******************************************************/
521
 
522
/** @addtogroup SMARTCARDEx_Exported_Functions_Group1
523
  * @{
524
  */
525
 
526
/* Peripheral Control functions ***********************************************/
527
void              HAL_SMARTCARDEx_BlockLength_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t BlockLength);
528
void              HAL_SMARTCARDEx_TimeOut_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t TimeOutValue);
529
HAL_StatusTypeDef HAL_SMARTCARDEx_EnableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard);
530
HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard);
531
 
532
/**
533
  * @}
534
  */
535
 
536
/* Exported functions --------------------------------------------------------*/
537
/** @addtogroup SMARTCARDEx_Exported_Functions_Group2
538
  * @{
539
  */
540
 
541
/* IO operation functions *****************************************************/
542
 
543
/**
544
  * @}
545
  */
546
 
547
 
548
/**
549
  * @}
550
  */
551
 
552
/* Private functions ---------------------------------------------------------*/
553
 
554
/**
555
  * @}
556
  */
557
 
558
/**
559
  * @}
560
  */
561
#endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)  */
562
#ifdef __cplusplus
563
}
564
#endif
565
 
566
#endif /* STM32F0xx_HAL_SMARTCARD_EX_H */
567
 
568
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/