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.
 
 
 

309 lines
15 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32f7xx_hal_smartcard_ex.h
  4. * @author MCD Application Team
  5. * @version V1.2.2
  6. * @date 14-April-2017
  7. * @brief Header file of SMARTCARD HAL 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 __STM32F7xx_HAL_SMARTCARD_EX_H
  39. #define __STM32F7xx_HAL_SMARTCARD_EX_H
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. /* Includes ------------------------------------------------------------------*/
  44. #include "stm32f7xx_hal_def.h"
  45. /** @addtogroup STM32F7xx_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. #if defined(USART_TCBGT_SUPPORT)
  70. #define SMARTCARD_ADVFEATURE_TXCOMPLETION ((uint32_t)0x00000100) /*!< TX completion indication before of after guard time */
  71. #endif /* USART_TCBGT_SUPPORT */
  72. /**
  73. * @}
  74. */
  75. /** @defgroup SMARTCARDEx_Flags SMARTCARD Flags
  76. * Elements values convention: 0xXXXX
  77. * - 0xXXXX : Flag mask in the ISR register
  78. * @{
  79. */
  80. #if defined(USART_TCBGT_SUPPORT)
  81. #define SMARTCARD_FLAG_TCBGT USART_ISR_TCBGT /*!< SMARTCARD transmission complete before guard time completion */
  82. #endif /* USART_TCBGT_SUPPORT */
  83. /**
  84. * @}
  85. */
  86. /** @defgroup SMARTCARDEx_Interrupt_definition SMARTCARD Interrupts Definition
  87. * Elements values convention: 000ZZZZZ0XXYYYYYb
  88. * - YYYYY : Interrupt source position in the XX register (5 bits)
  89. * - XX : Interrupt source register (2 bits)
  90. * - 01: CR1 register
  91. * - 10: CR2 register
  92. * - 11: CR3 register
  93. * - ZZZZZ : Flag position in the ISR register(5 bits)
  94. * @{
  95. */
  96. #if defined(USART_TCBGT_SUPPORT)
  97. #define SMARTCARD_IT_TCBGT ((uint16_t)0x1978) /*!< SMARTCARD transmission complete before guard time completion interruption */
  98. #endif /* USART_TCBGT_SUPPORT */
  99. /**
  100. * @}
  101. */
  102. /** @defgroup SMARTCARDEx_IT_CLEAR_Flags SMARTCARD Interruption Clear Flags
  103. * @{
  104. */
  105. #define SMARTCARD_CLEAR_PEF USART_ICR_PECF /*!< SMARTCARD parity error clear flag */
  106. #define SMARTCARD_CLEAR_FEF USART_ICR_FECF /*!< SMARTCARD framing error clear flag */
  107. #define SMARTCARD_CLEAR_NEF USART_ICR_NCF /*!< SMARTCARD noise detected clear flag */
  108. #define SMARTCARD_CLEAR_OREF USART_ICR_ORECF /*!< SMARTCARD overrun error clear flag */
  109. #define SMARTCARD_CLEAR_IDLEF USART_ICR_IDLECF /*!< SMARTCARD idle line detected clear flag */
  110. #define SMARTCARD_CLEAR_TCF USART_ICR_TCCF /*!< SMARTCARD transmission complete clear flag */
  111. #if defined(USART_TCBGT_SUPPORT)
  112. #define SMARTCARD_CLEAR_TCBGTF USART_ICR_TCBGTCF /*!< SMARTCARD transmission complete before guard time completion clear flag */
  113. #endif /* USART_TCBGT_SUPPORT */
  114. #define SMARTCARD_CLEAR_RTOF USART_ICR_RTOCF /*!< SMARTCARD receiver time out clear flag */
  115. #define SMARTCARD_CLEAR_EOBF USART_ICR_EOBCF /*!< SMARTCARD end of block clear flag */
  116. /**
  117. * @}
  118. */
  119. /* Exported macro ------------------------------------------------------------*/
  120. /** @brief Reports the SMARTCARD clock source.
  121. * @param __HANDLE__: specifies the USART Handle
  122. * @param __CLOCKSOURCE__ : output variable
  123. * @retval the USART clocking source, written in __CLOCKSOURCE__.
  124. */
  125. #define SMARTCARD_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  126. do { \
  127. if((__HANDLE__)->Instance == USART1) \
  128. { \
  129. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  130. { \
  131. case RCC_USART1CLKSOURCE_PCLK2: \
  132. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK2; \
  133. break; \
  134. case RCC_USART1CLKSOURCE_HSI: \
  135. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \
  136. break; \
  137. case RCC_USART1CLKSOURCE_SYSCLK: \
  138. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \
  139. break; \
  140. case RCC_USART1CLKSOURCE_LSE: \
  141. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \
  142. break; \
  143. default: \
  144. break; \
  145. } \
  146. } \
  147. else if((__HANDLE__)->Instance == USART2) \
  148. { \
  149. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  150. { \
  151. case RCC_USART2CLKSOURCE_PCLK1: \
  152. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \
  153. break; \
  154. case RCC_USART2CLKSOURCE_HSI: \
  155. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \
  156. break; \
  157. case RCC_USART2CLKSOURCE_SYSCLK: \
  158. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \
  159. break; \
  160. case RCC_USART2CLKSOURCE_LSE: \
  161. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \
  162. break; \
  163. default: \
  164. break; \
  165. } \
  166. } \
  167. else if((__HANDLE__)->Instance == USART3) \
  168. { \
  169. switch(__HAL_RCC_GET_USART3_SOURCE()) \
  170. { \
  171. case RCC_USART3CLKSOURCE_PCLK1: \
  172. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK1; \
  173. break; \
  174. case RCC_USART3CLKSOURCE_HSI: \
  175. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \
  176. break; \
  177. case RCC_USART3CLKSOURCE_SYSCLK: \
  178. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \
  179. break; \
  180. case RCC_USART3CLKSOURCE_LSE: \
  181. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \
  182. break; \
  183. default: \
  184. break; \
  185. } \
  186. } \
  187. else if((__HANDLE__)->Instance == USART6) \
  188. { \
  189. switch(__HAL_RCC_GET_USART6_SOURCE()) \
  190. { \
  191. case RCC_USART6CLKSOURCE_PCLK2: \
  192. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_PCLK2; \
  193. break; \
  194. case RCC_USART6CLKSOURCE_HSI: \
  195. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_HSI; \
  196. break; \
  197. case RCC_USART6CLKSOURCE_SYSCLK: \
  198. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_SYSCLK; \
  199. break; \
  200. case RCC_USART6CLKSOURCE_LSE: \
  201. (__CLOCKSOURCE__) = SMARTCARD_CLOCKSOURCE_LSE; \
  202. break; \
  203. default: \
  204. break; \
  205. } \
  206. } \
  207. } while(0)
  208. /** @brief Set the Transmission Completion flag
  209. * @param __HANDLE__: specifies the SMARTCARD Handle.
  210. * @note If TCBGT (Transmission Complete Before Guard Time) flag is not available or if
  211. * AdvancedInit.TxCompletionIndication is not already filled, the latter is forced
  212. * to SMARTCARD_TC (transmission completion indication when guard time has elapsed).
  213. * @retval None
  214. */
  215. #if defined(USART_TCBGT_SUPPORT)
  216. #define SMARTCARD_TRANSMISSION_COMPLETION_SETTING(__HANDLE__) \
  217. do { \
  218. if (HAL_IS_BIT_CLR((__HANDLE__)->AdvancedInit.AdvFeatureInit, SMARTCARD_ADVFEATURE_TXCOMPLETION)) \
  219. { \
  220. (__HANDLE__)->AdvancedInit.TxCompletionIndication = SMARTCARD_TC; \
  221. } \
  222. else \
  223. { \
  224. assert_param(IS_SMARTCARD_TRANSMISSION_COMPLETION((__HANDLE__)->AdvancedInit.TxCompletionIndication)); \
  225. } \
  226. } while(0)
  227. #else
  228. #define SMARTCARD_TRANSMISSION_COMPLETION_SETTING(__HANDLE__) \
  229. do { \
  230. (__HANDLE__)->AdvancedInit.TxCompletionIndication = SMARTCARD_TC; \
  231. } while(0)
  232. #endif
  233. /** @brief Return the transmission completion flag.
  234. * @param __HANDLE__: specifies the SMARTCARD Handle.
  235. * @note Based on AdvancedInit.TxCompletionIndication setting, return TC or TCBGT flag.
  236. * When TCBGT flag (Transmission Complete Before Guard Time) is not available, TC flag is
  237. * reported.
  238. * @retval Transmission completion flag
  239. */
  240. #if defined(USART_TCBGT_SUPPORT)
  241. #define SMARTCARD_TRANSMISSION_COMPLETION_FLAG(__HANDLE__) \
  242. (((__HANDLE__)->AdvancedInit.TxCompletionIndication == SMARTCARD_TC) ? (SMARTCARD_FLAG_TC) : (SMARTCARD_FLAG_TCBGT))
  243. #else
  244. #define SMARTCARD_TRANSMISSION_COMPLETION_FLAG(__HANDLE__) (SMARTCARD_FLAG_TC)
  245. #endif
  246. /**
  247. * @brief Ensure that SMARTCARD frame transmission completion used flag is valid.
  248. * @param __TXCOMPLETE__: SMARTCARD frame transmission completion used flag.
  249. * @retval SET (__TXCOMPLETE__ is valid) or RESET (__TXCOMPLETE__ is invalid)
  250. */
  251. #if defined(USART_TCBGT_SUPPORT)
  252. #define IS_SMARTCARD_TRANSMISSION_COMPLETION(__TXCOMPLETE__) (((__TXCOMPLETE__) == SMARTCARD_TCBGT) ||\
  253. ((__TXCOMPLETE__) == SMARTCARD_TC))
  254. #else
  255. #define IS_SMARTCARD_TRANSMISSION_COMPLETION(__TXCOMPLETE__) ((__TXCOMPLETE__) == SMARTCARD_TC)
  256. #endif
  257. /**
  258. * @}
  259. */
  260. /* Exported functions --------------------------------------------------------*/
  261. /* Initialization and de-initialization functions ****************************/
  262. /* IO operation functions *****************************************************/
  263. /* Peripheral Control functions ***********************************************/
  264. void HAL_SMARTCARDEx_BlockLength_Config(SMARTCARD_HandleTypeDef *hsc, uint8_t BlockLength);
  265. void HAL_SMARTCARDEx_TimeOut_Config(SMARTCARD_HandleTypeDef *hsc, uint32_t TimeOutValue);
  266. HAL_StatusTypeDef HAL_SMARTCARDEx_EnableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsc);
  267. HAL_StatusTypeDef HAL_SMARTCARDEx_DisableReceiverTimeOut(SMARTCARD_HandleTypeDef *hsc);
  268. /* Peripheral State and Error functions ***************************************/
  269. /**
  270. * @}
  271. */
  272. /**
  273. * @}
  274. */
  275. #ifdef __cplusplus
  276. }
  277. #endif
  278. #endif /* __STM32F7xx_HAL_SMARTCARD_EX_H */
  279. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/