1 /** 2 ****************************************************************************** 3 * @file stm32f7xx_hal_smartcard.h 4 * @author MCD Application Team 5 * @brief Header file of SMARTCARD HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2017 STMicroelectronics. 10 * All rights reserved. 11 * 12 * This software is licensed under terms that can be found in the LICENSE file 13 * in the root directory of this software component. 14 * If no LICENSE file comes with this software, it is provided AS-IS. 15 * 16 ****************************************************************************** 17 */ 18 19 /* Define to prevent recursive inclusion -------------------------------------*/ 20 #ifndef STM32F7xx_HAL_SMARTCARD_H 21 #define STM32F7xx_HAL_SMARTCARD_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32f7xx_hal_def.h" 29 30 /** @addtogroup STM32F7xx_HAL_Driver 31 * @{ 32 */ 33 34 /** @addtogroup SMARTCARD 35 * @{ 36 */ 37 38 /* Exported types ------------------------------------------------------------*/ 39 /** @defgroup SMARTCARD_Exported_Types SMARTCARD Exported Types 40 * @{ 41 */ 42 43 /** 44 * @brief SMARTCARD Init Structure definition 45 */ 46 typedef struct 47 { 48 uint32_t BaudRate; /*!< Configures the SmartCard communication baud rate. 49 The baud rate register is computed using the following formula: 50 Baud Rate Register = ((usart_ker_ckpres) / ((hsmartcard->Init.BaudRate))) 51 where usart_ker_ckpres is the USART input clock divided by a prescaler */ 52 53 uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame. 54 This parameter @ref SMARTCARD_Word_Length can only be 55 set to 9 (8 data + 1 parity bits). */ 56 57 uint32_t StopBits; /*!< Specifies the number of stop bits. 58 This parameter can be a value of @ref SMARTCARD_Stop_Bits. */ 59 60 uint16_t Parity; /*!< Specifies the parity mode. 61 This parameter can be a value of @ref SMARTCARD_Parity 62 @note The parity is enabled by default (PCE is forced to 1). 63 Since the WordLength is forced to 8 bits + parity, M is 64 forced to 1 and the parity bit is the 9th bit. */ 65 66 uint16_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled. 67 This parameter can be a value of @ref SMARTCARD_Mode */ 68 69 uint16_t CLKPolarity; /*!< Specifies the steady state of the serial clock. 70 This parameter can be a value of @ref SMARTCARD_Clock_Polarity */ 71 72 uint16_t CLKPhase; /*!< Specifies the clock transition on which the bit capture is made. 73 This parameter can be a value of @ref SMARTCARD_Clock_Phase */ 74 75 uint16_t CLKLastBit; /*!< Specifies whether the clock pulse corresponding to the last transmitted 76 data bit (MSB) has to be output on the SCLK pin in synchronous mode. 77 This parameter can be a value of @ref SMARTCARD_Last_Bit */ 78 79 uint16_t OneBitSampling; /*!< Specifies whether a single sample or three samples' majority vote 80 is selected. Selecting the single sample method increases 81 the receiver tolerance to clock deviations. This parameter can be a value 82 of @ref SMARTCARD_OneBit_Sampling. */ 83 84 uint8_t Prescaler; /*!< Specifies the SmartCard Prescaler. 85 This parameter can be any value from 0x01 to 0x1F. Prescaler value is 86 multiplied by 2 to give the division factor of the source clock frequency */ 87 88 uint8_t GuardTime; /*!< Specifies the SmartCard Guard Time applied after stop bits. */ 89 90 uint16_t NACKEnable; /*!< Specifies whether the SmartCard NACK transmission is enabled 91 in case of parity error. 92 This parameter can be a value of @ref SMARTCARD_NACK_Enable */ 93 94 uint32_t TimeOutEnable; /*!< Specifies whether the receiver timeout is enabled. 95 This parameter can be a value of @ref SMARTCARD_Timeout_Enable*/ 96 97 uint32_t TimeOutValue; /*!< Specifies the receiver time out value in number of baud blocks: 98 it is used to implement the Character Wait Time (CWT) and 99 Block Wait Time (BWT). It is coded over 24 bits. */ 100 101 uint8_t BlockLength; /*!< Specifies the SmartCard Block Length in T=1 Reception mode. 102 This parameter can be any value from 0x0 to 0xFF */ 103 104 uint8_t AutoRetryCount; /*!< Specifies the SmartCard auto-retry count (number of retries in 105 receive and transmit mode). When set to 0, retransmission is 106 disabled. Otherwise, its maximum value is 7 (before signalling 107 an error) */ 108 109 } SMARTCARD_InitTypeDef; 110 111 /** 112 * @brief SMARTCARD advanced features initialization structure definition 113 */ 114 typedef struct 115 { 116 uint32_t AdvFeatureInit; /*!< Specifies which advanced SMARTCARD features is initialized. Several 117 advanced features may be initialized at the same time. This parameter 118 can be a value of @ref SMARTCARDEx_Advanced_Features_Initialization_Type */ 119 120 uint32_t TxPinLevelInvert; /*!< Specifies whether the TX pin active level is inverted. 121 This parameter can be a value of @ref SMARTCARD_Tx_Inv */ 122 123 uint32_t RxPinLevelInvert; /*!< Specifies whether the RX pin active level is inverted. 124 This parameter can be a value of @ref SMARTCARD_Rx_Inv */ 125 126 uint32_t DataInvert; /*!< Specifies whether data are inverted (positive/direct logic 127 vs negative/inverted logic). 128 This parameter can be a value of @ref SMARTCARD_Data_Inv */ 129 130 uint32_t Swap; /*!< Specifies whether TX and RX pins are swapped. 131 This parameter can be a value of @ref SMARTCARD_Rx_Tx_Swap */ 132 133 uint32_t OverrunDisable; /*!< Specifies whether the reception overrun detection is disabled. 134 This parameter can be a value of @ref SMARTCARD_Overrun_Disable */ 135 136 uint32_t DMADisableonRxError; /*!< Specifies whether the DMA is disabled in case of reception error. 137 This parameter can be a value of @ref SMARTCARD_DMA_Disable_on_Rx_Error */ 138 139 uint32_t MSBFirst; /*!< Specifies whether MSB is sent first on UART line. 140 This parameter can be a value of @ref SMARTCARD_MSB_First */ 141 142 uint16_t TxCompletionIndication; /*!< Specifies which transmission completion indication is used: before (when 143 relevant flag is available) or once guard time period has elapsed. 144 This parameter can be a value 145 of @ref SMARTCARDEx_Transmission_Completion_Indication. */ 146 } SMARTCARD_AdvFeatureInitTypeDef; 147 148 /** 149 * @brief HAL SMARTCARD State definition 150 * @note HAL SMARTCARD State value is a combination of 2 different substates: 151 * gState and RxState (see @ref SMARTCARD_State_Definition). 152 * - gState contains SMARTCARD state information related to global Handle management 153 * and also information related to Tx operations. 154 * gState value coding follow below described bitmap : 155 * b7-b6 Error information 156 * 00 : No Error 157 * 01 : (Not Used) 158 * 10 : Timeout 159 * 11 : Error 160 * b5 Peripheral initialization status 161 * 0 : Reset (Peripheral not initialized) 162 * 1 : Init done (Peripheral initialized. HAL SMARTCARD Init function already called) 163 * b4-b3 (not used) 164 * xx : Should be set to 00 165 * b2 Intrinsic process state 166 * 0 : Ready 167 * 1 : Busy (Peripheral busy with some configuration or internal operations) 168 * b1 (not used) 169 * x : Should be set to 0 170 * b0 Tx state 171 * 0 : Ready (no Tx operation ongoing) 172 * 1 : Busy (Tx operation ongoing) 173 * - RxState contains information related to Rx operations. 174 * RxState value coding follow below described bitmap : 175 * b7-b6 (not used) 176 * xx : Should be set to 00 177 * b5 Peripheral initialization status 178 * 0 : Reset (Peripheral not initialized) 179 * 1 : Init done (Peripheral initialized) 180 * b4-b2 (not used) 181 * xxx : Should be set to 000 182 * b1 Rx state 183 * 0 : Ready (no Rx operation ongoing) 184 * 1 : Busy (Rx operation ongoing) 185 * b0 (not used) 186 * x : Should be set to 0. 187 */ 188 typedef uint32_t HAL_SMARTCARD_StateTypeDef; 189 190 /** 191 * @brief SMARTCARD handle Structure definition 192 */ 193 typedef struct __SMARTCARD_HandleTypeDef 194 { 195 USART_TypeDef *Instance; /*!< USART registers base address */ 196 197 SMARTCARD_InitTypeDef Init; /*!< SmartCard communication parameters */ 198 199 SMARTCARD_AdvFeatureInitTypeDef AdvancedInit; /*!< SmartCard advanced features initialization parameters */ 200 201 const uint8_t *pTxBuffPtr; /*!< Pointer to SmartCard Tx transfer Buffer */ 202 203 uint16_t TxXferSize; /*!< SmartCard Tx Transfer size */ 204 205 __IO uint16_t TxXferCount; /*!< SmartCard Tx Transfer Counter */ 206 207 uint8_t *pRxBuffPtr; /*!< Pointer to SmartCard Rx transfer Buffer */ 208 209 uint16_t RxXferSize; /*!< SmartCard Rx Transfer size */ 210 211 __IO uint16_t RxXferCount; /*!< SmartCard Rx Transfer Counter */ 212 213 214 void (*RxISR)(struct __SMARTCARD_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */ 215 216 void (*TxISR)(struct __SMARTCARD_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */ 217 218 DMA_HandleTypeDef *hdmatx; /*!< SmartCard Tx DMA Handle parameters */ 219 220 DMA_HandleTypeDef *hdmarx; /*!< SmartCard Rx DMA Handle parameters */ 221 222 HAL_LockTypeDef Lock; /*!< Locking object */ 223 224 __IO HAL_SMARTCARD_StateTypeDef gState; /*!< SmartCard state information related to global 225 Handle management and also related to Tx operations. 226 This parameter can be a value 227 of @ref HAL_SMARTCARD_StateTypeDef */ 228 229 __IO HAL_SMARTCARD_StateTypeDef RxState; /*!< SmartCard state information related to Rx operations. 230 This parameter can be a value 231 of @ref HAL_SMARTCARD_StateTypeDef */ 232 233 __IO uint32_t ErrorCode; /*!< SmartCard Error code */ 234 235 #if (USE_HAL_SMARTCARD_REGISTER_CALLBACKS == 1) 236 void (* TxCpltCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard); /*!< SMARTCARD Tx Complete Callback */ 237 238 void (* RxCpltCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard); /*!< SMARTCARD Rx Complete Callback */ 239 240 void (* ErrorCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard); /*!< SMARTCARD Error Callback */ 241 242 void (* AbortCpltCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard); /*!< SMARTCARD Abort Complete Callback */ 243 244 void (* AbortTransmitCpltCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard); /*!< SMARTCARD Abort Transmit Complete Callback */ 245 246 void (* AbortReceiveCpltCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard); /*!< SMARTCARD Abort Receive Complete Callback */ 247 248 void (* MspInitCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard); /*!< SMARTCARD Msp Init callback */ 249 250 void (* MspDeInitCallback)(struct __SMARTCARD_HandleTypeDef *hsmartcard); /*!< SMARTCARD Msp DeInit callback */ 251 #endif /* USE_HAL_SMARTCARD_REGISTER_CALLBACKS */ 252 253 } SMARTCARD_HandleTypeDef; 254 255 #if (USE_HAL_SMARTCARD_REGISTER_CALLBACKS == 1) 256 /** 257 * @brief HAL SMARTCARD Callback ID enumeration definition 258 */ 259 typedef enum 260 { 261 HAL_SMARTCARD_TX_COMPLETE_CB_ID = 0x00U, /*!< SMARTCARD Tx Complete Callback ID */ 262 HAL_SMARTCARD_RX_COMPLETE_CB_ID = 0x01U, /*!< SMARTCARD Rx Complete Callback ID */ 263 HAL_SMARTCARD_ERROR_CB_ID = 0x02U, /*!< SMARTCARD Error Callback ID */ 264 HAL_SMARTCARD_ABORT_COMPLETE_CB_ID = 0x03U, /*!< SMARTCARD Abort Complete Callback ID */ 265 HAL_SMARTCARD_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x04U, /*!< SMARTCARD Abort Transmit Complete Callback ID */ 266 HAL_SMARTCARD_ABORT_RECEIVE_COMPLETE_CB_ID = 0x05U, /*!< SMARTCARD Abort Receive Complete Callback ID */ 267 268 HAL_SMARTCARD_MSPINIT_CB_ID = 0x08U, /*!< SMARTCARD MspInit callback ID */ 269 HAL_SMARTCARD_MSPDEINIT_CB_ID = 0x09U /*!< SMARTCARD MspDeInit callback ID */ 270 271 } HAL_SMARTCARD_CallbackIDTypeDef; 272 273 /** 274 * @brief HAL SMARTCARD Callback pointer definition 275 */ 276 typedef void (*pSMARTCARD_CallbackTypeDef)(SMARTCARD_HandleTypeDef *hsmartcard); /*!< pointer to an SMARTCARD callback function */ 277 278 #endif /* USE_HAL_SMARTCARD_REGISTER_CALLBACKS */ 279 280 /** 281 * @brief SMARTCARD clock sources 282 */ 283 typedef enum 284 { 285 SMARTCARD_CLOCKSOURCE_PCLK1 = 0x00U, /*!< PCLK1 clock source */ 286 SMARTCARD_CLOCKSOURCE_PCLK2 = 0x01U, /*!< PCLK2 clock source */ 287 SMARTCARD_CLOCKSOURCE_HSI = 0x02U, /*!< HSI clock source */ 288 SMARTCARD_CLOCKSOURCE_SYSCLK = 0x04U, /*!< SYSCLK clock source */ 289 SMARTCARD_CLOCKSOURCE_LSE = 0x08U, /*!< LSE clock source */ 290 SMARTCARD_CLOCKSOURCE_UNDEFINED = 0x10U /*!< undefined clock source */ 291 } SMARTCARD_ClockSourceTypeDef; 292 293 /** 294 * @} 295 */ 296 297 /* Exported constants --------------------------------------------------------*/ 298 /** @defgroup SMARTCARD_Exported_Constants SMARTCARD Exported Constants 299 * @{ 300 */ 301 302 /** @defgroup SMARTCARD_State_Definition SMARTCARD State Code Definition 303 * @{ 304 */ 305 #define HAL_SMARTCARD_STATE_RESET 0x00000000U /*!< Peripheral is not initialized. Value 306 is allowed for gState and RxState */ 307 #define HAL_SMARTCARD_STATE_READY 0x00000020U /*!< Peripheral Initialized and ready for 308 use. Value is allowed for gState 309 and RxState */ 310 #define HAL_SMARTCARD_STATE_BUSY 0x00000024U /*!< an internal process is ongoing 311 Value is allowed for gState only */ 312 #define HAL_SMARTCARD_STATE_BUSY_TX 0x00000021U /*!< Data Transmission process is ongoing 313 Value is allowed for gState only */ 314 #define HAL_SMARTCARD_STATE_BUSY_RX 0x00000022U /*!< Data Reception process is ongoing 315 Value is allowed for RxState only */ 316 #define HAL_SMARTCARD_STATE_BUSY_TX_RX 0x00000023U /*!< Data Transmission and Reception 317 process is ongoing Not to be used for 318 neither gState nor RxState. 319 Value is result of combination (Or) 320 between gState and RxState values */ 321 #define HAL_SMARTCARD_STATE_TIMEOUT 0x000000A0U /*!< Timeout state 322 Value is allowed for gState only */ 323 #define HAL_SMARTCARD_STATE_ERROR 0x000000E0U /*!< Error 324 Value is allowed for gState only */ 325 /** 326 * @} 327 */ 328 329 /** @defgroup SMARTCARD_Error_Definition SMARTCARD Error Code Definition 330 * @{ 331 */ 332 #define HAL_SMARTCARD_ERROR_NONE (0x00000000U) /*!< No error */ 333 #define HAL_SMARTCARD_ERROR_PE (0x00000001U) /*!< Parity error */ 334 #define HAL_SMARTCARD_ERROR_NE (0x00000002U) /*!< Noise error */ 335 #define HAL_SMARTCARD_ERROR_FE (0x00000004U) /*!< frame error */ 336 #define HAL_SMARTCARD_ERROR_ORE (0x00000008U) /*!< Overrun error */ 337 #define HAL_SMARTCARD_ERROR_DMA (0x00000010U) /*!< DMA transfer error */ 338 #define HAL_SMARTCARD_ERROR_RTO (0x00000020U) /*!< Receiver TimeOut error */ 339 #if (USE_HAL_SMARTCARD_REGISTER_CALLBACKS == 1) 340 #define HAL_SMARTCARD_ERROR_INVALID_CALLBACK (0x00000040U) /*!< Invalid Callback error */ 341 #endif /* USE_HAL_SMARTCARD_REGISTER_CALLBACKS */ 342 /** 343 * @} 344 */ 345 346 /** @defgroup SMARTCARD_Word_Length SMARTCARD Word Length 347 * @{ 348 */ 349 #define SMARTCARD_WORDLENGTH_9B USART_CR1_M0 /*!< SMARTCARD frame length */ 350 /** 351 * @} 352 */ 353 354 /** @defgroup SMARTCARD_Stop_Bits SMARTCARD Number of Stop Bits 355 * @{ 356 */ 357 #define SMARTCARD_STOPBITS_0_5 USART_CR2_STOP_0 /*!< SMARTCARD frame with 0.5 stop bit */ 358 #define SMARTCARD_STOPBITS_1_5 USART_CR2_STOP /*!< SMARTCARD frame with 1.5 stop bits */ 359 /** 360 * @} 361 */ 362 363 /** @defgroup SMARTCARD_Parity SMARTCARD Parity 364 * @{ 365 */ 366 #define SMARTCARD_PARITY_EVEN USART_CR1_PCE /*!< SMARTCARD frame even parity */ 367 #define SMARTCARD_PARITY_ODD (USART_CR1_PCE | USART_CR1_PS) /*!< SMARTCARD frame odd parity */ 368 /** 369 * @} 370 */ 371 372 /** @defgroup SMARTCARD_Mode SMARTCARD Transfer Mode 373 * @{ 374 */ 375 #define SMARTCARD_MODE_RX USART_CR1_RE /*!< SMARTCARD RX mode */ 376 #define SMARTCARD_MODE_TX USART_CR1_TE /*!< SMARTCARD TX mode */ 377 #define SMARTCARD_MODE_TX_RX (USART_CR1_TE |USART_CR1_RE) /*!< SMARTCARD RX and TX mode */ 378 /** 379 * @} 380 */ 381 382 /** @defgroup SMARTCARD_Clock_Polarity SMARTCARD Clock Polarity 383 * @{ 384 */ 385 #define SMARTCARD_POLARITY_LOW 0x00000000U /*!< SMARTCARD frame low polarity */ 386 #define SMARTCARD_POLARITY_HIGH USART_CR2_CPOL /*!< SMARTCARD frame high polarity */ 387 /** 388 * @} 389 */ 390 391 /** @defgroup SMARTCARD_Clock_Phase SMARTCARD Clock Phase 392 * @{ 393 */ 394 #define SMARTCARD_PHASE_1EDGE 0x00000000U /*!< SMARTCARD frame phase on first clock transition */ 395 #define SMARTCARD_PHASE_2EDGE USART_CR2_CPHA /*!< SMARTCARD frame phase on second clock transition */ 396 /** 397 * @} 398 */ 399 400 /** @defgroup SMARTCARD_Last_Bit SMARTCARD Last Bit 401 * @{ 402 */ 403 #define SMARTCARD_LASTBIT_DISABLE 0x00000000U /*!< SMARTCARD frame last data bit clock pulse not output to SCLK pin */ 404 #define SMARTCARD_LASTBIT_ENABLE USART_CR2_LBCL /*!< SMARTCARD frame last data bit clock pulse output to SCLK pin */ 405 /** 406 * @} 407 */ 408 409 /** @defgroup SMARTCARD_OneBit_Sampling SMARTCARD One Bit Sampling Method 410 * @{ 411 */ 412 #define SMARTCARD_ONE_BIT_SAMPLE_DISABLE 0x00000000U /*!< SMARTCARD frame one-bit sample disabled */ 413 #define SMARTCARD_ONE_BIT_SAMPLE_ENABLE USART_CR3_ONEBIT /*!< SMARTCARD frame one-bit sample enabled */ 414 /** 415 * @} 416 */ 417 418 /** @defgroup SMARTCARD_NACK_Enable SMARTCARD NACK Enable 419 * @{ 420 */ 421 #define SMARTCARD_NACK_DISABLE 0x00000000U /*!< SMARTCARD NACK transmission disabled */ 422 #define SMARTCARD_NACK_ENABLE USART_CR3_NACK /*!< SMARTCARD NACK transmission enabled */ 423 /** 424 * @} 425 */ 426 427 /** @defgroup SMARTCARD_Timeout_Enable SMARTCARD Timeout Enable 428 * @{ 429 */ 430 #define SMARTCARD_TIMEOUT_DISABLE 0x00000000U /*!< SMARTCARD receiver timeout disabled */ 431 #define SMARTCARD_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< SMARTCARD receiver timeout enabled */ 432 /** 433 * @} 434 */ 435 436 /** @defgroup SMARTCARD_Tx_Inv SMARTCARD advanced feature TX pin active level inversion 437 * @{ 438 */ 439 #define SMARTCARD_ADVFEATURE_TXINV_DISABLE 0x00000000U /*!< TX pin active level inversion disable */ 440 #define SMARTCARD_ADVFEATURE_TXINV_ENABLE USART_CR2_TXINV /*!< TX pin active level inversion enable */ 441 /** 442 * @} 443 */ 444 445 /** @defgroup SMARTCARD_Rx_Inv SMARTCARD advanced feature RX pin active level inversion 446 * @{ 447 */ 448 #define SMARTCARD_ADVFEATURE_RXINV_DISABLE 0x00000000U /*!< RX pin active level inversion disable */ 449 #define SMARTCARD_ADVFEATURE_RXINV_ENABLE USART_CR2_RXINV /*!< RX pin active level inversion enable */ 450 /** 451 * @} 452 */ 453 454 /** @defgroup SMARTCARD_Data_Inv SMARTCARD advanced feature Binary Data inversion 455 * @{ 456 */ 457 #define SMARTCARD_ADVFEATURE_DATAINV_DISABLE 0x00000000U /*!< Binary data inversion disable */ 458 #define SMARTCARD_ADVFEATURE_DATAINV_ENABLE USART_CR2_DATAINV /*!< Binary data inversion enable */ 459 /** 460 * @} 461 */ 462 463 /** @defgroup SMARTCARD_Rx_Tx_Swap SMARTCARD advanced feature RX TX pins swap 464 * @{ 465 */ 466 #define SMARTCARD_ADVFEATURE_SWAP_DISABLE 0x00000000U /*!< TX/RX pins swap disable */ 467 #define SMARTCARD_ADVFEATURE_SWAP_ENABLE USART_CR2_SWAP /*!< TX/RX pins swap enable */ 468 /** 469 * @} 470 */ 471 472 /** @defgroup SMARTCARD_Overrun_Disable SMARTCARD advanced feature Overrun Disable 473 * @{ 474 */ 475 #define SMARTCARD_ADVFEATURE_OVERRUN_ENABLE 0x00000000U /*!< RX overrun enable */ 476 #define SMARTCARD_ADVFEATURE_OVERRUN_DISABLE USART_CR3_OVRDIS /*!< RX overrun disable */ 477 /** 478 * @} 479 */ 480 481 /** @defgroup SMARTCARD_DMA_Disable_on_Rx_Error SMARTCARD advanced feature DMA Disable on Rx Error 482 * @{ 483 */ 484 #define SMARTCARD_ADVFEATURE_DMA_ENABLEONRXERROR 0x00000000U /*!< DMA enable on Reception Error */ 485 #define SMARTCARD_ADVFEATURE_DMA_DISABLEONRXERROR USART_CR3_DDRE /*!< DMA disable on Reception Error */ 486 /** 487 * @} 488 */ 489 490 /** @defgroup SMARTCARD_MSB_First SMARTCARD advanced feature MSB first 491 * @{ 492 */ 493 #define SMARTCARD_ADVFEATURE_MSBFIRST_DISABLE 0x00000000U /*!< Most significant bit sent/received first disable */ 494 #define SMARTCARD_ADVFEATURE_MSBFIRST_ENABLE USART_CR2_MSBFIRST /*!< Most significant bit sent/received first enable */ 495 /** 496 * @} 497 */ 498 499 /** @defgroup SMARTCARD_Request_Parameters SMARTCARD Request Parameters 500 * @{ 501 */ 502 #define SMARTCARD_RXDATA_FLUSH_REQUEST USART_RQR_RXFRQ /*!< Receive data flush request */ 503 #define SMARTCARD_TXDATA_FLUSH_REQUEST USART_RQR_TXFRQ /*!< Transmit data flush request */ 504 /** 505 * @} 506 */ 507 508 /** @defgroup SMARTCARD_Interruption_Mask SMARTCARD interruptions flags mask 509 * @{ 510 */ 511 #define SMARTCARD_IT_MASK 0x001FU /*!< SMARTCARD interruptions flags mask */ 512 #define SMARTCARD_CR_MASK 0x00E0U /*!< SMARTCARD control register mask */ 513 #define SMARTCARD_CR_POS 5U /*!< SMARTCARD control register position */ 514 #define SMARTCARD_ISR_MASK 0x1F00U /*!< SMARTCARD ISR register mask */ 515 #define SMARTCARD_ISR_POS 8U /*!< SMARTCARD ISR register position */ 516 /** 517 * @} 518 */ 519 520 /** 521 * @} 522 */ 523 524 /* Exported macros -----------------------------------------------------------*/ 525 /** @defgroup SMARTCARD_Exported_Macros SMARTCARD Exported Macros 526 * @{ 527 */ 528 529 /** @brief Reset SMARTCARD handle states. 530 * @param __HANDLE__ SMARTCARD handle. 531 * @retval None 532 */ 533 #if USE_HAL_SMARTCARD_REGISTER_CALLBACKS == 1 534 #define __HAL_SMARTCARD_RESET_HANDLE_STATE(__HANDLE__) do{ \ 535 (__HANDLE__)->gState = HAL_SMARTCARD_STATE_RESET; \ 536 (__HANDLE__)->RxState = HAL_SMARTCARD_STATE_RESET; \ 537 (__HANDLE__)->MspInitCallback = NULL; \ 538 (__HANDLE__)->MspDeInitCallback = NULL; \ 539 } while(0U) 540 #else 541 #define __HAL_SMARTCARD_RESET_HANDLE_STATE(__HANDLE__) do{ \ 542 (__HANDLE__)->gState = HAL_SMARTCARD_STATE_RESET; \ 543 (__HANDLE__)->RxState = HAL_SMARTCARD_STATE_RESET; \ 544 } while(0U) 545 #endif /*USE_HAL_SMARTCARD_REGISTER_CALLBACKS */ 546 547 /** @brief Flush the Smartcard Data registers. 548 * @param __HANDLE__ specifies the SMARTCARD Handle. 549 * @retval None 550 */ 551 #define __HAL_SMARTCARD_FLUSH_DRREGISTER(__HANDLE__) \ 552 do{ \ 553 SET_BIT((__HANDLE__)->Instance->RQR, SMARTCARD_RXDATA_FLUSH_REQUEST); \ 554 SET_BIT((__HANDLE__)->Instance->RQR, SMARTCARD_TXDATA_FLUSH_REQUEST); \ 555 } while(0U) 556 557 /** @brief Clear the specified SMARTCARD pending flag. 558 * @param __HANDLE__ specifies the SMARTCARD Handle. 559 * @param __FLAG__ specifies the flag to check. 560 * This parameter can be any combination of the following values: 561 * @arg @ref SMARTCARD_CLEAR_PEF Parity error clear flag 562 * @arg @ref SMARTCARD_CLEAR_FEF Framing error clear flag 563 * @arg @ref SMARTCARD_CLEAR_NEF Noise detected clear flag 564 * @arg @ref SMARTCARD_CLEAR_OREF OverRun error clear flag 565 * @arg @ref SMARTCARD_CLEAR_IDLEF Idle line detected clear flag 566 * @arg @ref SMARTCARD_CLEAR_TCF Transmission complete clear flag 567 * @arg @ref SMARTCARD_CLEAR_TCBGTF Transmission complete before guard time clear flag 568 * @arg @ref SMARTCARD_CLEAR_RTOF Receiver timeout clear flag 569 * @arg @ref SMARTCARD_CLEAR_EOBF End of block clear flag 570 * @retval None 571 */ 572 #define __HAL_SMARTCARD_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__)) 573 574 /** @brief Clear the SMARTCARD PE pending flag. 575 * @param __HANDLE__ specifies the SMARTCARD Handle. 576 * @retval None 577 */ 578 #define __HAL_SMARTCARD_CLEAR_PEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_PEF) 579 580 /** @brief Clear the SMARTCARD FE pending flag. 581 * @param __HANDLE__ specifies the SMARTCARD Handle. 582 * @retval None 583 */ 584 #define __HAL_SMARTCARD_CLEAR_FEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_FEF) 585 586 /** @brief Clear the SMARTCARD NE pending flag. 587 * @param __HANDLE__ specifies the SMARTCARD Handle. 588 * @retval None 589 */ 590 #define __HAL_SMARTCARD_CLEAR_NEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_NEF) 591 592 /** @brief Clear the SMARTCARD ORE pending flag. 593 * @param __HANDLE__ specifies the SMARTCARD Handle. 594 * @retval None 595 */ 596 #define __HAL_SMARTCARD_CLEAR_OREFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_OREF) 597 598 /** @brief Clear the SMARTCARD IDLE pending flag. 599 * @param __HANDLE__ specifies the SMARTCARD Handle. 600 * @retval None 601 */ 602 #define __HAL_SMARTCARD_CLEAR_IDLEFLAG(__HANDLE__) __HAL_SMARTCARD_CLEAR_FLAG((__HANDLE__), SMARTCARD_CLEAR_IDLEF) 603 604 /** @brief Check whether the specified Smartcard flag is set or not. 605 * @param __HANDLE__ specifies the SMARTCARD Handle. 606 * @param __FLAG__ specifies the flag to check. 607 * This parameter can be one of the following values: 608 * @arg @ref SMARTCARD_FLAG_TCBGT Transmission complete before guard time flag (when flag available) 609 * @arg @ref SMARTCARD_FLAG_REACK Receive enable acknowledge flag 610 * @arg @ref SMARTCARD_FLAG_TEACK Transmit enable acknowledge flag 611 * @arg @ref SMARTCARD_FLAG_BUSY Busy flag 612 * @arg @ref SMARTCARD_FLAG_EOBF End of block flag 613 * @arg @ref SMARTCARD_FLAG_RTOF Receiver timeout flag 614 * @arg @ref SMARTCARD_FLAG_TXE Transmit data register empty flag 615 * @arg @ref SMARTCARD_FLAG_TC Transmission complete flag 616 * @arg @ref SMARTCARD_FLAG_RXNE Receive data register not empty flag 617 * @arg @ref SMARTCARD_FLAG_IDLE Idle line detection flag 618 * @arg @ref SMARTCARD_FLAG_ORE Overrun error flag 619 * @arg @ref SMARTCARD_FLAG_NE Noise error flag 620 * @arg @ref SMARTCARD_FLAG_FE Framing error flag 621 * @arg @ref SMARTCARD_FLAG_PE Parity error flag 622 * @retval The new state of __FLAG__ (TRUE or FALSE). 623 */ 624 #define __HAL_SMARTCARD_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->ISR & (__FLAG__)) == (__FLAG__)) 625 626 /** @brief Enable the specified SmartCard interrupt. 627 * @param __HANDLE__ specifies the SMARTCARD Handle. 628 * @param __INTERRUPT__ specifies the SMARTCARD interrupt to enable. 629 * This parameter can be one of the following values: 630 * @arg @ref SMARTCARD_IT_EOB End of block interrupt 631 * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt 632 * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt 633 * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt 634 * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before 635 * guard time interrupt (when interruption available) 636 * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt 637 * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt 638 * @arg @ref SMARTCARD_IT_PE Parity error interrupt 639 * @arg @ref SMARTCARD_IT_ERR Error interrupt(frame error, noise error, overrun error) 640 * @retval None 641 */ 642 #define __HAL_SMARTCARD_ENABLE_IT(__HANDLE__, __INTERRUPT__) (((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\ 643 SMARTCARD_CR_POS) == 1U)?\ 644 ((__HANDLE__)->Instance->CR1 |= (1UL <<\ 645 ((__INTERRUPT__) & SMARTCARD_IT_MASK))):\ 646 ((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\ 647 SMARTCARD_CR_POS) == 2U)?\ 648 ((__HANDLE__)->Instance->CR2 |= (1UL <<\ 649 ((__INTERRUPT__) & SMARTCARD_IT_MASK))): \ 650 ((__HANDLE__)->Instance->CR3 |= (1UL <<\ 651 ((__INTERRUPT__) & SMARTCARD_IT_MASK)))) 652 653 /** @brief Disable the specified SmartCard interrupt. 654 * @param __HANDLE__ specifies the SMARTCARD Handle. 655 * @param __INTERRUPT__ specifies the SMARTCARD interrupt to disable. 656 * This parameter can be one of the following values: 657 * @arg @ref SMARTCARD_IT_EOB End of block interrupt 658 * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt 659 * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt 660 * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt 661 * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before guard 662 * time interrupt (when interruption available) 663 * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt 664 * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt 665 * @arg @ref SMARTCARD_IT_PE Parity error interrupt 666 * @arg @ref SMARTCARD_IT_ERR Error interrupt(frame error, noise error, overrun error) 667 * @retval None 668 */ 669 #define __HAL_SMARTCARD_DISABLE_IT(__HANDLE__, __INTERRUPT__) (((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\ 670 SMARTCARD_CR_POS) == 1U)?\ 671 ((__HANDLE__)->Instance->CR1 &= ~ (1U <<\ 672 ((__INTERRUPT__) & SMARTCARD_IT_MASK))): \ 673 ((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\ 674 SMARTCARD_CR_POS) == 2U)?\ 675 ((__HANDLE__)->Instance->CR2 &= ~ (1U <<\ 676 ((__INTERRUPT__) & SMARTCARD_IT_MASK))): \ 677 ((__HANDLE__)->Instance->CR3 &= ~ (1U <<\ 678 ((__INTERRUPT__) & SMARTCARD_IT_MASK)))) 679 680 /** @brief Check whether the specified SmartCard interrupt has occurred or not. 681 * @param __HANDLE__ specifies the SMARTCARD Handle. 682 * @param __INTERRUPT__ specifies the SMARTCARD interrupt to check. 683 * This parameter can be one of the following values: 684 * @arg @ref SMARTCARD_IT_EOB End of block interrupt 685 * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt 686 * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt 687 * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt 688 * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before guard time 689 * interrupt (when interruption available) 690 * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt 691 * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt 692 * @arg @ref SMARTCARD_IT_PE Parity error interrupt 693 * @arg @ref SMARTCARD_IT_ERR Error interrupt(frame error, noise error, overrun error) 694 * @retval The new state of __INTERRUPT__ (SET or RESET). 695 */ 696 #define __HAL_SMARTCARD_GET_IT(__HANDLE__, __INTERRUPT__) (\ 697 (((__HANDLE__)->Instance->ISR & (0x01UL << (((__INTERRUPT__)\ 698 & SMARTCARD_ISR_MASK)>> SMARTCARD_ISR_POS)))!= 0U)\ 699 ? SET : RESET) 700 701 /** @brief Check whether the specified SmartCard interrupt source is enabled or not. 702 * @param __HANDLE__ specifies the SMARTCARD Handle. 703 * @param __INTERRUPT__ specifies the SMARTCARD interrupt source to check. 704 * This parameter can be one of the following values: 705 * @arg @ref SMARTCARD_IT_EOB End of block interrupt 706 * @arg @ref SMARTCARD_IT_RTO Receive timeout interrupt 707 * @arg @ref SMARTCARD_IT_TXE Transmit data register empty interrupt 708 * @arg @ref SMARTCARD_IT_TC Transmission complete interrupt 709 * @arg @ref SMARTCARD_IT_TCBGT Transmission complete before guard time 710 * interrupt (when interruption available) 711 * @arg @ref SMARTCARD_IT_RXNE Receive data register not empty interrupt 712 * @arg @ref SMARTCARD_IT_IDLE Idle line detection interrupt 713 * @arg @ref SMARTCARD_IT_PE Parity error interrupt 714 * @arg @ref SMARTCARD_IT_ERR Error interrupt(frame error, noise error, overrun error) 715 * @retval The new state of __INTERRUPT__ (SET or RESET). 716 */ 717 #define __HAL_SMARTCARD_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\ 718 SMARTCARD_CR_POS) == 0x01U)?\ 719 (__HANDLE__)->Instance->CR1 : \ 720 (((((__INTERRUPT__) & SMARTCARD_CR_MASK) >>\ 721 SMARTCARD_CR_POS) == 0x02U)?\ 722 (__HANDLE__)->Instance->CR2 : \ 723 (__HANDLE__)->Instance->CR3)) &\ 724 (0x01UL << (((uint16_t)(__INTERRUPT__))\ 725 & SMARTCARD_IT_MASK))) != 0U)\ 726 ? SET : RESET) 727 728 /** @brief Clear the specified SMARTCARD ISR flag, in setting the proper ICR register flag. 729 * @param __HANDLE__ specifies the SMARTCARD Handle. 730 * @param __IT_CLEAR__ specifies the interrupt clear register flag that needs to be set 731 * to clear the corresponding interrupt. 732 * This parameter can be one of the following values: 733 * @arg @ref SMARTCARD_CLEAR_PEF Parity error clear flag 734 * @arg @ref SMARTCARD_CLEAR_FEF Framing error clear flag 735 * @arg @ref SMARTCARD_CLEAR_NEF Noise detected clear flag 736 * @arg @ref SMARTCARD_CLEAR_OREF OverRun error clear flag 737 * @arg @ref SMARTCARD_CLEAR_IDLEF Idle line detection clear flag 738 * @arg @ref SMARTCARD_CLEAR_TCF Transmission complete clear flag 739 * @arg @ref SMARTCARD_CLEAR_TCBGTF Transmission complete before guard time clear flag (when flag available) 740 * @arg @ref SMARTCARD_CLEAR_RTOF Receiver timeout clear flag 741 * @arg @ref SMARTCARD_CLEAR_EOBF End of block clear flag 742 * @retval None 743 */ 744 #define __HAL_SMARTCARD_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR |= (uint32_t)(__IT_CLEAR__)) 745 746 /** @brief Set a specific SMARTCARD request flag. 747 * @param __HANDLE__ specifies the SMARTCARD Handle. 748 * @param __REQ__ specifies the request flag to set 749 * This parameter can be one of the following values: 750 * @arg @ref SMARTCARD_RXDATA_FLUSH_REQUEST Receive data flush Request 751 * @arg @ref SMARTCARD_TXDATA_FLUSH_REQUEST Transmit data flush Request 752 * @retval None 753 */ 754 #define __HAL_SMARTCARD_SEND_REQ(__HANDLE__, __REQ__) ((__HANDLE__)->Instance->RQR |= (uint16_t)(__REQ__)) 755 756 /** @brief Enable the SMARTCARD one bit sample method. 757 * @param __HANDLE__ specifies the SMARTCARD Handle. 758 * @retval None 759 */ 760 #define __HAL_SMARTCARD_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT) 761 762 /** @brief Disable the SMARTCARD one bit sample method. 763 * @param __HANDLE__ specifies the SMARTCARD Handle. 764 * @retval None 765 */ 766 #define __HAL_SMARTCARD_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3\ 767 &= (uint32_t)~((uint32_t)USART_CR3_ONEBIT)) 768 769 /** @brief Enable the USART associated to the SMARTCARD Handle. 770 * @param __HANDLE__ specifies the SMARTCARD Handle. 771 * @retval None 772 */ 773 #define __HAL_SMARTCARD_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE) 774 775 /** @brief Disable the USART associated to the SMARTCARD Handle 776 * @param __HANDLE__ specifies the SMARTCARD Handle. 777 * @retval None 778 */ 779 #define __HAL_SMARTCARD_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE) 780 781 /** 782 * @} 783 */ 784 785 /* Private macros -------------------------------------------------------------*/ 786 /** @defgroup SMARTCARD_Private_Macros SMARTCARD Private Macros 787 * @{ 788 */ 789 790 /** @brief Report the SMARTCARD clock source. 791 * @param __HANDLE__ specifies the SMARTCARD Handle. 792 * @param __CLOCKSOURCE__ output variable. 793 * @retval the SMARTCARD clocking source, written in __CLOCKSOURCE__. 794 */ 795 #define SMARTCARD_GETCLOCKSOURCE(__HANDLE__, __CLOCKSOURCE__) \ 796 do { \ 797 if((__HANDLE__)->Instance == USART1) \ 798 { \ 799 switch(__HAL_RCC_GET_USART1_SOURCE()) \ 800 { \ 801 case RCC_USART1CLKSOURCE_PCLK2: \ 802 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK2; \ 803 break; \ 804 case RCC_USART1CLKSOURCE_HSI: \ 805 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \ 806 break; \ 807 case RCC_USART1CLKSOURCE_SYSCLK: \ 808 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \ 809 break; \ 810 case RCC_USART1CLKSOURCE_LSE: \ 811 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \ 812 break; \ 813 default: \ 814 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \ 815 break; \ 816 } \ 817 } \ 818 else if((__HANDLE__)->Instance == USART2) \ 819 { \ 820 switch(__HAL_RCC_GET_USART2_SOURCE()) \ 821 { \ 822 case RCC_USART2CLKSOURCE_PCLK1: \ 823 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \ 824 break; \ 825 case RCC_USART2CLKSOURCE_HSI: \ 826 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \ 827 break; \ 828 case RCC_USART2CLKSOURCE_SYSCLK: \ 829 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \ 830 break; \ 831 case RCC_USART2CLKSOURCE_LSE: \ 832 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \ 833 break; \ 834 default: \ 835 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \ 836 break; \ 837 } \ 838 } \ 839 else if((__HANDLE__)->Instance == USART3) \ 840 { \ 841 switch(__HAL_RCC_GET_USART3_SOURCE()) \ 842 { \ 843 case RCC_USART3CLKSOURCE_PCLK1: \ 844 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \ 845 break; \ 846 case RCC_USART3CLKSOURCE_HSI: \ 847 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \ 848 break; \ 849 case RCC_USART3CLKSOURCE_SYSCLK: \ 850 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \ 851 break; \ 852 case RCC_USART3CLKSOURCE_LSE: \ 853 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \ 854 break; \ 855 default: \ 856 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \ 857 break; \ 858 } \ 859 } \ 860 else if((__HANDLE__)->Instance == USART6) \ 861 { \ 862 switch(__HAL_RCC_GET_USART6_SOURCE()) \ 863 { \ 864 case RCC_USART6CLKSOURCE_PCLK2: \ 865 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK2; \ 866 break; \ 867 case RCC_USART6CLKSOURCE_HSI: \ 868 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \ 869 break; \ 870 case RCC_USART6CLKSOURCE_SYSCLK: \ 871 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \ 872 break; \ 873 case RCC_USART6CLKSOURCE_LSE: \ 874 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \ 875 break; \ 876 default: \ 877 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \ 878 break; \ 879 } \ 880 } \ 881 else \ 882 { \ 883 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \ 884 } \ 885 } while(0U) 886 887 /** @brief Check the Baud rate range. 888 * @note The maximum Baud Rate is derived from the maximum clock on F7 (216 MHz) 889 * divided by the oversampling used on the SMARTCARD (i.e. 16). 890 * @param __BAUDRATE__ Baud rate set by the configuration function. 891 * @retval Test result (TRUE or FALSE) 892 */ 893 #define IS_SMARTCARD_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) < 13500001U) 894 895 /** @brief Check the block length range. 896 * @note The maximum SMARTCARD block length is 0xFF. 897 * @param __LENGTH__ block length. 898 * @retval Test result (TRUE or FALSE) 899 */ 900 #define IS_SMARTCARD_BLOCKLENGTH(__LENGTH__) ((__LENGTH__) <= 0xFFU) 901 902 /** @brief Check the receiver timeout value. 903 * @note The maximum SMARTCARD receiver timeout value is 0xFFFFFF. 904 * @param __TIMEOUTVALUE__ receiver timeout value. 905 * @retval Test result (TRUE or FALSE) 906 */ 907 #define IS_SMARTCARD_TIMEOUT_VALUE(__TIMEOUTVALUE__) ((__TIMEOUTVALUE__) <= 0xFFFFFFU) 908 909 /** @brief Check the SMARTCARD autoretry counter value. 910 * @note The maximum number of retransmissions is 0x7. 911 * @param __COUNT__ number of retransmissions. 912 * @retval Test result (TRUE or FALSE) 913 */ 914 #define IS_SMARTCARD_AUTORETRY_COUNT(__COUNT__) ((__COUNT__) <= 0x7U) 915 916 /** @brief Ensure that SMARTCARD frame length is valid. 917 * @param __LENGTH__ SMARTCARD frame length. 918 * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid) 919 */ 920 #define IS_SMARTCARD_WORD_LENGTH(__LENGTH__) ((__LENGTH__) == SMARTCARD_WORDLENGTH_9B) 921 922 /** @brief Ensure that SMARTCARD frame number of stop bits is valid. 923 * @param __STOPBITS__ SMARTCARD frame number of stop bits. 924 * @retval SET (__STOPBITS__ is valid) or RESET (__STOPBITS__ is invalid) 925 */ 926 #define IS_SMARTCARD_STOPBITS(__STOPBITS__) (((__STOPBITS__) == SMARTCARD_STOPBITS_0_5) ||\ 927 ((__STOPBITS__) == SMARTCARD_STOPBITS_1_5)) 928 929 /** @brief Ensure that SMARTCARD frame parity is valid. 930 * @param __PARITY__ SMARTCARD frame parity. 931 * @retval SET (__PARITY__ is valid) or RESET (__PARITY__ is invalid) 932 */ 933 #define IS_SMARTCARD_PARITY(__PARITY__) (((__PARITY__) == SMARTCARD_PARITY_EVEN) || \ 934 ((__PARITY__) == SMARTCARD_PARITY_ODD)) 935 936 /** @brief Ensure that SMARTCARD communication mode is valid. 937 * @param __MODE__ SMARTCARD communication mode. 938 * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid) 939 */ 940 #define IS_SMARTCARD_MODE(__MODE__) ((((__MODE__) & 0xFFF3U) == 0x00U) && ((__MODE__) != 0x00U)) 941 942 /** @brief Ensure that SMARTCARD frame polarity is valid. 943 * @param __CPOL__ SMARTCARD frame polarity. 944 * @retval SET (__CPOL__ is valid) or RESET (__CPOL__ is invalid) 945 */ 946 #define IS_SMARTCARD_POLARITY(__CPOL__) (((__CPOL__) == SMARTCARD_POLARITY_LOW)\ 947 || ((__CPOL__) == SMARTCARD_POLARITY_HIGH)) 948 949 /** @brief Ensure that SMARTCARD frame phase is valid. 950 * @param __CPHA__ SMARTCARD frame phase. 951 * @retval SET (__CPHA__ is valid) or RESET (__CPHA__ is invalid) 952 */ 953 #define IS_SMARTCARD_PHASE(__CPHA__) (((__CPHA__) == SMARTCARD_PHASE_1EDGE) || ((__CPHA__) == SMARTCARD_PHASE_2EDGE)) 954 955 /** @brief Ensure that SMARTCARD frame last bit clock pulse setting is valid. 956 * @param __LASTBIT__ SMARTCARD frame last bit clock pulse setting. 957 * @retval SET (__LASTBIT__ is valid) or RESET (__LASTBIT__ is invalid) 958 */ 959 #define IS_SMARTCARD_LASTBIT(__LASTBIT__) (((__LASTBIT__) == SMARTCARD_LASTBIT_DISABLE) || \ 960 ((__LASTBIT__) == SMARTCARD_LASTBIT_ENABLE)) 961 962 /** @brief Ensure that SMARTCARD frame sampling is valid. 963 * @param __ONEBIT__ SMARTCARD frame sampling. 964 * @retval SET (__ONEBIT__ is valid) or RESET (__ONEBIT__ is invalid) 965 */ 966 #define IS_SMARTCARD_ONE_BIT_SAMPLE(__ONEBIT__) (((__ONEBIT__) == SMARTCARD_ONE_BIT_SAMPLE_DISABLE) || \ 967 ((__ONEBIT__) == SMARTCARD_ONE_BIT_SAMPLE_ENABLE)) 968 969 /** @brief Ensure that SMARTCARD NACK transmission setting is valid. 970 * @param __NACK__ SMARTCARD NACK transmission setting. 971 * @retval SET (__NACK__ is valid) or RESET (__NACK__ is invalid) 972 */ 973 #define IS_SMARTCARD_NACK(__NACK__) (((__NACK__) == SMARTCARD_NACK_ENABLE) || \ 974 ((__NACK__) == SMARTCARD_NACK_DISABLE)) 975 976 /** @brief Ensure that SMARTCARD receiver timeout setting is valid. 977 * @param __TIMEOUT__ SMARTCARD receiver timeout setting. 978 * @retval SET (__TIMEOUT__ is valid) or RESET (__TIMEOUT__ is invalid) 979 */ 980 #define IS_SMARTCARD_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == SMARTCARD_TIMEOUT_DISABLE) || \ 981 ((__TIMEOUT__) == SMARTCARD_TIMEOUT_ENABLE)) 982 983 /** @brief Ensure that SMARTCARD advanced features initialization is valid. 984 * @param __INIT__ SMARTCARD advanced features initialization. 985 * @retval SET (__INIT__ is valid) or RESET (__INIT__ is invalid) 986 */ 987 #define IS_SMARTCARD_ADVFEATURE_INIT(__INIT__) ((__INIT__) <= (SMARTCARD_ADVFEATURE_NO_INIT | \ 988 SMARTCARD_ADVFEATURE_TXINVERT_INIT | \ 989 SMARTCARD_ADVFEATURE_RXINVERT_INIT | \ 990 SMARTCARD_ADVFEATURE_DATAINVERT_INIT | \ 991 SMARTCARD_ADVFEATURE_SWAP_INIT | \ 992 SMARTCARD_ADVFEATURE_RXOVERRUNDISABLE_INIT | \ 993 SMARTCARD_ADVFEATURE_DMADISABLEONERROR_INIT | \ 994 SMARTCARD_ADVFEATURE_MSBFIRST_INIT)) 995 996 /** @brief Ensure that SMARTCARD frame TX inversion setting is valid. 997 * @param __TXINV__ SMARTCARD frame TX inversion setting. 998 * @retval SET (__TXINV__ is valid) or RESET (__TXINV__ is invalid) 999 */ 1000 #define IS_SMARTCARD_ADVFEATURE_TXINV(__TXINV__) (((__TXINV__) == SMARTCARD_ADVFEATURE_TXINV_DISABLE) || \ 1001 ((__TXINV__) == SMARTCARD_ADVFEATURE_TXINV_ENABLE)) 1002 1003 /** @brief Ensure that SMARTCARD frame RX inversion setting is valid. 1004 * @param __RXINV__ SMARTCARD frame RX inversion setting. 1005 * @retval SET (__RXINV__ is valid) or RESET (__RXINV__ is invalid) 1006 */ 1007 #define IS_SMARTCARD_ADVFEATURE_RXINV(__RXINV__) (((__RXINV__) == SMARTCARD_ADVFEATURE_RXINV_DISABLE) || \ 1008 ((__RXINV__) == SMARTCARD_ADVFEATURE_RXINV_ENABLE)) 1009 1010 /** @brief Ensure that SMARTCARD frame data inversion setting is valid. 1011 * @param __DATAINV__ SMARTCARD frame data inversion setting. 1012 * @retval SET (__DATAINV__ is valid) or RESET (__DATAINV__ is invalid) 1013 */ 1014 #define IS_SMARTCARD_ADVFEATURE_DATAINV(__DATAINV__) (((__DATAINV__) == SMARTCARD_ADVFEATURE_DATAINV_DISABLE) || \ 1015 ((__DATAINV__) == SMARTCARD_ADVFEATURE_DATAINV_ENABLE)) 1016 1017 /** @brief Ensure that SMARTCARD frame RX/TX pins swap setting is valid. 1018 * @param __SWAP__ SMARTCARD frame RX/TX pins swap setting. 1019 * @retval SET (__SWAP__ is valid) or RESET (__SWAP__ is invalid) 1020 */ 1021 #define IS_SMARTCARD_ADVFEATURE_SWAP(__SWAP__) (((__SWAP__) == SMARTCARD_ADVFEATURE_SWAP_DISABLE) || \ 1022 ((__SWAP__) == SMARTCARD_ADVFEATURE_SWAP_ENABLE)) 1023 1024 /** @brief Ensure that SMARTCARD frame overrun setting is valid. 1025 * @param __OVERRUN__ SMARTCARD frame overrun setting. 1026 * @retval SET (__OVERRUN__ is valid) or RESET (__OVERRUN__ is invalid) 1027 */ 1028 #define IS_SMARTCARD_OVERRUN(__OVERRUN__) (((__OVERRUN__) == SMARTCARD_ADVFEATURE_OVERRUN_ENABLE) || \ 1029 ((__OVERRUN__) == SMARTCARD_ADVFEATURE_OVERRUN_DISABLE)) 1030 1031 /** @brief Ensure that SMARTCARD DMA enabling or disabling on error setting is valid. 1032 * @param __DMA__ SMARTCARD DMA enabling or disabling on error setting. 1033 * @retval SET (__DMA__ is valid) or RESET (__DMA__ is invalid) 1034 */ 1035 #define IS_SMARTCARD_ADVFEATURE_DMAONRXERROR(__DMA__) (((__DMA__) == SMARTCARD_ADVFEATURE_DMA_ENABLEONRXERROR) || \ 1036 ((__DMA__) == SMARTCARD_ADVFEATURE_DMA_DISABLEONRXERROR)) 1037 1038 /** @brief Ensure that SMARTCARD frame MSB first setting is valid. 1039 * @param __MSBFIRST__ SMARTCARD frame MSB first setting. 1040 * @retval SET (__MSBFIRST__ is valid) or RESET (__MSBFIRST__ is invalid) 1041 */ 1042 #define IS_SMARTCARD_ADVFEATURE_MSBFIRST(__MSBFIRST__) (((__MSBFIRST__) == SMARTCARD_ADVFEATURE_MSBFIRST_DISABLE) || \ 1043 ((__MSBFIRST__) == SMARTCARD_ADVFEATURE_MSBFIRST_ENABLE)) 1044 1045 /** @brief Ensure that SMARTCARD request parameter is valid. 1046 * @param __PARAM__ SMARTCARD request parameter. 1047 * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid) 1048 */ 1049 #define IS_SMARTCARD_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == SMARTCARD_RXDATA_FLUSH_REQUEST) || \ 1050 ((__PARAM__) == SMARTCARD_TXDATA_FLUSH_REQUEST)) 1051 1052 /** 1053 * @} 1054 */ 1055 1056 /* Include SMARTCARD HAL Extended module */ 1057 #include "stm32f7xx_hal_smartcard_ex.h" 1058 1059 /* Exported functions --------------------------------------------------------*/ 1060 /** @addtogroup SMARTCARD_Exported_Functions 1061 * @{ 1062 */ 1063 1064 /* Initialization and de-initialization functions ****************************/ 1065 /** @addtogroup SMARTCARD_Exported_Functions_Group1 1066 * @{ 1067 */ 1068 1069 HAL_StatusTypeDef HAL_SMARTCARD_Init(SMARTCARD_HandleTypeDef *hsmartcard); 1070 HAL_StatusTypeDef HAL_SMARTCARD_DeInit(SMARTCARD_HandleTypeDef *hsmartcard); 1071 void HAL_SMARTCARD_MspInit(SMARTCARD_HandleTypeDef *hsmartcard); 1072 void HAL_SMARTCARD_MspDeInit(SMARTCARD_HandleTypeDef *hsmartcard); 1073 1074 #if (USE_HAL_SMARTCARD_REGISTER_CALLBACKS == 1) 1075 /* Callbacks Register/UnRegister functions ***********************************/ 1076 HAL_StatusTypeDef HAL_SMARTCARD_RegisterCallback(SMARTCARD_HandleTypeDef *hsmartcard, 1077 HAL_SMARTCARD_CallbackIDTypeDef CallbackID, 1078 pSMARTCARD_CallbackTypeDef pCallback); 1079 HAL_StatusTypeDef HAL_SMARTCARD_UnRegisterCallback(SMARTCARD_HandleTypeDef *hsmartcard, 1080 HAL_SMARTCARD_CallbackIDTypeDef CallbackID); 1081 #endif /* USE_HAL_SMARTCARD_REGISTER_CALLBACKS */ 1082 1083 /** 1084 * @} 1085 */ 1086 1087 /* IO operation functions *****************************************************/ 1088 /** @addtogroup SMARTCARD_Exported_Functions_Group2 1089 * @{ 1090 */ 1091 1092 HAL_StatusTypeDef HAL_SMARTCARD_Transmit(SMARTCARD_HandleTypeDef *hsmartcard, const uint8_t *pData, uint16_t Size, 1093 uint32_t Timeout); 1094 HAL_StatusTypeDef HAL_SMARTCARD_Receive(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t *pData, uint16_t Size, 1095 uint32_t Timeout); 1096 HAL_StatusTypeDef HAL_SMARTCARD_Transmit_IT(SMARTCARD_HandleTypeDef *hsmartcard, const uint8_t *pData, uint16_t Size); 1097 HAL_StatusTypeDef HAL_SMARTCARD_Receive_IT(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t *pData, uint16_t Size); 1098 HAL_StatusTypeDef HAL_SMARTCARD_Transmit_DMA(SMARTCARD_HandleTypeDef *hsmartcard, const uint8_t *pData, uint16_t Size); 1099 HAL_StatusTypeDef HAL_SMARTCARD_Receive_DMA(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t *pData, uint16_t Size); 1100 /* Transfer Abort functions */ 1101 HAL_StatusTypeDef HAL_SMARTCARD_Abort(SMARTCARD_HandleTypeDef *hsmartcard); 1102 HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit(SMARTCARD_HandleTypeDef *hsmartcard); 1103 HAL_StatusTypeDef HAL_SMARTCARD_AbortReceive(SMARTCARD_HandleTypeDef *hsmartcard); 1104 HAL_StatusTypeDef HAL_SMARTCARD_Abort_IT(SMARTCARD_HandleTypeDef *hsmartcard); 1105 HAL_StatusTypeDef HAL_SMARTCARD_AbortTransmit_IT(SMARTCARD_HandleTypeDef *hsmartcard); 1106 HAL_StatusTypeDef HAL_SMARTCARD_AbortReceive_IT(SMARTCARD_HandleTypeDef *hsmartcard); 1107 1108 void HAL_SMARTCARD_IRQHandler(SMARTCARD_HandleTypeDef *hsmartcard); 1109 void HAL_SMARTCARD_TxCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard); 1110 void HAL_SMARTCARD_RxCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard); 1111 void HAL_SMARTCARD_ErrorCallback(SMARTCARD_HandleTypeDef *hsmartcard); 1112 void HAL_SMARTCARD_AbortCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard); 1113 void HAL_SMARTCARD_AbortTransmitCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard); 1114 void HAL_SMARTCARD_AbortReceiveCpltCallback(SMARTCARD_HandleTypeDef *hsmartcard); 1115 1116 /** 1117 * @} 1118 */ 1119 1120 /* Peripheral State and Error functions ***************************************/ 1121 /** @addtogroup SMARTCARD_Exported_Functions_Group4 1122 * @{ 1123 */ 1124 1125 HAL_SMARTCARD_StateTypeDef HAL_SMARTCARD_GetState(const SMARTCARD_HandleTypeDef *hsmartcard); 1126 uint32_t HAL_SMARTCARD_GetError(const SMARTCARD_HandleTypeDef *hsmartcard); 1127 1128 /** 1129 * @} 1130 */ 1131 1132 /** 1133 * @} 1134 */ 1135 1136 /** 1137 * @} 1138 */ 1139 1140 /** 1141 * @} 1142 */ 1143 1144 #ifdef __cplusplus 1145 } 1146 #endif 1147 1148 #endif /* STM32F7xx_HAL_SMARTCARD_H */ 1149 1150