Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:36

0001 /**
0002   ******************************************************************************
0003   * @file    stm32h7xx_hal_smartcard.h
0004   * @author  MCD Application Team
0005   * @brief   Header file of SMARTCARD HAL module.
0006   ******************************************************************************
0007   * @attention
0008   *
0009   * Copyright (c) 2017 STMicroelectronics.
0010   * All rights reserved.
0011   *
0012   * This software is licensed under terms that can be found in the LICENSE file
0013   * in the root directory of this software component.
0014   * If no LICENSE file comes with this software, it is provided AS-IS.
0015   *
0016   ******************************************************************************
0017   */
0018 
0019 /* Define to prevent recursive inclusion -------------------------------------*/
0020 #ifndef STM32H7xx_HAL_SMARTCARD_H
0021 #define STM32H7xx_HAL_SMARTCARD_H
0022 
0023 #ifdef __cplusplus
0024 extern "C" {
0025 #endif
0026 
0027 /* Includes ------------------------------------------------------------------*/
0028 #include "stm32h7xx_hal_def.h"
0029 
0030 /** @addtogroup STM32H7xx_HAL_Driver
0031   * @{
0032   */
0033 
0034 /** @addtogroup SMARTCARD
0035   * @{
0036   */
0037 
0038 /* Exported types ------------------------------------------------------------*/
0039 /** @defgroup SMARTCARD_Exported_Types SMARTCARD Exported Types
0040   * @ingroup RTEMSBSPsARMSTM32H7
0041   * @{
0042   */
0043 
0044 /**
0045   * @brief SMARTCARD Init Structure definition
0046   */
0047 typedef struct
0048 {
0049   uint32_t BaudRate;                  /*!< Configures the SmartCard communication baud rate.
0050                                            The baud rate register is computed using the following formula:
0051                                               Baud Rate Register = ((usart_ker_ckpres) / ((hsmartcard->Init.BaudRate)))
0052                                            where usart_ker_ckpres is the USART input clock divided by a prescaler */
0053 
0054   uint32_t WordLength;                /*!< Specifies the number of data bits transmitted or received in a frame.
0055                                            This parameter @ref SMARTCARD_Word_Length can only be
0056                                            set to 9 (8 data + 1 parity bits). */
0057 
0058   uint32_t StopBits;                  /*!< Specifies the number of stop bits.
0059                                            This parameter can be a value of @ref SMARTCARD_Stop_Bits. */
0060 
0061   uint16_t Parity;                    /*!< Specifies the parity mode.
0062                                            This parameter can be a value of @ref SMARTCARD_Parity
0063                                            @note The parity is enabled by default (PCE is forced to 1).
0064                                                  Since the WordLength is forced to 8 bits + parity, M is
0065                                                  forced to 1 and the parity bit is the 9th bit. */
0066 
0067   uint16_t Mode;                      /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
0068                                            This parameter can be a value of @ref SMARTCARD_Mode */
0069 
0070   uint16_t CLKPolarity;               /*!< Specifies the steady state of the serial clock.
0071                                            This parameter can be a value of @ref SMARTCARD_Clock_Polarity */
0072 
0073   uint16_t CLKPhase;                  /*!< Specifies the clock transition on which the bit capture is made.
0074                                            This parameter can be a value of @ref SMARTCARD_Clock_Phase */
0075 
0076   uint16_t CLKLastBit;                /*!< Specifies whether the clock pulse corresponding to the last transmitted
0077                                            data bit (MSB) has to be output on the SCLK pin in synchronous mode.
0078                                            This parameter can be a value of @ref SMARTCARD_Last_Bit */
0079 
0080   uint16_t OneBitSampling;            /*!< Specifies whether a single sample or three samples' majority vote
0081                                            is selected. Selecting the single sample method increases
0082                                            the receiver tolerance to clock deviations. This parameter can be a value
0083                                            of @ref SMARTCARD_OneBit_Sampling. */
0084 
0085   uint8_t  Prescaler;                 /*!< Specifies the SmartCard Prescaler.
0086                                            This parameter can be any value from 0x01 to 0x1F. Prescaler value is
0087                                            multiplied by 2 to give the division factor of the source clock frequency */
0088 
0089   uint8_t  GuardTime;                 /*!< Specifies the SmartCard Guard Time applied after stop bits. */
0090 
0091   uint16_t NACKEnable;                /*!< Specifies whether the SmartCard NACK transmission is enabled
0092                                            in case of parity error.
0093                                            This parameter can be a value of @ref SMARTCARD_NACK_Enable */
0094 
0095   uint32_t TimeOutEnable;             /*!< Specifies whether the receiver timeout is enabled.
0096                                             This parameter can be a value of @ref SMARTCARD_Timeout_Enable*/
0097 
0098   uint32_t TimeOutValue;              /*!< Specifies the receiver time out value in number of baud blocks:
0099                                            it is used to implement the Character Wait Time (CWT) and
0100                                            Block Wait Time (BWT). It is coded over 24 bits. */
0101 
0102   uint8_t BlockLength;                /*!< Specifies the SmartCard Block Length in T=1 Reception mode.
0103                                            This parameter can be any value from 0x0 to 0xFF */
0104 
0105   uint8_t AutoRetryCount;             /*!< Specifies the SmartCard auto-retry count (number of retries in
0106                                             receive and transmit mode). When set to 0, retransmission is
0107                                             disabled. Otherwise, its maximum value is 7 (before signalling
0108                                             an error) */
0109 
0110   uint32_t ClockPrescaler;            /*!< Specifies the prescaler value used to divide the USART clock source.
0111                                            This parameter can be a value of @ref SMARTCARD_ClockPrescaler. */
0112 
0113 } SMARTCARD_InitTypeDef;
0114 
0115 /**
0116   * @brief  SMARTCARD advanced features initialization structure definition
0117   */
0118 typedef struct
0119 {
0120   uint32_t AdvFeatureInit;            /*!< Specifies which advanced SMARTCARD features is initialized. Several
0121                                            advanced features may be initialized at the same time. This parameter
0122                                            can be a value of @ref SMARTCARDEx_Advanced_Features_Initialization_Type */
0123 
0124   uint32_t TxPinLevelInvert;          /*!< Specifies whether the TX pin active level is inverted.
0125                                            This parameter can be a value of @ref SMARTCARD_Tx_Inv  */
0126 
0127   uint32_t RxPinLevelInvert;          /*!< Specifies whether the RX pin active level is inverted.
0128                                            This parameter can be a value of @ref SMARTCARD_Rx_Inv  */
0129 
0130   uint32_t DataInvert;                /*!< Specifies whether data are inverted (positive/direct logic
0131                                            vs negative/inverted logic).
0132                                            This parameter can be a value of @ref SMARTCARD_Data_Inv */
0133 
0134   uint32_t Swap;                      /*!< Specifies whether TX and RX pins are swapped.
0135                                            This parameter can be a value of @ref SMARTCARD_Rx_Tx_Swap */
0136 
0137   uint32_t OverrunDisable;            /*!< Specifies whether the reception overrun detection is disabled.
0138                                            This parameter can be a value of @ref SMARTCARD_Overrun_Disable */
0139 
0140   uint32_t DMADisableonRxError;       /*!< Specifies whether the DMA is disabled in case of reception error.
0141                                            This parameter can be a value of @ref SMARTCARD_DMA_Disable_on_Rx_Error */
0142 
0143   uint32_t MSBFirst;                  /*!< Specifies whether MSB is sent first on UART line.
0144                                            This parameter can be a value of @ref SMARTCARD_MSB_First */
0145 
0146   uint16_t TxCompletionIndication;    /*!< Specifies which transmission completion indication is used: before (when
0147                                            relevant flag is available) or once guard time period has elapsed.
0148                                            This parameter can be a value
0149                                            of @ref SMARTCARDEx_Transmission_Completion_Indication. */
0150 } SMARTCARD_AdvFeatureInitTypeDef;
0151 
0152 /**
0153   * @brief HAL SMARTCARD State definition
0154   * @note  HAL SMARTCARD State value is a combination of 2 different substates:
0155   *        gState and RxState (see @ref SMARTCARD_State_Definition).
0156   *        - gState contains SMARTCARD state information related to global Handle management
0157   *          and also information related to Tx operations.
0158   *          gState value coding follow below described bitmap :
0159   *          b7-b6  Error information
0160   *             00 : No Error
0161   *             01 : (Not Used)
0162   *             10 : Timeout
0163   *             11 : Error
0164   *          b5     Peripheral initialization status
0165   *             0  : Reset (Peripheral not initialized)
0166   *             1  : Init done (Peripheral initialized. HAL SMARTCARD Init function already called)
0167   *          b4-b3  (not used)
0168   *             xx : Should be set to 00
0169   *          b2     Intrinsic process state
0170   *             0  : Ready
0171   *             1  : Busy (Peripheral busy with some configuration or internal operations)
0172   *          b1     (not used)
0173   *             x  : Should be set to 0
0174   *          b0     Tx state
0175   *             0  : Ready (no Tx operation ongoing)
0176   *             1  : Busy (Tx operation ongoing)
0177   *        - RxState contains information related to Rx operations.
0178   *          RxState value coding follow below described bitmap :
0179   *          b7-b6  (not used)
0180   *             xx : Should be set to 00
0181   *          b5     Peripheral initialization status
0182   *             0  : Reset (Peripheral not initialized)
0183   *             1  : Init done (Peripheral initialized)
0184   *          b4-b2  (not used)
0185   *            xxx : Should be set to 000
0186   *          b1     Rx state
0187   *             0  : Ready (no Rx operation ongoing)
0188   *             1  : Busy (Rx operation ongoing)
0189   *          b0     (not used)
0190   *             x  : Should be set to 0.
0191   */
0192 typedef uint32_t HAL_SMARTCARD_StateTypeDef;
0193 
0194 /**
0195   * @brief  SMARTCARD handle Structure definition
0196   */
0197 typedef struct __SMARTCARD_HandleTypeDef
0198 {
0199   USART_TypeDef                     *Instance;             /*!< USART registers base address                          */
0200 
0201   SMARTCARD_InitTypeDef             Init;                  /*!< SmartCard communication parameters                    */
0202 
0203   SMARTCARD_AdvFeatureInitTypeDef   AdvancedInit;          /*!< SmartCard advanced features initialization parameters */
0204 
0205   const uint8_t                     *pTxBuffPtr;           /*!< Pointer to SmartCard Tx transfer Buffer               */
0206 
0207   uint16_t                          TxXferSize;            /*!< SmartCard Tx Transfer size                            */
0208 
0209   __IO uint16_t                     TxXferCount;           /*!< SmartCard Tx Transfer Counter                         */
0210 
0211   uint8_t                           *pRxBuffPtr;           /*!< Pointer to SmartCard Rx transfer Buffer               */
0212 
0213   uint16_t                          RxXferSize;            /*!< SmartCard Rx Transfer size                            */
0214 
0215   __IO uint16_t                     RxXferCount;           /*!< SmartCard Rx Transfer Counter                         */
0216 
0217   uint16_t                          NbRxDataToProcess;     /*!< Number of data to process during RX ISR execution     */
0218 
0219   uint16_t                          NbTxDataToProcess;     /*!< Number of data to process during TX ISR execution     */
0220 
0221   uint32_t                          FifoMode;              /*!< Specifies if the FIFO mode will be used.
0222                                                                 This parameter can be a value of
0223                                                                 @ref SMARTCARDEx_FIFO_mode.                           */
0224 
0225   void (*RxISR)(struct __SMARTCARD_HandleTypeDef *huart);  /*!< Function pointer on Rx IRQ handler                    */
0226 
0227   void (*TxISR)(struct __SMARTCARD_HandleTypeDef *huart);  /*!< Function pointer on Tx IRQ handler                    */
0228 
0229   DMA_HandleTypeDef                 *hdmatx;               /*!< SmartCard Tx DMA Handle parameters                    */
0230 
0231   DMA_HandleTypeDef                 *hdmarx;               /*!< SmartCard Rx DMA Handle parameters                    */
0232 
0233   HAL_LockTypeDef                   Lock;                  /*!< Locking object                                        */
0234 
0235   __IO HAL_SMARTCARD_StateTypeDef   gState;                /*!< SmartCard state information related to global
0236                                                                 Handle management and also related to Tx operations.
0237                                                                 This parameter can be a value
0238                                                                 of @ref HAL_SMARTCARD_StateTypeDef                    */
0239 
0240   __IO HAL_SMARTCARD_StateTypeDef   RxState;               /*!< SmartCard state information related to Rx operations.
0241                                                                 This parameter can be a value
0242                                                                 of @ref HAL_SMARTCARD_StateTypeDef                    */
0243 
0244   __IO uint32_t                     ErrorCode;             /*!< SmartCard Error code                                  */
0245 
0246 #if (USE_HAL_SMARTCARD_REGISTER_CALLBACKS == 1)
0247   void (* TxCpltCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard);            /*!< SMARTCARD Tx Complete Callback             */
0248 
0249   void (* RxCpltCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard);            /*!< SMARTCARD Rx Complete Callback             */
0250 
0251   void (* ErrorCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard);             /*!< SMARTCARD Error Callback                   */
0252 
0253   void (* AbortCpltCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard);         /*!< SMARTCARD Abort Complete Callback          */
0254 
0255   void (* AbortTransmitCpltCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard); /*!< SMARTCARD Abort Transmit Complete Callback */
0256 
0257   void (* AbortReceiveCpltCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard);  /*!< SMARTCARD Abort Receive Complete Callback  */
0258 
0259   void (* RxFifoFullCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard);        /*!< SMARTCARD Rx Fifo Full Callback            */
0260 
0261   void (* TxFifoEmptyCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard);       /*!< SMARTCARD Tx Fifo Empty Callback           */
0262 
0263   void (* MspInitCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard);           /*!< SMARTCARD Msp Init callback                */
0264 
0265   void (* MspDeInitCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard);         /*!< SMARTCARD Msp DeInit callback              */
0266 #endif  /* USE_HAL_SMARTCARD_REGISTER_CALLBACKS */
0267 
0268 } SMARTCARD_HandleTypeDef;
0269 
0270 #if (USE_HAL_SMARTCARD_REGISTER_CALLBACKS == 1)
0271 /**
0272   * @brief  HAL SMARTCARD Callback ID enumeration definition
0273   */
0274 typedef enum
0275 {
0276   HAL_SMARTCARD_TX_COMPLETE_CB_ID             = 0x00U,    /*!< SMARTCARD Tx Complete Callback ID             */
0277   HAL_SMARTCARD_RX_COMPLETE_CB_ID             = 0x01U,    /*!< SMARTCARD Rx Complete Callback ID             */
0278   HAL_SMARTCARD_ERROR_CB_ID                   = 0x02U,    /*!< SMARTCARD Error Callback ID                   */
0279   HAL_SMARTCARD_ABORT_COMPLETE_CB_ID          = 0x03U,    /*!< SMARTCARD Abort Complete Callback ID          */
0280   HAL_SMARTCARD_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x04U,    /*!< SMARTCARD Abort Transmit Complete Callback ID */
0281   HAL_SMARTCARD_ABORT_RECEIVE_COMPLETE_CB_ID  = 0x05U,    /*!< SMARTCARD Abort Receive Complete Callback ID  */
0282   HAL_SMARTCARD_RX_FIFO_FULL_CB_ID            = 0x06U,    /*!< SMARTCARD Rx Fifo Full Callback ID            */
0283   HAL_SMARTCARD_TX_FIFO_EMPTY_CB_ID           = 0x07U,    /*!< SMARTCARD Tx Fifo Empty Callback ID           */
0284 
0285   HAL_SMARTCARD_MSPINIT_CB_ID                 = 0x08U,    /*!< SMARTCARD MspInit callback ID                 */
0286   HAL_SMARTCARD_MSPDEINIT_CB_ID               = 0x09U     /*!< SMARTCARD MspDeInit callback ID               */
0287 
0288 } HAL_SMARTCARD_CallbackIDTypeDef;
0289 
0290 /**
0291   * @brief  HAL SMARTCARD Callback pointer definition
0292   */
0293 typedef  void (*pSMARTCARD_CallbackTypeDef)(SMARTCARD_HandleTypeDef *hsmartcard);  /*!< pointer to an SMARTCARD callback function */
0294 
0295 #endif /* USE_HAL_SMARTCARD_REGISTER_CALLBACKS */
0296 
0297 /**
0298   * @brief  SMARTCARD clock sources
0299   */
0300 typedef enum
0301 {
0302   SMARTCARD_CLOCKSOURCE_D2PCLK1   = 0x00U, /*!< Domain2 PCLK1 clock source */
0303   SMARTCARD_CLOCKSOURCE_D2PCLK2   = 0x01U, /*!< Domain2 PCLK2 clock source */
0304   SMARTCARD_CLOCKSOURCE_HSI       = 0x04U, /*!< HSI clock source           */
0305   SMARTCARD_CLOCKSOURCE_CSI       = 0x08U, /*!< CSI clock source           */
0306   SMARTCARD_CLOCKSOURCE_LSE       = 0x20U, /*!< LSE clock source           */
0307   SMARTCARD_CLOCKSOURCE_PLL2Q     = 0x40U, /*!< PLL2Q clock source         */
0308   SMARTCARD_CLOCKSOURCE_PLL3Q     = 0x80U, /*!< PLL3Q clock source         */
0309   SMARTCARD_CLOCKSOURCE_UNDEFINED = 0x10U  /*!< undefined clock source     */
0310 } SMARTCARD_ClockSourceTypeDef;
0311 
0312 /**
0313   * @}
0314   */
0315 
0316 /* Exported constants --------------------------------------------------------*/
0317 /** @defgroup SMARTCARD_Exported_Constants  SMARTCARD Exported Constants
0318   * @ingroup RTEMSBSPsARMSTM32H7
0319   * @{
0320   */
0321 
0322 /** @defgroup SMARTCARD_State_Definition SMARTCARD State Code Definition
0323   * @ingroup RTEMSBSPsARMSTM32H7
0324   * @{
0325   */
0326 #define HAL_SMARTCARD_STATE_RESET            0x00000000U                     /*!< Peripheral is not initialized. Value
0327                                                                                   is allowed for gState and RxState */
0328 #define HAL_SMARTCARD_STATE_READY            0x00000020U                     /*!< Peripheral Initialized and ready for
0329                                                                                   use. Value is allowed for gState
0330                                                                                   and RxState                       */
0331 #define HAL_SMARTCARD_STATE_BUSY             0x00000024U                     /*!< an internal process is ongoing
0332                                                                                   Value is allowed for gState only  */
0333 #define HAL_SMARTCARD_STATE_BUSY_TX          0x00000021U                     /*!< Data Transmission process is ongoing
0334                                                                                   Value is allowed for gState only  */
0335 #define HAL_SMARTCARD_STATE_BUSY_RX          0x00000022U                     /*!< Data Reception process is ongoing
0336                                                                                   Value is allowed for RxState only */
0337 #define HAL_SMARTCARD_STATE_BUSY_TX_RX       0x00000023U                     /*!< Data Transmission and Reception
0338                                                                                   process is ongoing Not to be used for
0339                                                                                   neither gState nor RxState.
0340                                                                                   Value is result of combination (Or)
0341                                                                                   between gState and RxState values */
0342 #define HAL_SMARTCARD_STATE_TIMEOUT          0x000000A0U                     /*!< Timeout state
0343                                                                                   Value is allowed for gState only  */
0344 #define HAL_SMARTCARD_STATE_ERROR            0x000000E0U                     /*!< Error
0345                                                                                   Value is allowed for gState only  */
0346 /**
0347   * @}
0348   */
0349 
0350 /** @defgroup SMARTCARD_Error_Definition SMARTCARD Error Code Definition
0351   * @ingroup RTEMSBSPsARMSTM32H7
0352   * @{
0353   */
0354 #define HAL_SMARTCARD_ERROR_NONE             (0x00000000U)         /*!< No error                */
0355 #define HAL_SMARTCARD_ERROR_PE               (0x00000001U)         /*!< Parity error            */
0356 #define HAL_SMARTCARD_ERROR_NE               (0x00000002U)         /*!< Noise error             */
0357 #define HAL_SMARTCARD_ERROR_FE               (0x00000004U)         /*!< frame error             */
0358 #define HAL_SMARTCARD_ERROR_ORE              (0x00000008U)         /*!< Overrun error           */
0359 #define HAL_SMARTCARD_ERROR_DMA              (0x00000010U)         /*!< DMA transfer error      */
0360 #define HAL_SMARTCARD_ERROR_RTO              (0x00000020U)         /*!< Receiver TimeOut error  */
0361 #if (USE_HAL_SMARTCARD_REGISTER_CALLBACKS == 1)
0362 #define HAL_SMARTCARD_ERROR_INVALID_CALLBACK (0x00000040U)         /*!< Invalid Callback error  */
0363 #endif /* USE_HAL_SMARTCARD_REGISTER_CALLBACKS */
0364 /**
0365   * @}
0366   */
0367 
0368 /** @defgroup SMARTCARD_Word_Length SMARTCARD Word Length
0369   * @ingroup RTEMSBSPsARMSTM32H7
0370   * @{
0371   */
0372 #define SMARTCARD_WORDLENGTH_9B             USART_CR1_M0                    /*!< SMARTCARD frame length */
0373 /**
0374   * @}
0375   */
0376 
0377 /** @defgroup SMARTCARD_Stop_Bits SMARTCARD Number of Stop Bits
0378   * @ingroup RTEMSBSPsARMSTM32H7
0379   * @{
0380   */
0381 #define SMARTCARD_STOPBITS_0_5              USART_CR2_STOP_0                /*!< SMARTCARD frame with 0.5 stop bit  */
0382 #define SMARTCARD_STOPBITS_1_5              USART_CR2_STOP                  /*!< SMARTCARD frame with 1.5 stop bits */
0383 /**
0384   * @}
0385   */
0386 
0387 /** @defgroup SMARTCARD_Parity SMARTCARD Parity
0388   * @ingroup RTEMSBSPsARMSTM32H7
0389   * @{
0390   */
0391 #define SMARTCARD_PARITY_EVEN               USART_CR1_PCE                   /*!< SMARTCARD frame even parity */
0392 #define SMARTCARD_PARITY_ODD                (USART_CR1_PCE | USART_CR1_PS)  /*!< SMARTCARD frame odd parity  */
0393 /**
0394   * @}
0395   */
0396 
0397 /** @defgroup SMARTCARD_Mode SMARTCARD Transfer Mode
0398   * @ingroup RTEMSBSPsARMSTM32H7
0399   * @{
0400   */
0401 #define SMARTCARD_MODE_RX                   USART_CR1_RE                    /*!< SMARTCARD RX mode        */
0402 #define SMARTCARD_MODE_TX                   USART_CR1_TE                    /*!< SMARTCARD TX mode        */
0403 #define SMARTCARD_MODE_TX_RX                (USART_CR1_TE |USART_CR1_RE)    /*!< SMARTCARD RX and TX mode */
0404 /**
0405   * @}
0406   */
0407 
0408 /** @defgroup SMARTCARD_Clock_Polarity SMARTCARD Clock Polarity
0409   * @ingroup RTEMSBSPsARMSTM32H7
0410   * @{
0411   */
0412 #define SMARTCARD_POLARITY_LOW              0x00000000U                     /*!< SMARTCARD frame low polarity  */
0413 #define SMARTCARD_POLARITY_HIGH             USART_CR2_CPOL                  /*!< SMARTCARD frame high polarity */
0414 /**
0415   * @}
0416   */
0417 
0418 /** @defgroup SMARTCARD_Clock_Phase SMARTCARD Clock Phase
0419   * @ingroup RTEMSBSPsARMSTM32H7
0420   * @{
0421   */
0422 #define SMARTCARD_PHASE_1EDGE               0x00000000U                     /*!< SMARTCARD frame phase on first clock transition  */
0423 #define SMARTCARD_PHASE_2EDGE               USART_CR2_CPHA                  /*!< SMARTCARD frame phase on second clock transition */
0424 /**
0425   * @}
0426   */
0427 
0428 /** @defgroup SMARTCARD_Last_Bit SMARTCARD Last Bit
0429   * @ingroup RTEMSBSPsARMSTM32H7
0430   * @{
0431   */
0432 #define SMARTCARD_LASTBIT_DISABLE           0x00000000U                     /*!< SMARTCARD frame last data bit clock pulse not output to SCLK pin */
0433 #define SMARTCARD_LASTBIT_ENABLE            USART_CR2_LBCL                  /*!< SMARTCARD frame last data bit clock pulse output to SCLK pin     */
0434 /**
0435   * @}
0436   */
0437 
0438 /** @defgroup SMARTCARD_OneBit_Sampling SMARTCARD One Bit Sampling Method
0439   * @ingroup RTEMSBSPsARMSTM32H7
0440   * @{
0441   */
0442 #define SMARTCARD_ONE_BIT_SAMPLE_DISABLE    0x00000000U                     /*!< SMARTCARD frame one-bit sample disabled */
0443 #define SMARTCARD_ONE_BIT_SAMPLE_ENABLE     USART_CR3_ONEBIT                /*!< SMARTCARD frame one-bit sample enabled  */
0444 /**
0445   * @}
0446   */
0447 
0448 /** @defgroup SMARTCARD_NACK_Enable SMARTCARD NACK Enable
0449   * @ingroup RTEMSBSPsARMSTM32H7
0450   * @{
0451   */
0452 #define SMARTCARD_NACK_DISABLE              0x00000000U                     /*!< SMARTCARD NACK transmission disabled  */
0453 #define SMARTCARD_NACK_ENABLE               USART_CR3_NACK                  /*!< SMARTCARD NACK transmission enabled */
0454 /**
0455   * @}
0456   */
0457 
0458 /** @defgroup SMARTCARD_Timeout_Enable SMARTCARD Timeout Enable
0459   * @ingroup RTEMSBSPsARMSTM32H7
0460   * @{
0461   */
0462 #define SMARTCARD_TIMEOUT_DISABLE           0x00000000U                     /*!< SMARTCARD receiver timeout disabled */
0463 #define SMARTCARD_TIMEOUT_ENABLE            USART_CR2_RTOEN                 /*!< SMARTCARD receiver timeout enabled  */
0464 /**
0465   * @}
0466   */
0467 
0468 /** @defgroup SMARTCARD_ClockPrescaler  SMARTCARD Clock Prescaler
0469   * @ingroup RTEMSBSPsARMSTM32H7
0470   * @{
0471   */
0472 #define SMARTCARD_PRESCALER_DIV1    0x00000000U  /*!< fclk_pres = fclk     */
0473 #define SMARTCARD_PRESCALER_DIV2    0x00000001U  /*!< fclk_pres = fclk/2   */
0474 #define SMARTCARD_PRESCALER_DIV4    0x00000002U  /*!< fclk_pres = fclk/4   */
0475 #define SMARTCARD_PRESCALER_DIV6    0x00000003U  /*!< fclk_pres = fclk/6   */
0476 #define SMARTCARD_PRESCALER_DIV8    0x00000004U  /*!< fclk_pres = fclk/8   */
0477 #define SMARTCARD_PRESCALER_DIV10   0x00000005U  /*!< fclk_pres = fclk/10  */
0478 #define SMARTCARD_PRESCALER_DIV12   0x00000006U  /*!< fclk_pres = fclk/12  */
0479 #define SMARTCARD_PRESCALER_DIV16   0x00000007U  /*!< fclk_pres = fclk/16  */
0480 #define SMARTCARD_PRESCALER_DIV32   0x00000008U  /*!< fclk_pres = fclk/32  */
0481 #define SMARTCARD_PRESCALER_DIV64   0x00000009U  /*!< fclk_pres = fclk/64  */
0482 #define SMARTCARD_PRESCALER_DIV128  0x0000000AU  /*!< fclk_pres = fclk/128 */
0483 #define SMARTCARD_PRESCALER_DIV256  0x0000000BU  /*!< fclk_pres = fclk/256 */
0484 /**
0485   * @}
0486   */
0487 
0488 /** @defgroup SMARTCARD_Tx_Inv SMARTCARD advanced feature TX pin active level inversion
0489   * @ingroup RTEMSBSPsARMSTM32H7
0490   * @{
0491   */
0492 #define SMARTCARD_ADVFEATURE_TXINV_DISABLE  0x00000000U                  /*!< TX pin active level inversion disable */
0493 #define SMARTCARD_ADVFEATURE_TXINV_ENABLE   USART_CR2_TXINV              /*!< TX pin active level inversion enable  */
0494 /**
0495   * @}
0496   */
0497 
0498 /** @defgroup SMARTCARD_Rx_Inv SMARTCARD advanced feature RX pin active level inversion
0499   * @ingroup RTEMSBSPsARMSTM32H7
0500   * @{
0501   */
0502 #define SMARTCARD_ADVFEATURE_RXINV_DISABLE  0x00000000U                  /*!< RX pin active level inversion disable */
0503 #define SMARTCARD_ADVFEATURE_RXINV_ENABLE   USART_CR2_RXINV              /*!< RX pin active level inversion enable  */
0504 /**
0505   * @}
0506   */
0507 
0508 /** @defgroup SMARTCARD_Data_Inv SMARTCARD advanced feature Binary Data inversion
0509   * @ingroup RTEMSBSPsARMSTM32H7
0510   * @{
0511   */
0512 #define SMARTCARD_ADVFEATURE_DATAINV_DISABLE  0x00000000U                /*!< Binary data inversion disable */
0513 #define SMARTCARD_ADVFEATURE_DATAINV_ENABLE   USART_CR2_DATAINV          /*!< Binary data inversion enable  */
0514 /**
0515   * @}
0516   */
0517 
0518 /** @defgroup SMARTCARD_Rx_Tx_Swap SMARTCARD advanced feature RX TX pins swap
0519   * @ingroup RTEMSBSPsARMSTM32H7
0520   * @{
0521   */
0522 #define SMARTCARD_ADVFEATURE_SWAP_DISABLE   0x00000000U                  /*!< TX/RX pins swap disable */
0523 #define SMARTCARD_ADVFEATURE_SWAP_ENABLE    USART_CR2_SWAP               /*!< TX/RX pins swap enable  */
0524 /**
0525   * @}
0526   */
0527 
0528 /** @defgroup SMARTCARD_Overrun_Disable SMARTCARD advanced feature Overrun Disable
0529   * @ingroup RTEMSBSPsARMSTM32H7
0530   * @{
0531   */
0532 #define SMARTCARD_ADVFEATURE_OVERRUN_ENABLE   0x00000000U                /*!< RX overrun enable  */
0533 #define SMARTCARD_ADVFEATURE_OVERRUN_DISABLE  USART_CR3_OVRDIS           /*!< RX overrun disable */
0534 /**
0535   * @}
0536   */
0537 
0538 /** @defgroup SMARTCARD_DMA_Disable_on_Rx_Error SMARTCARD advanced feature DMA Disable on Rx Error
0539   * @ingroup RTEMSBSPsARMSTM32H7
0540   * @{
0541   */
0542 #define SMARTCARD_ADVFEATURE_DMA_ENABLEONRXERROR   0x00000000U           /*!< DMA enable on Reception Error  */
0543 #define SMARTCARD_ADVFEATURE_DMA_DISABLEONRXERROR  USART_CR3_DDRE        /*!< DMA disable on Reception Error */
0544 /**
0545   * @}
0546   */
0547 
0548 /** @defgroup SMARTCARD_MSB_First   SMARTCARD advanced feature MSB first
0549   * @ingroup RTEMSBSPsARMSTM32H7
0550   * @{
0551   */
0552 #define SMARTCARD_ADVFEATURE_MSBFIRST_DISABLE      0x00000000U           /*!< Most significant bit sent/received first disable */
0553 #define SMARTCARD_ADVFEATURE_MSBFIRST_ENABLE       USART_CR2_MSBFIRST    /*!< Most significant bit sent/received first enable  */
0554 /**
0555   * @}
0556   */
0557 
0558 /** @defgroup SMARTCARD_Request_Parameters SMARTCARD Request Parameters
0559   * @ingroup RTEMSBSPsARMSTM32H7
0560   * @{
0561   */
0562 #define SMARTCARD_RXDATA_FLUSH_REQUEST      USART_RQR_RXFRQ              /*!< Receive data flush request */
0563 #define SMARTCARD_TXDATA_FLUSH_REQUEST      USART_RQR_TXFRQ              /*!< Transmit data flush request */
0564 /**
0565   * @}
0566   */
0567 
0568 /** @defgroup SMARTCARD_Interruption_Mask SMARTCARD interruptions flags mask
0569   * @ingroup RTEMSBSPsARMSTM32H7
0570   * @{
0571   */
0572 #define SMARTCARD_IT_MASK                   0x001FU   /*!< SMARTCARD interruptions flags mask  */
0573 #define SMARTCARD_CR_MASK                   0x00E0U   /*!< SMARTCARD control register mask     */
0574 #define SMARTCARD_CR_POS                    5U        /*!< SMARTCARD control register position */
0575 #define SMARTCARD_ISR_MASK                  0x1F00U   /*!< SMARTCARD ISR register mask         */
0576 #define SMARTCARD_ISR_POS                   8U        /*!< SMARTCARD ISR register position     */
0577 /**
0578   * @}
0579   */
0580 
0581 /**
0582   * @}
0583   */
0584 
0585 /* Exported macros -----------------------------------------------------------*/
0586 /** @defgroup SMARTCARD_Exported_Macros  SMARTCARD Exported Macros
0587   * @ingroup RTEMSBSPsARMSTM32H7
0588   * @{
0589   */
0590 
0591 /** @brief  Reset SMARTCARD handle states.
0592   * @param  __HANDLE__ SMARTCARD handle.
0593   * @retval None
0594   */
0595 #if USE_HAL_SMARTCARD_REGISTER_CALLBACKS == 1
0596 #define __HAL_SMARTCARD_RESET_HANDLE_STATE(__HANDLE__)  do{                                                       \
0597                                                             (__HANDLE__)->gState = HAL_SMARTCARD_STATE_RESET;     \
0598                                                             (__HANDLE__)->RxState = HAL_SMARTCARD_STATE_RESET;    \
0599                                                             (__HANDLE__)->MspInitCallback = NULL;                 \
0600                                                             (__HANDLE__)->MspDeInitCallback = NULL;               \
0601                                                           } while(0U)
0602 #else
0603 #define __HAL_SMARTCARD_RESET_HANDLE_STATE(__HANDLE__)  do{                                                       \
0604                                                             (__HANDLE__)->gState = HAL_SMARTCARD_STATE_RESET;     \
0605                                                             (__HANDLE__)->RxState = HAL_SMARTCARD_STATE_RESET;    \
0606                                                           } while(0U)
0607 #endif /*USE_HAL_SMARTCARD_REGISTER_CALLBACKS  */
0608 
0609 /** @brief  Flush the Smartcard Data registers.
0610   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0611   * @retval None
0612   */
0613 #define __HAL_SMARTCARD_FLUSH_DRREGISTER(__HANDLE__)                      \
0614   do{                                                                     \
0615     SET_BIT((__HANDLE__)->Instance->RQR, SMARTCARD_RXDATA_FLUSH_REQUEST); \
0616     SET_BIT((__HANDLE__)->Instance->RQR, SMARTCARD_TXDATA_FLUSH_REQUEST); \
0617   } while(0U)
0618 
0619 /** @brief  Clear the specified SMARTCARD pending flag.
0620   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0621   * @param  __FLAG__ specifies the flag to check.
0622   *          This parameter can be any combination of the following values:
0623   *            @arg @ref SMARTCARD_CLEAR_PEF    Parity error clear flag
0624   *            @arg @ref SMARTCARD_CLEAR_FEF    Framing error clear flag
0625   *            @arg @ref SMARTCARD_CLEAR_NEF    Noise detected clear flag
0626   *            @arg @ref SMARTCARD_CLEAR_OREF   OverRun error clear flag
0627   *            @arg @ref SMARTCARD_CLEAR_IDLEF  Idle line detected clear flag
0628   *            @arg @ref SMARTCARD_CLEAR_TCF    Transmission complete clear flag
0629   *            @arg @ref SMARTCARD_CLEAR_TCBGTF Transmission complete before guard time clear flag
0630   *            @arg @ref SMARTCARD_CLEAR_RTOF   Receiver timeout clear flag
0631   *            @arg @ref SMARTCARD_CLEAR_EOBF   End of block clear flag
0632   *            @arg @ref SMARTCARD_CLEAR_TXFECF TXFIFO empty Clear flag
0633   * @retval None
0634   */
0635 #define __HAL_SMARTCARD_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__))
0636 
0637 /** @brief  Clear the SMARTCARD PE pending flag.
0638   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0639   * @retval None
0640   */
0641 #define __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__)   __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_PEF)
0642 
0643 /** @brief  Clear the SMARTCARD FE pending flag.
0644   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0645   * @retval None
0646   */
0647 #define __HAL_SMARTCARD_CLEAR_FEFLAG(__HANDLE__)   __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_FEF)
0648 
0649 /** @brief  Clear the SMARTCARD NE pending flag.
0650   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0651   * @retval None
0652   */
0653 #define __HAL_SMARTCARD_CLEAR_NEFLAG(__HANDLE__)   __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_NEF)
0654 
0655 /** @brief  Clear the SMARTCARD ORE pending flag.
0656   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0657   * @retval None
0658   */
0659 #define __HAL_SMARTCARD_CLEAR_OREFLAG(__HANDLE__)   __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_OREF)
0660 
0661 /** @brief  Clear the SMARTCARD IDLE pending flag.
0662   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0663   * @retval None
0664   */
0665 #define __HAL_SMARTCARD_CLEAR_IDLEFLAG(__HANDLE__)   __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_IDLEF)
0666 
0667 /** @brief  Check whether the specified Smartcard flag is set or not.
0668   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0669   * @param  __FLAG__ specifies the flag to check.
0670   *        This parameter can be one of the following values:
0671   *            @arg @ref SMARTCARD_FLAG_TCBGT Transmission complete before guard time flag (when flag available)
0672   *            @arg @ref SMARTCARD_FLAG_REACK Receive enable acknowledge flag
0673   *            @arg @ref SMARTCARD_FLAG_TEACK Transmit enable acknowledge flag
0674   *            @arg @ref SMARTCARD_FLAG_BUSY  Busy flag
0675   *            @arg @ref SMARTCARD_FLAG_EOBF  End of block flag
0676   *            @arg @ref SMARTCARD_FLAG_RTOF  Receiver timeout flag
0677   *            @arg @ref SMARTCARD_FLAG_TXE   Transmit data register empty flag
0678   *            @arg @ref SMARTCARD_FLAG_TC    Transmission complete flag
0679   *            @arg @ref SMARTCARD_FLAG_RXNE  Receive data register not empty flag
0680   *            @arg @ref SMARTCARD_FLAG_IDLE  Idle line detection flag
0681   *            @arg @ref SMARTCARD_FLAG_ORE   Overrun error flag
0682   *            @arg @ref SMARTCARD_FLAG_NE    Noise error flag
0683   *            @arg @ref SMARTCARD_FLAG_FE    Framing error flag
0684   *            @arg @ref SMARTCARD_FLAG_PE    Parity error flag
0685   *            @arg @ref SMARTCARD_FLAG_TXFNF TXFIFO not full flag
0686   *            @arg @ref SMARTCARD_FLAG_RXFNE RXFIFO not empty flag
0687   *            @arg @ref SMARTCARD_FLAG_TXFE  TXFIFO Empty flag
0688   *            @arg @ref SMARTCARD_FLAG_RXFF  RXFIFO Full flag
0689   *            @arg @ref SMARTCARD_FLAG_RXFT  SMARTCARD RXFIFO threshold flag
0690   *            @arg @ref SMARTCARD_FLAG_TXFT  SMARTCARD TXFIFO threshold flag
0691   * @retval The new state of __FLAG__ (TRUE or FALSE).
0692   */
0693 #define __HAL_SMARTCARD_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR & (__FLAG__)) == (__FLAG__))
0694 
0695 /** @brief  Enable the specified SmartCard interrupt.
0696   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0697   * @param  __INTERRUPT__ specifies the SMARTCARD interrupt to enable.
0698   *          This parameter can be one of the following values:
0699   *            @arg @ref SMARTCARD_IT_EOB    End of block interrupt
0700   *            @arg @ref SMARTCARD_IT_RTO    Receive timeout interrupt
0701   *            @arg @ref SMARTCARD_IT_TXE    Transmit data register empty interrupt
0702   *            @arg @ref SMARTCARD_IT_TC     Transmission complete interrupt
0703   *            @arg @ref SMARTCARD_IT_TCBGT  Transmission complete before
0704   *                                          guard time interrupt (when interruption available)
0705   *            @arg @ref SMARTCARD_IT_RXNE   Receive data register not empty interrupt
0706   *            @arg @ref SMARTCARD_IT_IDLE   Idle line detection interrupt
0707   *            @arg @ref SMARTCARD_IT_PE     Parity error interrupt
0708   *            @arg @ref SMARTCARD_IT_ERR    Error interrupt(frame error, noise error, overrun error)
0709   *            @arg @ref SMARTCARD_IT_TXFNF  TX FIFO not full interruption
0710   *            @arg @ref SMARTCARD_IT_RXFNE  RXFIFO not empty interruption
0711   *            @arg @ref SMARTCARD_IT_RXFF   RXFIFO full interruption
0712   *            @arg @ref SMARTCARD_IT_TXFE   TXFIFO empty interruption
0713   *            @arg @ref SMARTCARD_IT_RXFT   RXFIFO threshold reached interruption
0714   *            @arg @ref SMARTCARD_IT_TXFT   TXFIFO threshold reached interruption
0715   * @retval None
0716   */
0717 #define __HAL_SMARTCARD_ENABLE_IT(__HANDLE__, __INTERRUPT__)   (((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\
0718                                                                   SMARTCARD_CR_POS) == 1U)?\
0719                                                                 ((__HANDLE__)->Instance->CR1 |= (1UL <<\
0720                                                                     ((__INTERRUPT__) & SMARTCARD_IT_MASK))):\
0721                                                                 ((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\
0722                                                                   SMARTCARD_CR_POS) == 2U)?\
0723                                                                 ((__HANDLE__)->Instance->CR2 |= (1UL <<\
0724                                                                     ((__INTERRUPT__) & SMARTCARD_IT_MASK))): \
0725                                                                 ((__HANDLE__)->Instance->CR3 |= (1UL <<\
0726                                                                     ((__INTERRUPT__) & SMARTCARD_IT_MASK))))
0727 
0728 /** @brief  Disable the specified SmartCard interrupt.
0729   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0730   * @param  __INTERRUPT__ specifies the SMARTCARD interrupt to disable.
0731   *          This parameter can be one of the following values:
0732   *            @arg @ref SMARTCARD_IT_EOB    End of block interrupt
0733   *            @arg @ref SMARTCARD_IT_RTO    Receive timeout interrupt
0734   *            @arg @ref SMARTCARD_IT_TXE    Transmit data register empty interrupt
0735   *            @arg @ref SMARTCARD_IT_TC     Transmission complete interrupt
0736   *            @arg @ref SMARTCARD_IT_TCBGT  Transmission complete before guard
0737   *                                          time interrupt (when interruption available)
0738   *            @arg @ref SMARTCARD_IT_RXNE   Receive data register not empty interrupt
0739   *            @arg @ref SMARTCARD_IT_IDLE   Idle line detection interrupt
0740   *            @arg @ref SMARTCARD_IT_PE     Parity error interrupt
0741   *            @arg @ref SMARTCARD_IT_ERR    Error interrupt(frame error, noise error, overrun error)
0742   *            @arg @ref SMARTCARD_IT_TXFNF  TX FIFO not full interruption
0743   *            @arg @ref SMARTCARD_IT_RXFNE  RXFIFO not empty interruption
0744   *            @arg @ref SMARTCARD_IT_RXFF   RXFIFO full interruption
0745   *            @arg @ref SMARTCARD_IT_TXFE   TXFIFO empty interruption
0746   *            @arg @ref SMARTCARD_IT_RXFT   RXFIFO threshold reached interruption
0747   *            @arg @ref SMARTCARD_IT_TXFT   TXFIFO threshold reached interruption
0748   * @retval None
0749   */
0750 #define __HAL_SMARTCARD_DISABLE_IT(__HANDLE__, __INTERRUPT__)  (((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\
0751                                                                   SMARTCARD_CR_POS) == 1U)?\
0752                                                                 ((__HANDLE__)->Instance->CR1 &= ~ (1U <<\
0753                                                                     ((__INTERRUPT__) & SMARTCARD_IT_MASK))): \
0754                                                                 ((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\
0755                                                                   SMARTCARD_CR_POS) == 2U)?\
0756                                                                 ((__HANDLE__)->Instance->CR2 &= ~ (1U <<\
0757                                                                     ((__INTERRUPT__) & SMARTCARD_IT_MASK))): \
0758                                                                 ((__HANDLE__)->Instance->CR3 &= ~ (1U <<\
0759                                                                     ((__INTERRUPT__) & SMARTCARD_IT_MASK))))
0760 
0761 /** @brief  Check whether the specified SmartCard interrupt has occurred or not.
0762   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0763   * @param  __INTERRUPT__ specifies the SMARTCARD interrupt to check.
0764   *          This parameter can be one of the following values:
0765   *            @arg @ref SMARTCARD_IT_EOB    End of block interrupt
0766   *            @arg @ref SMARTCARD_IT_RTO    Receive timeout interrupt
0767   *            @arg @ref SMARTCARD_IT_TXE    Transmit data register empty interrupt
0768   *            @arg @ref SMARTCARD_IT_TC     Transmission complete interrupt
0769   *            @arg @ref SMARTCARD_IT_TCBGT  Transmission complete before guard time
0770   *                                          interrupt (when interruption available)
0771   *            @arg @ref SMARTCARD_IT_RXNE   Receive data register not empty interrupt
0772   *            @arg @ref SMARTCARD_IT_IDLE   Idle line detection interrupt
0773   *            @arg @ref SMARTCARD_IT_PE     Parity error interrupt
0774   *            @arg @ref SMARTCARD_IT_ERR    Error interrupt(frame error, noise error, overrun error)
0775   *            @arg @ref SMARTCARD_IT_TXFNF  TX FIFO not full interruption
0776   *            @arg @ref SMARTCARD_IT_RXFNE  RXFIFO not empty interruption
0777   *            @arg @ref SMARTCARD_IT_RXFF   RXFIFO full interruption
0778   *            @arg @ref SMARTCARD_IT_TXFE   TXFIFO empty interruption
0779   *            @arg @ref SMARTCARD_IT_RXFT   RXFIFO threshold reached interruption
0780   *            @arg @ref SMARTCARD_IT_TXFT   TXFIFO threshold reached interruption
0781   * @retval The new state of __INTERRUPT__ (SET or RESET).
0782   */
0783 #define __HAL_SMARTCARD_GET_IT(__HANDLE__, __INTERRUPT__) (\
0784                                                            (((__HANDLE__)->Instance->ISR & (0x01UL << (((__INTERRUPT__)\
0785                                                                & SMARTCARD_ISR_MASK)>> SMARTCARD_ISR_POS)))!= 0U)\
0786                                                            ? SET : RESET)
0787 
0788 /** @brief  Check whether the specified SmartCard interrupt source is enabled or not.
0789   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0790   * @param  __INTERRUPT__ specifies the SMARTCARD interrupt source to check.
0791   *          This parameter can be one of the following values:
0792   *            @arg @ref SMARTCARD_IT_EOB    End of block interrupt
0793   *            @arg @ref SMARTCARD_IT_RTO    Receive timeout interrupt
0794   *            @arg @ref SMARTCARD_IT_TXE    Transmit data register empty interrupt
0795   *            @arg @ref SMARTCARD_IT_TC     Transmission complete interrupt
0796   *            @arg @ref SMARTCARD_IT_TCBGT  Transmission complete before guard time
0797   *                                          interrupt (when interruption available)
0798   *            @arg @ref SMARTCARD_IT_RXNE   Receive data register not empty interrupt
0799   *            @arg @ref SMARTCARD_IT_IDLE   Idle line detection interrupt
0800   *            @arg @ref SMARTCARD_IT_PE     Parity error interrupt
0801   *            @arg @ref SMARTCARD_IT_ERR    Error interrupt(frame error, noise error, overrun error)
0802   *            @arg @ref SMARTCARD_IT_TXFNF  TX FIFO not full interruption
0803   *            @arg @ref SMARTCARD_IT_RXFNE  RXFIFO not empty interruption
0804   *            @arg @ref SMARTCARD_IT_RXFF   RXFIFO full interruption
0805   *            @arg @ref SMARTCARD_IT_TXFE   TXFIFO empty interruption
0806   *            @arg @ref SMARTCARD_IT_RXFT   RXFIFO threshold reached interruption
0807   *            @arg @ref SMARTCARD_IT_TXFT   TXFIFO threshold reached interruption
0808   * @retval The new state of __INTERRUPT__ (SET or RESET).
0809   */
0810 #define __HAL_SMARTCARD_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\
0811                                                                        SMARTCARD_CR_POS) == 0x01U)?\
0812                                                                      (__HANDLE__)->Instance->CR1 : \
0813                                                                      (((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\
0814                                                                         SMARTCARD_CR_POS) == 0x02U)?\
0815                                                                       (__HANDLE__)->Instance->CR2 : \
0816                                                                       (__HANDLE__)->Instance->CR3)) &\
0817                                                                     (0x01UL << (((uint16_t)(__INTERRUPT__))\
0818                                                                                 & SMARTCARD_IT_MASK)))  != 0U)\
0819                                                                   ? SET : RESET)
0820 
0821 /** @brief  Clear the specified SMARTCARD ISR flag, in setting the proper ICR register flag.
0822   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0823   * @param  __IT_CLEAR__ specifies the interrupt clear register flag that needs to be set
0824   *                       to clear the corresponding interrupt.
0825   *          This parameter can be one of the following values:
0826   *            @arg @ref SMARTCARD_CLEAR_PEF    Parity error clear flag
0827   *            @arg @ref SMARTCARD_CLEAR_FEF    Framing error clear flag
0828   *            @arg @ref SMARTCARD_CLEAR_NEF    Noise detected clear flag
0829   *            @arg @ref SMARTCARD_CLEAR_OREF   OverRun error clear flag
0830   *            @arg @ref SMARTCARD_CLEAR_IDLEF  Idle line detection clear flag
0831   *            @arg @ref SMARTCARD_CLEAR_TXFECF TXFIFO empty Clear Flag
0832   *            @arg @ref SMARTCARD_CLEAR_TCF    Transmission complete clear flag
0833   *            @arg @ref SMARTCARD_CLEAR_TCBGTF Transmission complete before guard time clear flag (when flag available)
0834   *            @arg @ref SMARTCARD_CLEAR_RTOF   Receiver timeout clear flag
0835   *            @arg @ref SMARTCARD_CLEAR_EOBF   End of block clear flag
0836   * @retval None
0837   */
0838 #define __HAL_SMARTCARD_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR |= (uint32_t)(__IT_CLEAR__))
0839 
0840 /** @brief  Set a specific SMARTCARD request flag.
0841   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0842   * @param  __REQ__ specifies the request flag to set
0843   *          This parameter can be one of the following values:
0844   *            @arg @ref SMARTCARD_RXDATA_FLUSH_REQUEST Receive data flush Request
0845   *            @arg @ref SMARTCARD_TXDATA_FLUSH_REQUEST Transmit data flush Request
0846   * @retval None
0847   */
0848 #define __HAL_SMARTCARD_SEND_REQ(__HANDLE__, __REQ__) ((__HANDLE__)->Instance->RQR |= (uint16_t)(__REQ__))
0849 
0850 /** @brief  Enable the SMARTCARD one bit sample method.
0851   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0852   * @retval None
0853   */
0854 #define __HAL_SMARTCARD_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT)
0855 
0856 /** @brief  Disable the SMARTCARD one bit sample method.
0857   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0858   * @retval None
0859   */
0860 #define __HAL_SMARTCARD_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3\
0861                                                             &= (uint32_t)~((uint32_t)USART_CR3_ONEBIT))
0862 
0863 /** @brief  Enable the USART associated to the SMARTCARD Handle.
0864   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0865   * @retval None
0866   */
0867 #define __HAL_SMARTCARD_ENABLE(__HANDLE__)               ((__HANDLE__)->Instance->CR1 |=  USART_CR1_UE)
0868 
0869 /** @brief  Disable the USART associated to the SMARTCARD Handle
0870   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0871   * @retval None
0872   */
0873 #define __HAL_SMARTCARD_DISABLE(__HANDLE__)              ((__HANDLE__)->Instance->CR1 &=  ~USART_CR1_UE)
0874 
0875 /**
0876   * @}
0877   */
0878 
0879 /* Private macros -------------------------------------------------------------*/
0880 /** @defgroup SMARTCARD_Private_Macros SMARTCARD Private Macros
0881   * @ingroup RTEMSBSPsARMSTM32H7
0882   * @{
0883   */
0884 
0885 /** @brief  Report the SMARTCARD clock source.
0886   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0887   * @param  __CLOCKSOURCE__ output variable.
0888   * @retval the SMARTCARD clocking source, written in __CLOCKSOURCE__.
0889   */
0890 #if defined(UART9) && defined(USART10)
0891 #define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)   \
0892   do {                                                         \
0893     if ((__HANDLE__)->Instance == USART1)                      \
0894     {                                                          \
0895       switch (__HAL_RCC_GET_USART1_SOURCE())                   \
0896       {                                                        \
0897         case RCC_USART1CLKSOURCE_D2PCLK2:                      \
0898           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_D2PCLK2;   \
0899           break;                                               \
0900         case RCC_USART1CLKSOURCE_PLL2:                         \
0901           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL2Q;     \
0902           break;                                               \
0903         case RCC_USART1CLKSOURCE_PLL3:                         \
0904           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL3Q;     \
0905           break;                                               \
0906         case RCC_USART1CLKSOURCE_HSI:                          \
0907           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;       \
0908           break;                                               \
0909         case RCC_USART1CLKSOURCE_CSI:                          \
0910           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_CSI;       \
0911           break;                                               \
0912         case RCC_USART1CLKSOURCE_LSE:                          \
0913           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;       \
0914           break;                                               \
0915         default:                                               \
0916           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
0917           break;                                               \
0918       }                                                        \
0919     }                                                          \
0920     else if ((__HANDLE__)->Instance == USART2)                 \
0921     {                                                          \
0922       switch (__HAL_RCC_GET_USART2_SOURCE())                   \
0923       {                                                        \
0924         case RCC_USART2CLKSOURCE_D2PCLK1:                      \
0925           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_D2PCLK1;   \
0926           break;                                               \
0927         case RCC_USART2CLKSOURCE_PLL2:                         \
0928           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL2Q;     \
0929           break;                                               \
0930         case RCC_USART2CLKSOURCE_PLL3:                         \
0931           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL3Q;     \
0932           break;                                               \
0933         case RCC_USART2CLKSOURCE_HSI:                          \
0934           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;       \
0935           break;                                               \
0936         case RCC_USART2CLKSOURCE_CSI:                          \
0937           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_CSI;       \
0938           break;                                               \
0939         case RCC_USART2CLKSOURCE_LSE:                          \
0940           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;       \
0941           break;                                               \
0942         default:                                               \
0943           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
0944           break;                                               \
0945       }                                                        \
0946     }                                                          \
0947     else if ((__HANDLE__)->Instance == USART3)                 \
0948     {                                                          \
0949       switch (__HAL_RCC_GET_USART3_SOURCE())                   \
0950       {                                                        \
0951         case RCC_USART3CLKSOURCE_D2PCLK1:                      \
0952           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_D2PCLK1;   \
0953           break;                                               \
0954         case RCC_USART3CLKSOURCE_PLL2:                         \
0955           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL2Q;     \
0956           break;                                               \
0957         case RCC_USART3CLKSOURCE_PLL3:                         \
0958           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL3Q;     \
0959           break;                                               \
0960         case RCC_USART3CLKSOURCE_HSI:                          \
0961           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;       \
0962           break;                                               \
0963         case RCC_USART3CLKSOURCE_CSI:                          \
0964           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_CSI;       \
0965           break;                                               \
0966         case RCC_USART3CLKSOURCE_LSE:                          \
0967           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;       \
0968           break;                                               \
0969         default:                                               \
0970           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
0971           break;                                               \
0972       }                                                        \
0973     }                                                          \
0974     else if ((__HANDLE__)->Instance == USART6)                 \
0975     {                                                          \
0976       switch (__HAL_RCC_GET_USART6_SOURCE())                   \
0977       {                                                        \
0978         case RCC_USART6CLKSOURCE_D2PCLK2:                      \
0979           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_D2PCLK2;   \
0980           break;                                               \
0981         case RCC_USART6CLKSOURCE_PLL2:                         \
0982           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL2Q;     \
0983           break;                                               \
0984         case RCC_USART6CLKSOURCE_PLL3:                         \
0985           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL3Q;     \
0986           break;                                               \
0987         case RCC_USART6CLKSOURCE_HSI:                          \
0988           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;       \
0989           break;                                               \
0990         case RCC_USART6CLKSOURCE_CSI:                          \
0991           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_CSI;       \
0992           break;                                               \
0993         case RCC_USART6CLKSOURCE_LSE:                          \
0994           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;       \
0995           break;                                               \
0996         default:                                               \
0997           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
0998           break;                                               \
0999       }                                                        \
1000     }                                                          \
1001     else if ((__HANDLE__)->Instance == USART10)                \
1002     {                                                          \
1003       switch (__HAL_RCC_GET_USART10_SOURCE())                  \
1004       {                                                        \
1005         case RCC_USART10CLKSOURCE_D2PCLK2:                     \
1006           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_D2PCLK2;   \
1007           break;                                               \
1008         case RCC_USART10CLKSOURCE_PLL2:                        \
1009           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL2Q;     \
1010           break;                                               \
1011         case RCC_USART10CLKSOURCE_PLL3:                        \
1012           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL3Q;     \
1013           break;                                               \
1014         case RCC_USART10CLKSOURCE_HSI:                         \
1015           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;       \
1016           break;                                               \
1017         case RCC_USART10CLKSOURCE_CSI:                         \
1018           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_CSI;       \
1019           break;                                               \
1020         case RCC_USART10CLKSOURCE_LSE:                         \
1021           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;       \
1022           break;                                               \
1023         default:                                               \
1024           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
1025           break;                                               \
1026       }                                                        \
1027     }                                                          \
1028     else                                                       \
1029     {                                                          \
1030       (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;     \
1031     }                                                          \
1032   } while(0U)
1033 #else
1034 #define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)   \
1035   do {                                                         \
1036     if ((__HANDLE__)->Instance == USART1)                      \
1037     {                                                          \
1038       switch (__HAL_RCC_GET_USART1_SOURCE())                   \
1039       {                                                        \
1040         case RCC_USART1CLKSOURCE_D2PCLK2:                      \
1041           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_D2PCLK2;   \
1042           break;                                               \
1043         case RCC_USART1CLKSOURCE_PLL2:                         \
1044           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL2Q;     \
1045           break;                                               \
1046         case RCC_USART1CLKSOURCE_PLL3:                         \
1047           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL3Q;     \
1048           break;                                               \
1049         case RCC_USART1CLKSOURCE_HSI:                          \
1050           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;       \
1051           break;                                               \
1052         case RCC_USART1CLKSOURCE_CSI:                          \
1053           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_CSI;       \
1054           break;                                               \
1055         case RCC_USART1CLKSOURCE_LSE:                          \
1056           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;       \
1057           break;                                               \
1058         default:                                               \
1059           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
1060           break;                                               \
1061       }                                                        \
1062     }                                                          \
1063     else if ((__HANDLE__)->Instance == USART2)                 \
1064     {                                                          \
1065       switch (__HAL_RCC_GET_USART2_SOURCE())                   \
1066       {                                                        \
1067         case RCC_USART2CLKSOURCE_D2PCLK1:                      \
1068           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_D2PCLK1;   \
1069           break;                                               \
1070         case RCC_USART2CLKSOURCE_PLL2:                         \
1071           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL2Q;    \
1072           break;                                               \
1073         case RCC_USART2CLKSOURCE_PLL3:                         \
1074           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL3Q;     \
1075           break;                                               \
1076         case RCC_USART2CLKSOURCE_HSI:                          \
1077           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;       \
1078           break;                                               \
1079         case RCC_USART2CLKSOURCE_CSI:                          \
1080           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_CSI;       \
1081           break;                                               \
1082         case RCC_USART2CLKSOURCE_LSE:                          \
1083           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;       \
1084           break;                                               \
1085         default:                                               \
1086           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
1087           break;                                               \
1088       }                                                        \
1089     }                                                          \
1090     else if ((__HANDLE__)->Instance == USART3)                 \
1091     {                                                          \
1092       switch (__HAL_RCC_GET_USART3_SOURCE())                   \
1093       {                                                        \
1094         case RCC_USART3CLKSOURCE_D2PCLK1:                      \
1095           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_D2PCLK1;   \
1096           break;                                               \
1097         case RCC_USART3CLKSOURCE_PLL2:                         \
1098           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL2Q;     \
1099           break;                                               \
1100         case RCC_USART3CLKSOURCE_PLL3:                         \
1101           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL3Q;     \
1102           break;                                               \
1103         case RCC_USART3CLKSOURCE_HSI:                          \
1104           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;       \
1105           break;                                               \
1106         case RCC_USART3CLKSOURCE_CSI:                          \
1107           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_CSI;       \
1108           break;                                               \
1109         case RCC_USART3CLKSOURCE_LSE:                          \
1110           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;       \
1111           break;                                               \
1112         default:                                               \
1113           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
1114           break;                                               \
1115       }                                                        \
1116     }                                                          \
1117     else if ((__HANDLE__)->Instance == USART6)                 \
1118     {                                                          \
1119       switch (__HAL_RCC_GET_USART6_SOURCE())                   \
1120       {                                                        \
1121         case RCC_USART6CLKSOURCE_D2PCLK2:                      \
1122           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_D2PCLK2;   \
1123           break;                                               \
1124         case RCC_USART6CLKSOURCE_PLL2:                         \
1125           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL2Q;     \
1126           break;                                               \
1127         case RCC_USART6CLKSOURCE_PLL3:                         \
1128           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PLL3Q;     \
1129           break;                                               \
1130         case RCC_USART6CLKSOURCE_HSI:                          \
1131           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI;       \
1132           break;                                               \
1133         case RCC_USART6CLKSOURCE_CSI:                          \
1134           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_CSI;       \
1135           break;                                               \
1136         case RCC_USART6CLKSOURCE_LSE:                          \
1137           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE;       \
1138           break;                                               \
1139         default:                                               \
1140           (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
1141           break;                                               \
1142       }                                                        \
1143     }                                                          \
1144     else                                                       \
1145     {                                                          \
1146       (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;     \
1147     }                                                          \
1148   } while(0U)
1149 #endif /* UART9 && USART10 */
1150 
1151 /** @brief  Check the Baud rate range.
1152   * @note   The maximum Baud Rate is derived from the maximum clock on H7 (100 MHz)
1153   *         divided by the oversampling used on the SMARTCARD (i.e. 16).
1154   * @param  __BAUDRATE__ Baud rate set by the configuration function.
1155   * @retval Test result (TRUE or FALSE)
1156   */
1157 #define IS_SMARTCARD_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 6250001U)
1158 
1159 /** @brief  Check the block length range.
1160   * @note   The maximum SMARTCARD block length is 0xFF.
1161   * @param  __LENGTH__ block length.
1162   * @retval Test result (TRUE or FALSE)
1163   */
1164 #define IS_SMARTCARD_BLOCKLENGTH(__LENGTH__) ((__LENGTH__) <= 0xFFU)
1165 
1166 /** @brief  Check the receiver timeout value.
1167   * @note   The maximum SMARTCARD receiver timeout value is 0xFFFFFF.
1168   * @param  __TIMEOUTVALUE__ receiver timeout value.
1169   * @retval Test result (TRUE or FALSE)
1170   */
1171 #define IS_SMARTCARD_TIMEOUT_VALUE(__TIMEOUTVALUE__)    ((__TIMEOUTVALUE__) <= 0xFFFFFFU)
1172 
1173 /** @brief  Check the SMARTCARD autoretry counter value.
1174   * @note   The maximum number of retransmissions is 0x7.
1175   * @param  __COUNT__ number of retransmissions.
1176   * @retval Test result (TRUE or FALSE)
1177   */
1178 #define IS_SMARTCARD_AUTORETRY_COUNT(__COUNT__)         ((__COUNT__) <= 0x7U)
1179 
1180 /** @brief Ensure that SMARTCARD frame length is valid.
1181   * @param __LENGTH__ SMARTCARD frame length.
1182   * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
1183   */
1184 #define IS_SMARTCARD_WORD_LENGTH(__LENGTH__) ((__LENGTH__) == SMARTCARD_WORDLENGTH_9B)
1185 
1186 /** @brief Ensure that SMARTCARD frame number of stop bits is valid.
1187   * @param __STOPBITS__ SMARTCARD frame number of stop bits.
1188   * @retval SET (__STOPBITS__ is valid) or RESET (__STOPBITS__ is invalid)
1189   */
1190 #define IS_SMARTCARD_STOPBITS(__STOPBITS__) (((__STOPBITS__) == SMARTCARD_STOPBITS_0_5) ||\
1191                                              ((__STOPBITS__) == SMARTCARD_STOPBITS_1_5))
1192 
1193 /** @brief Ensure that SMARTCARD frame parity is valid.
1194   * @param __PARITY__ SMARTCARD frame parity.
1195   * @retval SET (__PARITY__ is valid) or RESET (__PARITY__ is invalid)
1196   */
1197 #define IS_SMARTCARD_PARITY(__PARITY__) (((__PARITY__) == SMARTCARD_PARITY_EVEN) || \
1198                                          ((__PARITY__) == SMARTCARD_PARITY_ODD))
1199 
1200 /** @brief Ensure that SMARTCARD communication mode is valid.
1201   * @param __MODE__ SMARTCARD communication mode.
1202   * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid)
1203   */
1204 #define IS_SMARTCARD_MODE(__MODE__) ((((__MODE__) & 0xFFF3U) == 0x00U) && ((__MODE__) != 0x00U))
1205 
1206 /** @brief Ensure that SMARTCARD frame polarity is valid.
1207   * @param __CPOL__ SMARTCARD frame polarity.
1208   * @retval SET (__CPOL__ is valid) or RESET (__CPOL__ is invalid)
1209   */
1210 #define IS_SMARTCARD_POLARITY(__CPOL__) (((__CPOL__) == SMARTCARD_POLARITY_LOW)\
1211                                          || ((__CPOL__) == SMARTCARD_POLARITY_HIGH))
1212 
1213 /** @brief Ensure that SMARTCARD frame phase is valid.
1214   * @param __CPHA__ SMARTCARD frame phase.
1215   * @retval SET (__CPHA__ is valid) or RESET (__CPHA__ is invalid)
1216   */
1217 #define IS_SMARTCARD_PHASE(__CPHA__) (((__CPHA__) == SMARTCARD_PHASE_1EDGE) || ((__CPHA__) == SMARTCARD_PHASE_2EDGE))
1218 
1219 /** @brief Ensure that SMARTCARD frame last bit clock pulse setting is valid.
1220   * @param __LASTBIT__ SMARTCARD frame last bit clock pulse setting.
1221   * @retval SET (__LASTBIT__ is valid) or RESET (__LASTBIT__ is invalid)
1222   */
1223 #define IS_SMARTCARD_LASTBIT(__LASTBIT__) (((__LASTBIT__) == SMARTCARD_LASTBIT_DISABLE) || \
1224                                            ((__LASTBIT__) == SMARTCARD_LASTBIT_ENABLE))
1225 
1226 /** @brief Ensure that SMARTCARD frame sampling is valid.
1227   * @param __ONEBIT__ SMARTCARD frame sampling.
1228   * @retval SET (__ONEBIT__ is valid) or RESET (__ONEBIT__ is invalid)
1229   */
1230 #define IS_SMARTCARD_ONE_BIT_SAMPLE(__ONEBIT__) (((__ONEBIT__) == SMARTCARD_ONE_BIT_SAMPLE_DISABLE) || \
1231                                                  ((__ONEBIT__) == SMARTCARD_ONE_BIT_SAMPLE_ENABLE))
1232 
1233 /** @brief Ensure that SMARTCARD NACK transmission setting is valid.
1234   * @param __NACK__ SMARTCARD NACK transmission setting.
1235   * @retval SET (__NACK__ is valid) or RESET (__NACK__ is invalid)
1236   */
1237 #define IS_SMARTCARD_NACK(__NACK__) (((__NACK__) == SMARTCARD_NACK_ENABLE) || \
1238                                      ((__NACK__) == SMARTCARD_NACK_DISABLE))
1239 
1240 /** @brief Ensure that SMARTCARD receiver timeout setting is valid.
1241   * @param __TIMEOUT__ SMARTCARD receiver timeout setting.
1242   * @retval SET (__TIMEOUT__ is valid) or RESET (__TIMEOUT__ is invalid)
1243   */
1244 #define IS_SMARTCARD_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == SMARTCARD_TIMEOUT_DISABLE) || \
1245                                            ((__TIMEOUT__) == SMARTCARD_TIMEOUT_ENABLE))
1246 
1247 /** @brief Ensure that SMARTCARD clock Prescaler is valid.
1248   * @param __CLOCKPRESCALER__ SMARTCARD clock Prescaler value.
1249   * @retval SET (__CLOCKPRESCALER__ is valid) or RESET (__CLOCKPRESCALER__ is invalid)
1250   */
1251 #define IS_SMARTCARD_CLOCKPRESCALER(__CLOCKPRESCALER__) (((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV1)   || \
1252                                                          ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV2)   || \
1253                                                          ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV4)   || \
1254                                                          ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV6)   || \
1255                                                          ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV8)   || \
1256                                                          ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV10)  || \
1257                                                          ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV12)  || \
1258                                                          ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV16)  || \
1259                                                          ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV32)  || \
1260                                                          ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV64)  || \
1261                                                          ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV128) || \
1262                                                          ((__CLOCKPRESCALER__) == SMARTCARD_PRESCALER_DIV256))
1263 
1264 /** @brief Ensure that SMARTCARD advanced features initialization is valid.
1265   * @param __INIT__ SMARTCARD advanced features initialization.
1266   * @retval SET (__INIT__ is valid) or RESET (__INIT__ is invalid)
1267   */
1268 #define IS_SMARTCARD_ADVFEATURE_INIT(__INIT__) ((__INIT__) <= (SMARTCARD_ADVFEATURE_NO_INIT                | \
1269                                                                SMARTCARD_ADVFEATURE_TXINVERT_INIT          | \
1270                                                                SMARTCARD_ADVFEATURE_RXINVERT_INIT          | \
1271                                                                SMARTCARD_ADVFEATURE_DATAINVERT_INIT        | \
1272                                                                SMARTCARD_ADVFEATURE_SWAP_INIT              | \
1273                                                                SMARTCARD_ADVFEATURE_RXOVERRUNDISABLE_INIT  | \
1274                                                                SMARTCARD_ADVFEATURE_DMADISABLEONERROR_INIT | \
1275                                                                SMARTCARD_ADVFEATURE_MSBFIRST_INIT))
1276 
1277 /** @brief Ensure that SMARTCARD frame TX inversion setting is valid.
1278   * @param __TXINV__ SMARTCARD frame TX inversion setting.
1279   * @retval SET (__TXINV__ is valid) or RESET (__TXINV__ is invalid)
1280   */
1281 #define IS_SMARTCARD_ADVFEATURE_TXINV(__TXINV__) (((__TXINV__) == SMARTCARD_ADVFEATURE_TXINV_DISABLE) || \
1282                                                   ((__TXINV__) == SMARTCARD_ADVFEATURE_TXINV_ENABLE))
1283 
1284 /** @brief Ensure that SMARTCARD frame RX inversion setting is valid.
1285   * @param __RXINV__ SMARTCARD frame RX inversion setting.
1286   * @retval SET (__RXINV__ is valid) or RESET (__RXINV__ is invalid)
1287   */
1288 #define IS_SMARTCARD_ADVFEATURE_RXINV(__RXINV__) (((__RXINV__) == SMARTCARD_ADVFEATURE_RXINV_DISABLE) || \
1289                                                   ((__RXINV__) == SMARTCARD_ADVFEATURE_RXINV_ENABLE))
1290 
1291 /** @brief Ensure that SMARTCARD frame data inversion setting is valid.
1292   * @param __DATAINV__ SMARTCARD frame data inversion setting.
1293   * @retval SET (__DATAINV__ is valid) or RESET (__DATAINV__ is invalid)
1294   */
1295 #define IS_SMARTCARD_ADVFEATURE_DATAINV(__DATAINV__) (((__DATAINV__) == SMARTCARD_ADVFEATURE_DATAINV_DISABLE) || \
1296                                                       ((__DATAINV__) == SMARTCARD_ADVFEATURE_DATAINV_ENABLE))
1297 
1298 /** @brief Ensure that SMARTCARD frame RX/TX pins swap setting is valid.
1299   * @param __SWAP__ SMARTCARD frame RX/TX pins swap setting.
1300   * @retval SET (__SWAP__ is valid) or RESET (__SWAP__ is invalid)
1301   */
1302 #define IS_SMARTCARD_ADVFEATURE_SWAP(__SWAP__) (((__SWAP__) == SMARTCARD_ADVFEATURE_SWAP_DISABLE) || \
1303                                                 ((__SWAP__) == SMARTCARD_ADVFEATURE_SWAP_ENABLE))
1304 
1305 /** @brief Ensure that SMARTCARD frame overrun setting is valid.
1306   * @param __OVERRUN__ SMARTCARD frame overrun setting.
1307   * @retval SET (__OVERRUN__ is valid) or RESET (__OVERRUN__ is invalid)
1308   */
1309 #define IS_SMARTCARD_OVERRUN(__OVERRUN__) (((__OVERRUN__) == SMARTCARD_ADVFEATURE_OVERRUN_ENABLE) || \
1310                                            ((__OVERRUN__) == SMARTCARD_ADVFEATURE_OVERRUN_DISABLE))
1311 
1312 /** @brief Ensure that SMARTCARD DMA enabling or disabling on error setting is valid.
1313   * @param __DMA__ SMARTCARD DMA enabling or disabling on error setting.
1314   * @retval SET (__DMA__ is valid) or RESET (__DMA__ is invalid)
1315   */
1316 #define IS_SMARTCARD_ADVFEATURE_DMAONRXERROR(__DMA__) (((__DMA__) == SMARTCARD_ADVFEATURE_DMA_ENABLEONRXERROR) || \
1317                                                        ((__DMA__) == SMARTCARD_ADVFEATURE_DMA_DISABLEONRXERROR))
1318 
1319 /** @brief Ensure that SMARTCARD frame MSB first setting is valid.
1320   * @param __MSBFIRST__ SMARTCARD frame MSB first setting.
1321   * @retval SET (__MSBFIRST__ is valid) or RESET (__MSBFIRST__ is invalid)
1322   */
1323 #define IS_SMARTCARD_ADVFEATURE_MSBFIRST(__MSBFIRST__) (((__MSBFIRST__) == SMARTCARD_ADVFEATURE_MSBFIRST_DISABLE) || \
1324                                                         ((__MSBFIRST__) == SMARTCARD_ADVFEATURE_MSBFIRST_ENABLE))
1325 
1326 /** @brief Ensure that SMARTCARD request parameter is valid.
1327   * @param __PARAM__ SMARTCARD request parameter.
1328   * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid)
1329   */
1330 #define IS_SMARTCARD_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == SMARTCARD_RXDATA_FLUSH_REQUEST) || \
1331                                                    ((__PARAM__) == SMARTCARD_TXDATA_FLUSH_REQUEST))
1332 
1333 /**
1334   * @}
1335   */
1336 
1337 /* Include SMARTCARD HAL Extended module */
1338 #include "stm32h7xx_hal_smartcard_ex.h"
1339 
1340 /* Exported functions --------------------------------------------------------*/
1341 /** @addtogroup SMARTCARD_Exported_Functions
1342   * @{
1343   */
1344 
1345 /* Initialization and de-initialization functions  ****************************/
1346 /** @addtogroup SMARTCARD_Exported_Functions_Group1
1347   * @{
1348   */
1349 
1350 HAL_StatusTypeDef HAL_SMARTCARD_Init(SMARTCARD_HandleTypeDef *hsmartcard);
1351 HAL_StatusTypeDef HAL_SMARTCARD_DeInit(SMARTCARD_HandleTypeDef *hsmartcard);
1352 void HAL_SMARTCARD_MspInit(SMARTCARD_HandleTypeDef *hsmartcard);
1353 void HAL_SMARTCARD_MspDeInit(SMARTCARD_HandleTypeDef *hsmartcard);
1354 
1355 #if (USE_HAL_SMARTCARD_REGISTER_CALLBACKS == 1)
1356 /* Callbacks Register/UnRegister functions  ***********************************/
1357 HAL_StatusTypeDef HAL_SMARTCARD_RegisterCallback(SMARTCARD_HandleTypeDef *hsmartcard,
1358                                                  HAL_SMARTCARD_CallbackIDTypeDef CallbackID,
1359                                                  pSMARTCARD_CallbackTypeDef pCallback);
1360 HAL_StatusTypeDef HAL_SMARTCARD_UnRegisterCallback(SMARTCARD_HandleTypeDef *hsmartcard,
1361                                                    HAL_SMARTCARD_CallbackIDTypeDef CallbackID);
1362 #endif /* USE_HAL_SMARTCARD_REGISTER_CALLBACKS */
1363 
1364 /**
1365   * @}
1366   */
1367 
1368 /* IO operation functions *****************************************************/
1369 /** @addtogroup SMARTCARD_Exported_Functions_Group2
1370   * @{
1371   */
1372 
1373 HAL_StatusTypeDef HAL_SMARTCARD_Transmit(SMARTCARD_HandleTypeDef *hsmartcard, const uint8_t *pData, uint16_t Size,
1374                                          uint32_t Timeout);
1375 HAL_StatusTypeDef HAL_SMARTCARD_Receive(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t *pData, uint16_t Size,
1376                                         uint32_t Timeout);
1377 HAL_StatusTypeDef HAL_SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsmartcard, const uint8_t *pData, uint16_t Size);
1378 HAL_StatusTypeDef HAL_SMARTCARD_Receive_IT(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t *pData, uint16_t Size);
1379 HAL_StatusTypeDef HAL_SMARTCARD_Transmit_DMA(SMARTCARD_HandleTypeDef *hsmartcard, const uint8_t *pData, uint16_t Size);
1380 HAL_StatusTypeDef HAL_SMARTCARD_Receive_DMA(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t *pData, uint16_t Size);
1381 /* Transfer Abort functions */
1382 HAL_StatusTypeDef HAL_SMARTCARD_Abort(SMARTCARD_HandleTypeDef *hsmartcard);
1383 HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit(SMARTCARD_HandleTypeDef *hsmartcard);
1384 HAL_StatusTypeDef HAL_SMARTCARD_AbortReceive(SMARTCARD_HandleTypeDef *hsmartcard);
1385 HAL_StatusTypeDef HAL_SMARTCARD_Abort_IT(SMARTCARD_HandleTypeDef *hsmartcard);
1386 HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit_IT(SMARTCARD_HandleTypeDef *hsmartcard);
1387 HAL_StatusTypeDef HAL_SMARTCARD_AbortReceive_IT(SMARTCARD_HandleTypeDef *hsmartcard);
1388 
1389 void HAL_SMARTCARD_IRQHandler(SMARTCARD_HandleTypeDef *hsmartcard);
1390 void HAL_SMARTCARD_TxCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard);
1391 void HAL_SMARTCARD_RxCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard);
1392 void HAL_SMARTCARD_ErrorCallback(SMARTCARD_HandleTypeDef *hsmartcard);
1393 void HAL_SMARTCARD_AbortCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard);
1394 void HAL_SMARTCARD_AbortTransmitCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard);
1395 void HAL_SMARTCARD_AbortReceiveCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard);
1396 
1397 /**
1398   * @}
1399   */
1400 
1401 /* Peripheral State and Error functions ***************************************/
1402 /** @addtogroup SMARTCARD_Exported_Functions_Group4
1403   * @{
1404   */
1405 
1406 HAL_SMARTCARD_StateTypeDef HAL_SMARTCARD_GetState(const SMARTCARD_HandleTypeDef *hsmartcard);
1407 uint32_t                   HAL_SMARTCARD_GetError(const SMARTCARD_HandleTypeDef *hsmartcard);
1408 
1409 /**
1410   * @}
1411   */
1412 
1413 /**
1414   * @}
1415   */
1416 
1417 /**
1418   * @}
1419   */
1420 
1421 /**
1422   * @}
1423   */
1424 
1425 #ifdef __cplusplus
1426 }
1427 #endif
1428 
1429 #endif /* STM32H7xx_HAL_SMARTCARD_H */
1430