1 /** 2 ****************************************************************************** 3 * @file stm32f3xx_hal_smartcard_ex.h 4 * @author MCD Application Team 5 * @brief Header file of SMARTCARD HAL Extended module. 6 ****************************************************************************** 7 * @attention 8 * 9 * Copyright (c) 2016 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 STM32F3xx_HAL_SMARTCARD_EX_H 21 #define STM32F3xx_HAL_SMARTCARD_EX_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32f3xx_hal_def.h" 29 30 /** @addtogroup STM32F3xx_HAL_Driver 31 * @{ 32 */ 33 34 /** @addtogroup SMARTCARDEx 35 * @{ 36 */ 37 38 /* Exported types ------------------------------------------------------------*/ 39 /* Exported constants --------------------------------------------------------*/ 40 41 /** @addtogroup SMARTCARDEx_Exported_Constants SMARTCARD Extended Exported Constants 42 * @{ 43 */ 44 45 /** @defgroup SMARTCARDEx_Transmission_Completion_Indication SMARTCARD Transmission Completion Indication 46 * @{ 47 */ 48 #define SMARTCARD_TC SMARTCARD_IT_TC /*!< SMARTCARD transmission complete (flag raised when guard time has elapsed) */ 49 /** 50 * @} 51 */ 52 53 /** @defgroup SMARTCARDEx_Advanced_Features_Initialization_Type SMARTCARD advanced feature initialization type 54 * @{ 55 */ 56 #define SMARTCARD_ADVFEATURE_NO_INIT 0x00000000U /*!< No advanced feature initialization */ 57 #define SMARTCARD_ADVFEATURE_TXINVERT_INIT 0x00000001U /*!< TX pin active level inversion */ 58 #define SMARTCARD_ADVFEATURE_RXINVERT_INIT 0x00000002U /*!< RX pin active level inversion */ 59 #define SMARTCARD_ADVFEATURE_DATAINVERT_INIT 0x00000004U /*!< Binary data inversion */ 60 #define SMARTCARD_ADVFEATURE_SWAP_INIT 0x00000008U /*!< TX/RX pins swap */ 61 #define SMARTCARD_ADVFEATURE_RXOVERRUNDISABLE_INIT 0x00000010U /*!< RX overrun disable */ 62 #define SMARTCARD_ADVFEATURE_DMADISABLEONERROR_INIT 0x00000020U /*!< DMA disable on Reception Error */ 63 #define SMARTCARD_ADVFEATURE_MSBFIRST_INIT 0x00000080U /*!< Most significant bit sent/received first */ 64 /** 65 * @} 66 */ 67 68 /** @defgroup SMARTCARDEx_Flags SMARTCARD Flags 69 * Elements values convention: 0xXXXX 70 * - 0xXXXX : Flag mask in the ISR register 71 * @{ 72 */ 73 #define SMARTCARD_FLAG_REACK USART_ISR_REACK /*!< SMARTCARD receive enable acknowledge flag */ 74 #define SMARTCARD_FLAG_TEACK USART_ISR_TEACK /*!< SMARTCARD transmit enable acknowledge flag */ 75 #define SMARTCARD_FLAG_BUSY USART_ISR_BUSY /*!< SMARTCARD busy flag */ 76 #define SMARTCARD_FLAG_EOBF USART_ISR_EOBF /*!< SMARTCARD end of block flag */ 77 #define SMARTCARD_FLAG_RTOF USART_ISR_RTOF /*!< SMARTCARD receiver timeout flag */ 78 #define SMARTCARD_FLAG_TXE USART_ISR_TXE /*!< SMARTCARD transmit data register empty */ 79 #define SMARTCARD_FLAG_TC USART_ISR_TC /*!< SMARTCARD transmission complete */ 80 #define SMARTCARD_FLAG_RXNE USART_ISR_RXNE /*!< SMARTCARD read data register not empty */ 81 #define SMARTCARD_FLAG_IDLE USART_ISR_IDLE /*!< SMARTCARD idle line detection */ 82 #define SMARTCARD_FLAG_ORE USART_ISR_ORE /*!< SMARTCARD overrun error */ 83 #define SMARTCARD_FLAG_NE USART_ISR_NE /*!< SMARTCARD noise error */ 84 #define SMARTCARD_FLAG_FE USART_ISR_FE /*!< SMARTCARD frame error */ 85 #define SMARTCARD_FLAG_PE USART_ISR_PE /*!< SMARTCARD parity error */ 86 /** 87 * @} 88 */ 89 90 /** @defgroup SMARTCARDEx_Interrupt_definition SMARTCARD Interrupts Definition 91 * Elements values convention: 000ZZZZZ0XXYYYYYb 92 * - YYYYY : Interrupt source position in the XX register (5 bits) 93 * - XX : Interrupt source register (2 bits) 94 * - 01: CR1 register 95 * - 10: CR2 register 96 * - 11: CR3 register 97 * - ZZZZZ : Flag position in the ISR register(5 bits) 98 * @{ 99 */ 100 #define SMARTCARD_IT_PE 0x0028U /*!< SMARTCARD parity error interruption */ 101 #define SMARTCARD_IT_TXE 0x0727U /*!< SMARTCARD transmit data register empty interruption */ 102 #define SMARTCARD_IT_TC 0x0626U /*!< SMARTCARD transmission complete interruption */ 103 #define SMARTCARD_IT_RXNE 0x0525U /*!< SMARTCARD read data register not empty interruption */ 104 #define SMARTCARD_IT_IDLE 0x0424U /*!< SMARTCARD idle line detection interruption */ 105 106 #define SMARTCARD_IT_ERR 0x0060U /*!< SMARTCARD error interruption */ 107 #define SMARTCARD_IT_ORE 0x0300U /*!< SMARTCARD overrun error interruption */ 108 #define SMARTCARD_IT_NE 0x0200U /*!< SMARTCARD noise error interruption */ 109 #define SMARTCARD_IT_FE 0x0100U /*!< SMARTCARD frame error interruption */ 110 111 #define SMARTCARD_IT_EOB 0x0C3BU /*!< SMARTCARD end of block interruption */ 112 #define SMARTCARD_IT_RTO 0x0B3AU /*!< SMARTCARD receiver timeout interruption */ 113 114 /** 115 * @} 116 */ 117 118 /** @defgroup SMARTCARDEx_IT_CLEAR_Flags SMARTCARD Interruption Clear Flags 119 * @{ 120 */ 121 #define SMARTCARD_CLEAR_PEF USART_ICR_PECF /*!< SMARTCARD parity error clear flag */ 122 #define SMARTCARD_CLEAR_FEF USART_ICR_FECF /*!< SMARTCARD framing error clear flag */ 123 #define SMARTCARD_CLEAR_NEF USART_ICR_NCF /*!< SMARTCARD noise error detected clear flag */ 124 #define SMARTCARD_CLEAR_OREF USART_ICR_ORECF /*!< SMARTCARD overrun error clear flag */ 125 #define SMARTCARD_CLEAR_IDLEF USART_ICR_IDLECF /*!< SMARTCARD idle line detected clear flag */ 126 #define SMARTCARD_CLEAR_TCF USART_ICR_TCCF /*!< SMARTCARD transmission complete clear flag */ 127 #define SMARTCARD_CLEAR_RTOF USART_ICR_RTOCF /*!< SMARTCARD receiver time out clear flag */ 128 #define SMARTCARD_CLEAR_EOBF USART_ICR_EOBCF /*!< SMARTCARD end of block clear flag */ 129 /** 130 * @} 131 */ 132 133 /** 134 * @} 135 */ 136 /* Exported macros -----------------------------------------------------------*/ 137 /* Private macros ------------------------------------------------------------*/ 138 /** @defgroup SMARTCARDEx_Private_Macros SMARTCARD Extended Private Macros 139 * @{ 140 */ 141 142 /** @brief Report the SMARTCARD clock source. 143 * @param __HANDLE__ specifies the SMARTCARD Handle. 144 * @param __CLOCKSOURCE__ output variable. 145 * @retval the SMARTCARD clocking source, written in __CLOCKSOURCE__. 146 */ 147 #if defined(STM32F302xE) || defined(STM32F303xE) || defined(STM32F398xx) || defined(STM32F302xC) \ 148 || defined(STM32F303xC) || defined(STM32F358xx) 149 #define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ 150 do { \ 151 if((__HANDLE__)->Instance == USART1) \ 152 { \ 153 switch(__HAL_RCC_GET_USART1_SOURCE()) \ 154 { \ 155 case RCC_USART1CLKSOURCE_PCLK2: \ 156 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK2; \ 157 break; \ 158 case RCC_USART1CLKSOURCE_HSI: \ 159 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \ 160 break; \ 161 case RCC_USART1CLKSOURCE_SYSCLK: \ 162 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \ 163 break; \ 164 case RCC_USART1CLKSOURCE_LSE: \ 165 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \ 166 break; \ 167 default: \ 168 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;\ 169 break; \ 170 } \ 171 } \ 172 else if((__HANDLE__)->Instance == USART2) \ 173 { \ 174 switch(__HAL_RCC_GET_USART2_SOURCE()) \ 175 { \ 176 case RCC_USART2CLKSOURCE_PCLK1: \ 177 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \ 178 break; \ 179 case RCC_USART2CLKSOURCE_HSI: \ 180 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \ 181 break; \ 182 case RCC_USART2CLKSOURCE_SYSCLK: \ 183 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \ 184 break; \ 185 case RCC_USART2CLKSOURCE_LSE: \ 186 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \ 187 break; \ 188 default: \ 189 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;\ 190 break; \ 191 } \ 192 } \ 193 else if((__HANDLE__)->Instance == USART3) \ 194 { \ 195 switch(__HAL_RCC_GET_USART3_SOURCE()) \ 196 { \ 197 case RCC_USART3CLKSOURCE_PCLK1: \ 198 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \ 199 break; \ 200 case RCC_USART3CLKSOURCE_HSI: \ 201 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \ 202 break; \ 203 case RCC_USART3CLKSOURCE_SYSCLK: \ 204 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \ 205 break; \ 206 case RCC_USART3CLKSOURCE_LSE: \ 207 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \ 208 break; \ 209 default: \ 210 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;\ 211 break; \ 212 } \ 213 } \ 214 else \ 215 { \ 216 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \ 217 } \ 218 } while(0U) 219 #elif defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx) || defined(STM32F301x8) \ 220 || defined(STM32F302x8) || defined(STM32F318xx) 221 #define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ 222 do { \ 223 if((__HANDLE__)->Instance == USART1) \ 224 { \ 225 switch(__HAL_RCC_GET_USART1_SOURCE()) \ 226 { \ 227 case RCC_USART1CLKSOURCE_PCLK1: \ 228 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \ 229 break; \ 230 case RCC_USART1CLKSOURCE_HSI: \ 231 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \ 232 break; \ 233 case RCC_USART1CLKSOURCE_SYSCLK: \ 234 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \ 235 break; \ 236 case RCC_USART1CLKSOURCE_LSE: \ 237 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \ 238 break; \ 239 default: \ 240 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;\ 241 break; \ 242 } \ 243 } \ 244 else if((__HANDLE__)->Instance == USART2) \ 245 { \ 246 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \ 247 } \ 248 else if((__HANDLE__)->Instance == USART3) \ 249 { \ 250 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \ 251 } \ 252 else \ 253 { \ 254 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \ 255 } \ 256 } while(0U) 257 #else 258 #define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ 259 do { \ 260 if((__HANDLE__)->Instance == USART1) \ 261 { \ 262 switch(__HAL_RCC_GET_USART1_SOURCE()) \ 263 { \ 264 case RCC_USART1CLKSOURCE_PCLK2: \ 265 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK2; \ 266 break; \ 267 case RCC_USART1CLKSOURCE_HSI: \ 268 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \ 269 break; \ 270 case RCC_USART1CLKSOURCE_SYSCLK: \ 271 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \ 272 break; \ 273 case RCC_USART1CLKSOURCE_LSE: \ 274 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \ 275 break; \ 276 default: \ 277 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;\ 278 break; \ 279 } \ 280 } \ 281 else if((__HANDLE__)->Instance == USART2) \ 282 { \ 283 switch(__HAL_RCC_GET_USART2_SOURCE()) \ 284 { \ 285 case RCC_USART2CLKSOURCE_PCLK1: \ 286 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \ 287 break; \ 288 case RCC_USART2CLKSOURCE_HSI: \ 289 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \ 290 break; \ 291 case RCC_USART2CLKSOURCE_SYSCLK: \ 292 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \ 293 break; \ 294 case RCC_USART2CLKSOURCE_LSE: \ 295 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \ 296 break; \ 297 default: \ 298 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;\ 299 break; \ 300 } \ 301 } \ 302 else if((__HANDLE__)->Instance == USART3) \ 303 { \ 304 switch(__HAL_RCC_GET_USART3_SOURCE()) \ 305 { \ 306 case RCC_USART3CLKSOURCE_PCLK1: \ 307 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \ 308 break; \ 309 case RCC_USART3CLKSOURCE_HSI: \ 310 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \ 311 break; \ 312 case RCC_USART3CLKSOURCE_SYSCLK: \ 313 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \ 314 break; \ 315 case RCC_USART3CLKSOURCE_LSE: \ 316 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \ 317 break; \ 318 default: \ 319 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED;\ 320 break; \ 321 } \ 322 } \ 323 else \ 324 { \ 325 (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \ 326 } \ 327 } while(0U) 328 #endif /* STM32F302xE || STM32F303xE || STM32F398xx || STM32F302xC || STM32F303xC || STM32F358xx */ 329 330 /** @brief Set the Transmission Completion flag 331 * @param __HANDLE__ specifies the SMARTCARD Handle. 332 * @note If TCBGT (Transmission Complete Before Guard Time) flag is not available or if 333 * AdvancedInit.TxCompletionIndication is not already filled, the latter is forced 334 * to SMARTCARD_TC (transmission completion indication when guard time has elapsed). 335 * @retval None 336 */ 337 #define SMARTCARD_TRANSMISSION_COMPLETION_SETTING(__HANDLE__) \ 338 do { \ 339 (__HANDLE__)->AdvancedInit.TxCompletionIndication = SMARTCARD_TC; \ 340 } while(0U) 341 342 /** @brief Return the transmission completion flag. 343 * @param __HANDLE__ specifies the SMARTCARD Handle. 344 * @note Based on AdvancedInit.TxCompletionIndication setting, return TC or TCBGT flag. 345 * When TCBGT flag (Transmission Complete Before Guard Time) is not available, TC flag is 346 * reported. 347 * @retval Transmission completion flag 348 */ 349 #define SMARTCARD_TRANSMISSION_COMPLETION_FLAG(__HANDLE__) (SMARTCARD_FLAG_TC) 350 351 352 /** @brief Ensure that SMARTCARD frame transmission completion used flag is valid. 353 * @param __TXCOMPLETE__ SMARTCARD frame transmission completion used flag. 354 * @retval SET (__TXCOMPLETE__ is valid) or RESET (__TXCOMPLETE__ is invalid) 355 */ 356 #define IS_SMARTCARD_TRANSMISSION_COMPLETION(__TXCOMPLETE__) ((__TXCOMPLETE__) == SMARTCARD_TC) 357 358 /** 359 * @} 360 */ 361 362 /* Exported functions --------------------------------------------------------*/ 363 /** @addtogroup SMARTCARDEx_Exported_Functions 364 * @{ 365 */ 366 367 /* Initialization and de-initialization functions ****************************/ 368 /* IO operation methods *******************************************************/ 369 370 /** @addtogroup SMARTCARDEx_Exported_Functions_Group1 371 * @{ 372 */ 373 374 /* Peripheral Control functions ***********************************************/ 375 void HAL_SMARTCARDEx_BlockLength_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t BlockLength); 376 void HAL_SMARTCARDEx_TimeOut_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t TimeOutValue); 377 HAL_StatusTypeDef HAL_SMARTCARDEx_EnableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard); 378 HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard); 379 380 /** 381 * @} 382 */ 383 384 /* Exported functions --------------------------------------------------------*/ 385 /** @addtogroup SMARTCARDEx_Exported_Functions_Group2 386 * @{ 387 */ 388 389 /* IO operation functions *****************************************************/ 390 391 /** 392 * @} 393 */ 394 395 396 /** 397 * @} 398 */ 399 400 /* Private functions ---------------------------------------------------------*/ 401 402 /** 403 * @} 404 */ 405 406 /** 407 * @} 408 */ 409 410 #ifdef __cplusplus 411 } 412 #endif 413 414 #endif /* STM32F3xx_HAL_SMARTCARD_EX_H */ 415 416