Subversion Repositories ScreenTimer

Rev

Blame | Last modification | View Log | Download | RSS feed

  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****/
  569.