Back to home page

LXR

 
 

    


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

0001 /**
0002   ******************************************************************************
0003   * @file    stm32h7xx_hal_smartcard_ex.h
0004   * @author  MCD Application Team
0005   * @brief   Header file of SMARTCARD HAL Extended 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_EX_H
0021 #define STM32H7xx_HAL_SMARTCARD_EX_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 SMARTCARDEx
0035   * @{
0036   */
0037 
0038 /* Exported types ------------------------------------------------------------*/
0039 /* Exported constants --------------------------------------------------------*/
0040 
0041 /** @addtogroup SMARTCARDEx_Exported_Constants  SMARTCARD Extended Exported Constants
0042   * @{
0043   */
0044 
0045 /** @defgroup SMARTCARDEx_Transmission_Completion_Indication SMARTCARD Transmission Completion Indication
0046   * @ingroup RTEMSBSPsARMSTM32H7
0047   * @{
0048   */
0049 #define SMARTCARD_TCBGT      SMARTCARD_IT_TCBGT /*!< SMARTCARD transmission complete before guard time */
0050 #define SMARTCARD_TC         SMARTCARD_IT_TC    /*!< SMARTCARD transmission complete (flag raised when guard time has elapsed) */
0051 /**
0052   * @}
0053   */
0054 
0055 /** @defgroup SMARTCARDEx_Advanced_Features_Initialization_Type SMARTCARD advanced feature initialization type
0056   * @ingroup RTEMSBSPsARMSTM32H7
0057   * @{
0058   */
0059 #define SMARTCARD_ADVFEATURE_NO_INIT                 0x00000000U    /*!< No advanced feature initialization                  */
0060 #define SMARTCARD_ADVFEATURE_TXINVERT_INIT           0x00000001U    /*!< TX pin active level inversion                       */
0061 #define SMARTCARD_ADVFEATURE_RXINVERT_INIT           0x00000002U    /*!< RX pin active level inversion                       */
0062 #define SMARTCARD_ADVFEATURE_DATAINVERT_INIT         0x00000004U    /*!< Binary data inversion                               */
0063 #define SMARTCARD_ADVFEATURE_SWAP_INIT               0x00000008U    /*!< TX/RX pins swap                                     */
0064 #define SMARTCARD_ADVFEATURE_RXOVERRUNDISABLE_INIT   0x00000010U    /*!< RX overrun disable                                  */
0065 #define SMARTCARD_ADVFEATURE_DMADISABLEONERROR_INIT  0x00000020U    /*!< DMA disable on Reception Error                      */
0066 #define SMARTCARD_ADVFEATURE_MSBFIRST_INIT           0x00000080U    /*!< Most significant bit sent/received first            */
0067 #define SMARTCARD_ADVFEATURE_TXCOMPLETION            0x00000100U    /*!< TX completion indication before of after guard time */
0068 /**
0069   * @}
0070   */
0071 
0072 /** @defgroup SMARTCARDEx_FIFO_mode SMARTCARD FIFO mode
0073   * @ingroup RTEMSBSPsARMSTM32H7
0074   * @brief    SMARTCARD FIFO mode
0075   * @{
0076   */
0077 #define SMARTCARD_FIFOMODE_DISABLE        0x00000000U                   /*!< FIFO mode disable */
0078 #define SMARTCARD_FIFOMODE_ENABLE         USART_CR1_FIFOEN              /*!< FIFO mode enable  */
0079 /**
0080   * @}
0081   */
0082 
0083 /** @defgroup SMARTCARDEx_TXFIFO_threshold_level SMARTCARD TXFIFO threshold level
0084   * @ingroup RTEMSBSPsARMSTM32H7
0085   * @brief    SMARTCARD TXFIFO level
0086   * @{
0087   */
0088 #define SMARTCARD_TXFIFO_THRESHOLD_1_8    0x00000000U                               /*!< TXFIFO reaches 1/8 of its depth */
0089 #define SMARTCARD_TXFIFO_THRESHOLD_1_4   USART_CR3_TXFTCFG_0                        /*!< TXFIFO reaches 1/4 of its depth */
0090 #define SMARTCARD_TXFIFO_THRESHOLD_1_2   USART_CR3_TXFTCFG_1                        /*!< TXFIFO reaches 1/2 of its depth */
0091 #define SMARTCARD_TXFIFO_THRESHOLD_3_4   (USART_CR3_TXFTCFG_0|USART_CR3_TXFTCFG_1)  /*!< TXFIFO reaches 3/4 of its depth */
0092 #define SMARTCARD_TXFIFO_THRESHOLD_7_8   USART_CR3_TXFTCFG_2                        /*!< TXFIFO reaches 7/8 of its depth */
0093 #define SMARTCARD_TXFIFO_THRESHOLD_8_8   (USART_CR3_TXFTCFG_2|USART_CR3_TXFTCFG_0)  /*!< TXFIFO becomes empty            */
0094 /**
0095   * @}
0096   */
0097 
0098 /** @defgroup SMARTCARDEx_RXFIFO_threshold_level SMARTCARD RXFIFO threshold level
0099   * @ingroup RTEMSBSPsARMSTM32H7
0100   * @brief    SMARTCARD RXFIFO level
0101   * @{
0102   */
0103 #define SMARTCARD_RXFIFO_THRESHOLD_1_8   0x00000000U                                /*!< RXFIFO FIFO reaches 1/8 of its depth */
0104 #define SMARTCARD_RXFIFO_THRESHOLD_1_4   USART_CR3_RXFTCFG_0                        /*!< RXFIFO FIFO reaches 1/4 of its depth */
0105 #define SMARTCARD_RXFIFO_THRESHOLD_1_2   USART_CR3_RXFTCFG_1                        /*!< RXFIFO FIFO reaches 1/2 of its depth */
0106 #define SMARTCARD_RXFIFO_THRESHOLD_3_4   (USART_CR3_RXFTCFG_0|USART_CR3_RXFTCFG_1)  /*!< RXFIFO FIFO reaches 3/4 of its depth */
0107 #define SMARTCARD_RXFIFO_THRESHOLD_7_8   USART_CR3_RXFTCFG_2                        /*!< RXFIFO FIFO reaches 7/8 of its depth */
0108 #define SMARTCARD_RXFIFO_THRESHOLD_8_8   (USART_CR3_RXFTCFG_2|USART_CR3_RXFTCFG_0)  /*!< RXFIFO FIFO becomes full             */
0109 /**
0110   * @}
0111   */
0112 
0113 /** @defgroup SMARTCARDEx_Flags SMARTCARD Flags
0114   * @ingroup RTEMSBSPsARMSTM32H7
0115   *        Elements values convention: 0xXXXX
0116   *           - 0xXXXX  : Flag mask in the ISR register
0117   * @{
0118   */
0119 #define SMARTCARD_FLAG_TCBGT          USART_ISR_TCBGT         /*!< SMARTCARD transmission complete before guard time completion */
0120 #define SMARTCARD_FLAG_REACK          USART_ISR_REACK         /*!< SMARTCARD receive enable acknowledge flag  */
0121 #define SMARTCARD_FLAG_TEACK          USART_ISR_TEACK         /*!< SMARTCARD transmit enable acknowledge flag */
0122 #define SMARTCARD_FLAG_BUSY           USART_ISR_BUSY          /*!< SMARTCARD busy flag                        */
0123 #define SMARTCARD_FLAG_EOBF           USART_ISR_EOBF          /*!< SMARTCARD end of block flag                */
0124 #define SMARTCARD_FLAG_RTOF           USART_ISR_RTOF          /*!< SMARTCARD receiver timeout flag            */
0125 #define SMARTCARD_FLAG_TXE            USART_ISR_TXE_TXFNF     /*!< SMARTCARD transmit data register empty     */
0126 #define SMARTCARD_FLAG_TXFNF          USART_ISR_TXE_TXFNF     /*!< SMARTCARD TXFIFO not full                  */
0127 #define SMARTCARD_FLAG_TC             USART_ISR_TC            /*!< SMARTCARD transmission complete            */
0128 #define SMARTCARD_FLAG_RXNE           USART_ISR_RXNE_RXFNE    /*!< SMARTCARD read data register not empty     */
0129 #define SMARTCARD_FLAG_RXFNE          USART_ISR_RXNE_RXFNE    /*!< SMARTCARD RXFIFO not empty                 */
0130 #define SMARTCARD_FLAG_IDLE           USART_ISR_IDLE          /*!< SMARTCARD idle line detection              */
0131 #define SMARTCARD_FLAG_ORE            USART_ISR_ORE           /*!< SMARTCARD overrun error                    */
0132 #define SMARTCARD_FLAG_NE             USART_ISR_NE            /*!< SMARTCARD noise error                      */
0133 #define SMARTCARD_FLAG_FE             USART_ISR_FE            /*!< SMARTCARD frame error                      */
0134 #define SMARTCARD_FLAG_PE             USART_ISR_PE            /*!< SMARTCARD parity error                     */
0135 #define SMARTCARD_FLAG_TXFE           USART_ISR_TXFE          /*!< SMARTCARD TXFIFO Empty flag                */
0136 #define SMARTCARD_FLAG_RXFF           USART_ISR_RXFF          /*!< SMARTCARD RXFIFO Full flag                 */
0137 #define SMARTCARD_FLAG_RXFT           USART_ISR_RXFT          /*!< SMARTCARD RXFIFO threshold flag            */
0138 #define SMARTCARD_FLAG_TXFT           USART_ISR_TXFT          /*!< SMARTCARD TXFIFO threshold flag            */
0139 /**
0140   * @}
0141   */
0142 
0143 /** @defgroup SMARTCARDEx_Interrupt_definition SMARTCARD Interrupts Definition
0144   * @ingroup RTEMSBSPsARMSTM32H7
0145   *        Elements values convention: 000ZZZZZ0XXYYYYYb
0146   *           - YYYYY  : Interrupt source position in the XX register (5 bits)
0147   *           - XX  : Interrupt source register (2 bits)
0148   *                 - 01: CR1 register
0149   *                 - 10: CR2 register
0150   *                 - 11: CR3 register
0151   *           - ZZZZZ  : Flag position in the ISR register(5 bits)
0152   * @{
0153   */
0154 #define SMARTCARD_IT_PE                     0x0028U           /*!< SMARTCARD parity error interruption                 */
0155 #define SMARTCARD_IT_TXE                    0x0727U           /*!< SMARTCARD transmit data register empty interruption */
0156 #define SMARTCARD_IT_TXFNF                  0x0727U           /*!< SMARTCARD TX FIFO not full interruption             */
0157 #define SMARTCARD_IT_TC                     0x0626U           /*!< SMARTCARD transmission complete interruption        */
0158 #define SMARTCARD_IT_RXNE                   0x0525U           /*!< SMARTCARD read data register not empty interruption */
0159 #define SMARTCARD_IT_RXFNE                  0x0525U           /*!< SMARTCARD RXFIFO not empty interruption             */
0160 #define SMARTCARD_IT_IDLE                   0x0424U           /*!< SMARTCARD idle line detection interruption          */
0161 
0162 #define SMARTCARD_IT_ERR                    0x0060U           /*!< SMARTCARD error interruption         */
0163 #define SMARTCARD_IT_ORE                    0x0300U           /*!< SMARTCARD overrun error interruption */
0164 #define SMARTCARD_IT_NE                     0x0200U           /*!< SMARTCARD noise error interruption   */
0165 #define SMARTCARD_IT_FE                     0x0100U           /*!< SMARTCARD frame error interruption   */
0166 
0167 #define SMARTCARD_IT_EOB                    0x0C3BU           /*!< SMARTCARD end of block interruption     */
0168 #define SMARTCARD_IT_RTO                    0x0B3AU           /*!< SMARTCARD receiver timeout interruption */
0169 #define SMARTCARD_IT_TCBGT                  0x1978U           /*!< SMARTCARD transmission complete before guard time completion interruption */
0170 
0171 #define SMARTCARD_IT_RXFF                    0x183FU          /*!< SMARTCARD RXFIFO full interruption                  */
0172 #define SMARTCARD_IT_TXFE                    0x173EU          /*!< SMARTCARD TXFIFO empty interruption                 */
0173 #define SMARTCARD_IT_RXFT                    0x1A7CU          /*!< SMARTCARD RXFIFO threshold reached interruption     */
0174 #define SMARTCARD_IT_TXFT                    0x1B77U          /*!< SMARTCARD TXFIFO threshold reached interruption     */
0175 /**
0176   * @}
0177   */
0178 
0179 /** @defgroup SMARTCARDEx_IT_CLEAR_Flags SMARTCARD Interruption Clear Flags
0180   * @ingroup RTEMSBSPsARMSTM32H7
0181   * @{
0182   */
0183 #define SMARTCARD_CLEAR_PEF                 USART_ICR_PECF    /*!< SMARTCARD parity error clear flag          */
0184 #define SMARTCARD_CLEAR_FEF                 USART_ICR_FECF    /*!< SMARTCARD framing error clear flag         */
0185 #define SMARTCARD_CLEAR_NEF                 USART_ICR_NECF    /*!< SMARTCARD noise error detected clear flag  */
0186 #define SMARTCARD_CLEAR_OREF                USART_ICR_ORECF   /*!< SMARTCARD overrun error clear flag         */
0187 #define SMARTCARD_CLEAR_IDLEF               USART_ICR_IDLECF  /*!< SMARTCARD idle line detected clear flag    */
0188 #define SMARTCARD_CLEAR_TXFECF              USART_ICR_TXFECF  /*!< TXFIFO empty Clear Flag                    */
0189 #define SMARTCARD_CLEAR_TCF                 USART_ICR_TCCF    /*!< SMARTCARD transmission complete clear flag */
0190 #define SMARTCARD_CLEAR_TCBGTF              USART_ICR_TCBGTCF /*!< SMARTCARD transmission complete before guard time completion clear flag */
0191 #define SMARTCARD_CLEAR_RTOF                USART_ICR_RTOCF   /*!< SMARTCARD receiver time out clear flag     */
0192 #define SMARTCARD_CLEAR_EOBF                USART_ICR_EOBCF   /*!< SMARTCARD end of block clear flag          */
0193 /**
0194   * @}
0195   */
0196 
0197 /**
0198   * @}
0199   */
0200 /* Exported macros -----------------------------------------------------------*/
0201 /* Private macros ------------------------------------------------------------*/
0202 /** @defgroup SMARTCARDEx_Private_Macros SMARTCARD Extended Private Macros
0203   * @ingroup RTEMSBSPsARMSTM32H7
0204   * @{
0205   */
0206 
0207 /** @brief  Set the Transmission Completion flag
0208   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0209   * @note  If TCBGT (Transmission Complete Before Guard Time) flag is not available or if
0210   *        AdvancedInit.TxCompletionIndication is not already filled, the latter is forced
0211   *        to SMARTCARD_TC (transmission completion indication when guard time has elapsed).
0212   * @retval None
0213   */
0214 #define SMARTCARD_TRANSMISSION_COMPLETION_SETTING(__HANDLE__)                                                \
0215   do {                                                                                                       \
0216     if (HAL_IS_BIT_CLR((__HANDLE__)->AdvancedInit.AdvFeatureInit, SMARTCARD_ADVFEATURE_TXCOMPLETION))        \
0217     {                                                                                                        \
0218       (__HANDLE__)->AdvancedInit.TxCompletionIndication = SMARTCARD_TC;                                      \
0219     }                                                                                                        \
0220     else                                                                                                     \
0221     {                                                                                                        \
0222       assert_param(IS_SMARTCARD_TRANSMISSION_COMPLETION((__HANDLE__)->AdvancedInit.TxCompletionIndication)); \
0223     }                                                                                                        \
0224   } while(0U)
0225 
0226 /** @brief  Return the transmission completion flag.
0227   * @param  __HANDLE__ specifies the SMARTCARD Handle.
0228   * @note  Based on AdvancedInit.TxCompletionIndication setting, return TC or TCBGT flag.
0229   *        When TCBGT flag (Transmission Complete Before Guard Time) is not available, TC flag is
0230   *        reported.
0231   * @retval Transmission completion flag
0232   */
0233 #define SMARTCARD_TRANSMISSION_COMPLETION_FLAG(__HANDLE__)  \
0234   (((__HANDLE__)->AdvancedInit.TxCompletionIndication == SMARTCARD_TC) ? (SMARTCARD_FLAG_TC) :  (SMARTCARD_FLAG_TCBGT))
0235 
0236 
0237 /** @brief Ensure that SMARTCARD frame transmission completion used flag is valid.
0238   * @param __TXCOMPLETE__ SMARTCARD frame transmission completion used flag.
0239   * @retval SET (__TXCOMPLETE__ is valid) or RESET (__TXCOMPLETE__ is invalid)
0240   */
0241 #define IS_SMARTCARD_TRANSMISSION_COMPLETION(__TXCOMPLETE__) (((__TXCOMPLETE__) == SMARTCARD_TCBGT) || \
0242                                                               ((__TXCOMPLETE__) == SMARTCARD_TC))
0243 
0244 /** @brief Ensure that SMARTCARD FIFO mode is valid.
0245   * @param __STATE__ SMARTCARD FIFO mode.
0246   * @retval SET (__STATE__ is valid) or RESET (__STATE__ is invalid)
0247   */
0248 #define IS_SMARTCARD_FIFOMODE_STATE(__STATE__) (((__STATE__) == SMARTCARD_FIFOMODE_DISABLE ) || \
0249                                                 ((__STATE__) == SMARTCARD_FIFOMODE_ENABLE))
0250 
0251 /** @brief Ensure that SMARTCARD TXFIFO threshold level is valid.
0252   * @param __THRESHOLD__ SMARTCARD TXFIFO threshold level.
0253   * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid)
0254   */
0255 #define IS_SMARTCARD_TXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_1_8) || \
0256                                                       ((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_1_4) || \
0257                                                       ((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_1_2) || \
0258                                                       ((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_3_4) || \
0259                                                       ((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_7_8) || \
0260                                                       ((__THRESHOLD__) == SMARTCARD_TXFIFO_THRESHOLD_8_8))
0261 
0262 /** @brief Ensure that SMARTCARD RXFIFO threshold level is valid.
0263   * @param __THRESHOLD__ SMARTCARD RXFIFO threshold level.
0264   * @retval SET (__THRESHOLD__ is valid) or RESET (__THRESHOLD__ is invalid)
0265   */
0266 #define IS_SMARTCARD_RXFIFO_THRESHOLD(__THRESHOLD__) (((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_1_8) || \
0267                                                       ((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_1_4) || \
0268                                                       ((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_1_2) || \
0269                                                       ((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_3_4) || \
0270                                                       ((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_7_8) || \
0271                                                       ((__THRESHOLD__) == SMARTCARD_RXFIFO_THRESHOLD_8_8))
0272 
0273 /**
0274   * @}
0275   */
0276 
0277 /* Exported functions --------------------------------------------------------*/
0278 /** @addtogroup SMARTCARDEx_Exported_Functions
0279   * @{
0280   */
0281 
0282 /* Initialization and de-initialization functions  ****************************/
0283 /* IO operation methods *******************************************************/
0284 
0285 /** @addtogroup SMARTCARDEx_Exported_Functions_Group1
0286   * @{
0287   */
0288 
0289 /* Peripheral Control functions ***********************************************/
0290 void              HAL_SMARTCARDEx_BlockLength_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t BlockLength);
0291 void              HAL_SMARTCARDEx_TimeOut_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t TimeOutValue);
0292 HAL_StatusTypeDef HAL_SMARTCARDEx_EnableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard);
0293 HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard);
0294 
0295 /**
0296   * @}
0297   */
0298 
0299 /* Exported functions --------------------------------------------------------*/
0300 /** @addtogroup SMARTCARDEx_Exported_Functions_Group2
0301   * @{
0302   */
0303 
0304 /* IO operation functions *****************************************************/
0305 void HAL_SMARTCARDEx_RxFifoFullCallback(SMARTCARD_HandleTypeDef *hsmartcard);
0306 void HAL_SMARTCARDEx_TxFifoEmptyCallback(SMARTCARD_HandleTypeDef *hsmartcard);
0307 
0308 /**
0309   * @}
0310   */
0311 
0312 /** @addtogroup SMARTCARDEx_Exported_Functions_Group3
0313   * @{
0314   */
0315 
0316 /* Peripheral Control functions ***********************************************/
0317 HAL_StatusTypeDef HAL_SMARTCARDEx_EnableFifoMode(SMARTCARD_HandleTypeDef *hsmartcard);
0318 HAL_StatusTypeDef HAL_SMARTCARDEx_DisableFifoMode(SMARTCARD_HandleTypeDef *hsmartcard);
0319 HAL_StatusTypeDef HAL_SMARTCARDEx_SetTxFifoThreshold(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t Threshold);
0320 HAL_StatusTypeDef HAL_SMARTCARDEx_SetRxFifoThreshold(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t Threshold);
0321 
0322 /**
0323   * @}
0324   */
0325 
0326 /**
0327   * @}
0328   */
0329 
0330 /* Private functions ---------------------------------------------------------*/
0331 
0332 /**
0333   * @}
0334   */
0335 
0336 /**
0337   * @}
0338   */
0339 
0340 #ifdef __cplusplus
0341 }
0342 #endif
0343 
0344 #endif /* STM32H7xx_HAL_SMARTCARD_EX_H */
0345