You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

396 lines
21 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32l4xx_hal_smartcard_ex.h
  4. * @author MCD Application Team
  5. * @version V1.7.1
  6. * @date 21-April-2017
  7. * @brief Header file of SMARTCARD HAL Extended module.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
  12. *
  13. * Redistribution and use in source and binary forms, with or without modification,
  14. * are permitted provided that the following conditions are met:
  15. * 1. Redistributions of source code must retain the above copyright notice,
  16. * this list of conditions and the following disclaimer.
  17. * 2. Redistributions in binary form must reproduce the above copyright notice,
  18. * this list of conditions and the following disclaimer in the documentation
  19. * and/or other materials provided with the distribution.
  20. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  21. * may be used to endorse or promote products derived from this software
  22. * without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  27. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  28. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  30. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  31. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  32. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  33. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34. *
  35. ******************************************************************************
  36. */
  37. /* Define to prevent recursive inclusion -------------------------------------*/
  38. #ifndef __STM32L4xx_HAL_SMARTCARD_EX_H
  39. #define __STM32L4xx_HAL_SMARTCARD_EX_H
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. /* Includes ------------------------------------------------------------------*/
  44. #include "stm32l4xx_hal_def.h"
  45. /** @addtogroup STM32L4xx_HAL_Driver
  46. * @{
  47. */
  48. /** @addtogroup SMARTCARDEx
  49. * @{
  50. */
  51. /* Exported types ------------------------------------------------------------*/
  52. /* Exported constants --------------------------------------------------------*/
  53. /** @addtogroup SMARTCARDEx_Exported_Constants SMARTCARD Extended Exported Constants
  54. * @{
  55. */
  56. /** @defgroup SMARTCARDEx_Transmission_Completion_Indication SMARTCARD Transmission Completion Indication
  57. * @{
  58. */
  59. #if defined(USART_TCBGT_SUPPORT)
  60. #define SMARTCARD_TCBGT SMARTCARD_IT_TCBGT /*!< SMARTCARD transmission complete before guard time */
  61. #endif /* USART_TCBGT_SUPPORT */
  62. #define SMARTCARD_TC SMARTCARD_IT_TC /*!< SMARTCARD transmission complete (flag raised when guard time has elapsed) */
  63. /**
  64. * @}
  65. */
  66. /** @defgroup SMARTCARDEx_Advanced_Features_Initialization_Type SMARTCARD advanced feature initialization type
  67. * @{
  68. */
  69. #define SMARTCARD_ADVFEATURE_NO_INIT ((uint32_t)0x00000000) /*!< No advanced feature initialization */
  70. #define SMARTCARD_ADVFEATURE_TXINVERT_INIT ((uint32_t)0x00000001) /*!< TX pin active level inversion */
  71. #define SMARTCARD_ADVFEATURE_RXINVERT_INIT ((uint32_t)0x00000002) /*!< RX pin active level inversion */
  72. #define SMARTCARD_ADVFEATURE_DATAINVERT_INIT ((uint32_t)0x00000004) /*!< Binary data inversion */
  73. #define SMARTCARD_ADVFEATURE_SWAP_INIT ((uint32_t)0x00000008) /*!< TX/RX pins swap */
  74. #define SMARTCARD_ADVFEATURE_RXOVERRUNDISABLE_INIT ((uint32_t)0x00000010) /*!< RX overrun disable */
  75. #define SMARTCARD_ADVFEATURE_DMADISABLEONERROR_INIT ((uint32_t)0x00000020) /*!< DMA disable on Reception Error */
  76. #define SMARTCARD_ADVFEATURE_MSBFIRST_INIT ((uint32_t)0x00000080) /*!< Most significant bit sent/received first */
  77. #if defined(USART_TCBGT_SUPPORT)
  78. #define SMARTCARD_ADVFEATURE_TXCOMPLETION ((uint32_t)0x00000100) /*!< TX completion indication before of after guard time */
  79. #endif /* USART_TCBGT_SUPPORT */
  80. /**
  81. * @}
  82. */
  83. /** @defgroup SMARTCARDEx_Flags SMARTCARD Flags
  84. * Elements values convention: 0xXXXX
  85. * - 0xXXXX : Flag mask in the ISR register
  86. * @{
  87. */
  88. #if defined(USART_TCBGT_SUPPORT)
  89. #define SMARTCARD_FLAG_TCBGT USART_ISR_TCBGT /*!< SMARTCARD transmission complete before guard time completion */
  90. #endif /* USART_TCBGT_SUPPORT */
  91. #define SMARTCARD_FLAG_REACK USART_ISR_REACK /*!< SMARTCARD receive enable acknowledge flag */
  92. #define SMARTCARD_FLAG_TEACK USART_ISR_TEACK /*!< SMARTCARD transmit enable acknowledge flag */
  93. #define SMARTCARD_FLAG_BUSY USART_ISR_BUSY /*!< SMARTCARD busy flag */
  94. #define SMARTCARD_FLAG_EOBF USART_ISR_EOBF /*!< SMARTCARD end of block flag */
  95. #define SMARTCARD_FLAG_RTOF USART_ISR_RTOF /*!< SMARTCARD receiver timeout flag */
  96. #define SMARTCARD_FLAG_TXE USART_ISR_TXE /*!< SMARTCARD transmit data register empty */
  97. #define SMARTCARD_FLAG_TC USART_ISR_TC /*!< SMARTCARD transmission complete */
  98. #define SMARTCARD_FLAG_RXNE USART_ISR_RXNE /*!< SMARTCARD read data register not empty */
  99. #define SMARTCARD_FLAG_IDLE USART_ISR_IDLE /*!< SMARTCARD idle line detection */
  100. #define SMARTCARD_FLAG_ORE USART_ISR_ORE /*!< SMARTCARD overrun error */
  101. #define SMARTCARD_FLAG_NE USART_ISR_NE /*!< SMARTCARD noise error */
  102. #define SMARTCARD_FLAG_FE USART_ISR_FE /*!< SMARTCARD frame error */
  103. #define SMARTCARD_FLAG_PE USART_ISR_PE /*!< SMARTCARD parity error */
  104. /**
  105. * @}
  106. */
  107. /** @defgroup SMARTCARDEx_Interrupt_definition SMARTCARD Interrupts Definition
  108. * Elements values convention: 000ZZZZZ0XXYYYYYb
  109. * - YYYYY : Interrupt source position in the XX register (5 bits)
  110. * - XX : Interrupt source register (2 bits)
  111. * - 01: CR1 register
  112. * - 10: CR2 register
  113. * - 11: CR3 register
  114. * - ZZZZZ : Flag position in the ISR register(5 bits)
  115. * @{
  116. */
  117. #define SMARTCARD_IT_PE ((uint16_t)0x0028) /*!< SMARTCARD parity error interruption */
  118. #define SMARTCARD_IT_TXE ((uint16_t)0x0727) /*!< SMARTCARD transmit data register empty interruption */
  119. #define SMARTCARD_IT_TC ((uint16_t)0x0626) /*!< SMARTCARD transmission complete interruption */
  120. #define SMARTCARD_IT_RXNE ((uint16_t)0x0525) /*!< SMARTCARD read data register not empty interruption */
  121. #define SMARTCARD_IT_IDLE ((uint16_t)0x0424) /*!< SMARTCARD idle line detection interruption */
  122. #define SMARTCARD_IT_ERR ((uint16_t)0x0060) /*!< SMARTCARD error interruption */
  123. #define SMARTCARD_IT_ORE ((uint16_t)0x0300) /*!< SMARTCARD overrun error interruption */
  124. #define SMARTCARD_IT_NE ((uint16_t)0x0200) /*!< SMARTCARD noise error interruption */
  125. #define SMARTCARD_IT_FE ((uint16_t)0x0100) /*!< SMARTCARD frame error interruption */
  126. #define SMARTCARD_IT_EOB ((uint16_t)0x0C3B) /*!< SMARTCARD end of block interruption */
  127. #define SMARTCARD_IT_RTO ((uint16_t)0x0B3A) /*!< SMARTCARD receiver timeout interruption */
  128. #if defined(USART_TCBGT_SUPPORT)
  129. #define SMARTCARD_IT_TCBGT ((uint16_t)0x1978) /*!< SMARTCARD transmission complete before guard time completion interruption */
  130. #endif /* USART_TCBGT_SUPPORT */
  131. /**
  132. * @}
  133. */
  134. /** @defgroup SMARTCARDEx_IT_CLEAR_Flags SMARTCARD Interruption Clear Flags
  135. * @{
  136. */
  137. #define SMARTCARD_CLEAR_PEF USART_ICR_PECF /*!< SMARTCARD parity error clear flag */
  138. #define SMARTCARD_CLEAR_FEF USART_ICR_FECF /*!< SMARTCARD framing error clear flag */
  139. #define SMARTCARD_CLEAR_NEF USART_ICR_NCF /*!< SMARTCARD noise detected clear flag */
  140. #define SMARTCARD_CLEAR_OREF USART_ICR_ORECF /*!< SMARTCARD overrun error clear flag */
  141. #define SMARTCARD_CLEAR_IDLEF USART_ICR_IDLECF /*!< SMARTCARD idle line detected clear flag */
  142. #define SMARTCARD_CLEAR_TCF USART_ICR_TCCF /*!< SMARTCARD transmission complete clear flag */
  143. #if defined(USART_TCBGT_SUPPORT)
  144. #define SMARTCARD_CLEAR_TCBGTF USART_ICR_TCBGTCF /*!< SMARTCARD transmission complete before guard time completion clear flag */
  145. #endif /* USART_TCBGT_SUPPORT */
  146. #define SMARTCARD_CLEAR_RTOF USART_ICR_RTOCF /*!< SMARTCARD receiver time out clear flag */
  147. #define SMARTCARD_CLEAR_EOBF USART_ICR_EOBCF /*!< SMARTCARD end of block clear flag */
  148. /**
  149. * @}
  150. */
  151. /**
  152. * @}
  153. */
  154. /* Exported macros -----------------------------------------------------------*/
  155. /* Private macros ------------------------------------------------------------*/
  156. /** @defgroup SMARTCARDEx_Private_Macros SMARTCARD Extended Private Macros
  157. * @{
  158. */
  159. /** @brief Report the SMARTCARD clock source.
  160. * @param __HANDLE__: specifies the SMARTCARD Handle.
  161. * @param __CLOCKSOURCE__: output variable.
  162. * @retval the SMARTCARD clocking source, written in __CLOCKSOURCE__.
  163. */
  164. #if defined (STM32L432xx) || defined (STM32L442xx)
  165. #define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  166. do { \
  167. if((__HANDLE__)->Instance == USART1) \
  168. { \
  169. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  170. { \
  171. case RCC_USART1CLKSOURCE_PCLK2: \
  172. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK2; \
  173. break; \
  174. case RCC_USART1CLKSOURCE_HSI: \
  175. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \
  176. break; \
  177. case RCC_USART1CLKSOURCE_SYSCLK: \
  178. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \
  179. break; \
  180. case RCC_USART1CLKSOURCE_LSE: \
  181. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \
  182. break; \
  183. default: \
  184. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
  185. break; \
  186. } \
  187. } \
  188. else if((__HANDLE__)->Instance == USART2) \
  189. { \
  190. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  191. { \
  192. case RCC_USART2CLKSOURCE_PCLK1: \
  193. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \
  194. break; \
  195. case RCC_USART2CLKSOURCE_HSI: \
  196. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \
  197. break; \
  198. case RCC_USART2CLKSOURCE_SYSCLK: \
  199. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \
  200. break; \
  201. case RCC_USART2CLKSOURCE_LSE: \
  202. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \
  203. break; \
  204. default: \
  205. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
  206. break; \
  207. } \
  208. } \
  209. } while(0)
  210. #else
  211. #define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  212. do { \
  213. if((__HANDLE__)->Instance == USART1) \
  214. { \
  215. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  216. { \
  217. case RCC_USART1CLKSOURCE_PCLK2: \
  218. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK2; \
  219. break; \
  220. case RCC_USART1CLKSOURCE_HSI: \
  221. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \
  222. break; \
  223. case RCC_USART1CLKSOURCE_SYSCLK: \
  224. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \
  225. break; \
  226. case RCC_USART1CLKSOURCE_LSE: \
  227. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \
  228. break; \
  229. default: \
  230. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
  231. break; \
  232. } \
  233. } \
  234. else if((__HANDLE__)->Instance == USART2) \
  235. { \
  236. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  237. { \
  238. case RCC_USART2CLKSOURCE_PCLK1: \
  239. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \
  240. break; \
  241. case RCC_USART2CLKSOURCE_HSI: \
  242. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \
  243. break; \
  244. case RCC_USART2CLKSOURCE_SYSCLK: \
  245. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \
  246. break; \
  247. case RCC_USART2CLKSOURCE_LSE: \
  248. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \
  249. break; \
  250. default: \
  251. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
  252. break; \
  253. } \
  254. } \
  255. else if((__HANDLE__)->Instance == USART3) \
  256. { \
  257. switch(__HAL_RCC_GET_USART3_SOURCE()) \
  258. { \
  259. case RCC_USART3CLKSOURCE_PCLK1: \
  260. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \
  261. break; \
  262. case RCC_USART3CLKSOURCE_HSI: \
  263. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \
  264. break; \
  265. case RCC_USART3CLKSOURCE_SYSCLK: \
  266. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \
  267. break; \
  268. case RCC_USART3CLKSOURCE_LSE: \
  269. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \
  270. break; \
  271. default: \
  272. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_UNDEFINED; \
  273. break; \
  274. } \
  275. } \
  276. } while(0)
  277. #endif /* STM32L432xx || STM32L442xx */
  278. /** @brief Set the Transmission Completion flag
  279. * @param __HANDLE__: specifies the SMARTCARD Handle.
  280. * @note If TCBGT (Transmission Complete Before Guard Time) flag is not available or if
  281. * AdvancedInit.TxCompletionIndication is not already filled, the latter is forced
  282. * to SMARTCARD_TC (transmission completion indication when guard time has elapsed).
  283. * @retval None
  284. */
  285. #if defined(USART_TCBGT_SUPPORT)
  286. #define SMARTCARD_TRANSMISSION_COMPLETION_SETTING(__HANDLE__) \
  287. do { \
  288. if (HAL_IS_BIT_CLR((__HANDLE__)->AdvancedInit.AdvFeatureInit, SMARTCARD_ADVFEATURE_TXCOMPLETION)) \
  289. { \
  290. (__HANDLE__)->AdvancedInit.TxCompletionIndication = SMARTCARD_TC; \
  291. } \
  292. else \
  293. { \
  294. assert_param(IS_SMARTCARD_TRANSMISSION_COMPLETION((__HANDLE__)->AdvancedInit.TxCompletionIndication)); \
  295. } \
  296. } while(0)
  297. #else
  298. #define SMARTCARD_TRANSMISSION_COMPLETION_SETTING(__HANDLE__) \
  299. do { \
  300. (__HANDLE__)->AdvancedInit.TxCompletionIndication = SMARTCARD_TC; \
  301. } while(0)
  302. #endif
  303. /** @brief Return the transmission completion flag.
  304. * @param __HANDLE__: specifies the SMARTCARD Handle.
  305. * @note Based on AdvancedInit.TxCompletionIndication setting, return TC or TCBGT flag.
  306. * When TCBGT flag (Transmission Complete Before Guard Time) is not available, TC flag is
  307. * reported.
  308. * @retval Transmission completion flag
  309. */
  310. #if defined(USART_TCBGT_SUPPORT)
  311. #define SMARTCARD_TRANSMISSION_COMPLETION_FLAG(__HANDLE__) \
  312. (((__HANDLE__)->AdvancedInit.TxCompletionIndication == SMARTCARD_TC) ? (SMARTCARD_FLAG_TC) : (SMARTCARD_FLAG_TCBGT))
  313. #else
  314. #define SMARTCARD_TRANSMISSION_COMPLETION_FLAG(__HANDLE__) (SMARTCARD_FLAG_TC)
  315. #endif
  316. /**
  317. * @brief Ensure that SMARTCARD frame transmission completion used flag is valid.
  318. * @param __TXCOMPLETE__: SMARTCARD frame transmission completion used flag.
  319. * @retval SET (__TXCOMPLETE__ is valid) or RESET (__TXCOMPLETE__ is invalid)
  320. */
  321. #if defined(USART_TCBGT_SUPPORT)
  322. #define IS_SMARTCARD_TRANSMISSION_COMPLETION(__TXCOMPLETE__) (((__TXCOMPLETE__) == SMARTCARD_TCBGT) ||\
  323. ((__TXCOMPLETE__) == SMARTCARD_TC))
  324. #else
  325. #define IS_SMARTCARD_TRANSMISSION_COMPLETION(__TXCOMPLETE__) ((__TXCOMPLETE__) == SMARTCARD_TC)
  326. #endif
  327. /**
  328. * @}
  329. */
  330. /* Exported functions --------------------------------------------------------*/
  331. /** @addtogroup SMARTCARDEx_Exported_Functions
  332. * @{
  333. */
  334. /* Initialization and de-initialization functions ****************************/
  335. /* IO operation methods *******************************************************/
  336. /** @addtogroup SMARTCARDEx_Exported_Functions_Group1
  337. * @{
  338. */
  339. /* Peripheral Control functions ***********************************************/
  340. void HAL_SMARTCARDEx_BlockLength_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint8_t BlockLength);
  341. void HAL_SMARTCARDEx_TimeOut_Config(SMARTCARD_HandleTypeDef *hsmartcard, uint32_t TimeOutValue);
  342. HAL_StatusTypeDef HAL_SMARTCARDEx_EnableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard);
  343. HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsmartcard);
  344. /**
  345. * @}
  346. */
  347. /**
  348. * @}
  349. */
  350. /**
  351. * @}
  352. */
  353. /**
  354. * @}
  355. */
  356. #ifdef __cplusplus
  357. }
  358. #endif
  359. #endif /* __STM32L4xx_HAL_SMARTCARD_EX_H */
  360. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/