stm32l0xx_hal_irda_ex.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. /**
  2. ******************************************************************************
  3. * @file stm32l0xx_hal_irda_ex.h
  4. * @author MCD Application Team
  5. * @brief Header file of IRDA 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. /* Define to prevent recursive inclusion -------------------------------------*/
  19. #ifndef STM32L0xx_HAL_IRDA_EX_H
  20. #define STM32L0xx_HAL_IRDA_EX_H
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. #if !defined (STM32L010x4) && !defined (STM32L010x6) && !defined (STM32L010x8)
  25. /* Includes ------------------------------------------------------------------*/
  26. #include "stm32l0xx_hal_def.h"
  27. /** @addtogroup STM32L0xx_HAL_Driver
  28. * @{
  29. */
  30. /** @defgroup IRDAEx IRDAEx
  31. * @brief IRDA Extended HAL module driver
  32. * @{
  33. */
  34. /* Exported types ------------------------------------------------------------*/
  35. /* Exported constants --------------------------------------------------------*/
  36. /** @defgroup IRDAEx_Extended_Exported_Constants IRDAEx Extended Exported Constants
  37. * @{
  38. */
  39. /** @defgroup IRDAEx_Word_Length IRDAEx Word Length
  40. * @{
  41. */
  42. #define IRDA_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long frame */
  43. #define IRDA_WORDLENGTH_8B 0x00000000U /*!< 8-bit long frame */
  44. #define IRDA_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long frame */
  45. /**
  46. * @}
  47. */
  48. /**
  49. * @}
  50. */
  51. /* Exported macros -----------------------------------------------------------*/
  52. /* Private macros ------------------------------------------------------------*/
  53. /** @defgroup IRDAEx_Private_Macros IRDAEx Private Macros
  54. * @{
  55. */
  56. /** @brief Report the IRDA clock source.
  57. * @param __HANDLE__ specifies the IRDA Handle.
  58. * @param __CLOCKSOURCE__ output variable.
  59. * @retval IRDA clocking source, written in __CLOCKSOURCE__.
  60. */
  61. #if defined (STM32L031xx) || defined (STM32L041xx) || defined (STM32L011xx) || defined (STM32L021xx) \
  62. || defined (STM32L010xB) || defined (STM32L010x8)
  63. #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  64. do { \
  65. if((__HANDLE__)->Instance == USART2) \
  66. { \
  67. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  68. { \
  69. case RCC_USART2CLKSOURCE_PCLK1: \
  70. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
  71. break; \
  72. case RCC_USART2CLKSOURCE_HSI: \
  73. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  74. break; \
  75. case RCC_USART2CLKSOURCE_SYSCLK: \
  76. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
  77. break; \
  78. case RCC_USART2CLKSOURCE_LSE: \
  79. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  80. break; \
  81. default: \
  82. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  83. break; \
  84. } \
  85. } \
  86. else if((__HANDLE__)->Instance == LPUART1) \
  87. { \
  88. switch(__HAL_RCC_GET_LPUART1_SOURCE()) \
  89. { \
  90. case RCC_LPUART1CLKSOURCE_PCLK1: \
  91. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
  92. break; \
  93. case RCC_LPUART1CLKSOURCE_HSI: \
  94. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  95. break; \
  96. case RCC_LPUART1CLKSOURCE_SYSCLK: \
  97. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
  98. break; \
  99. case RCC_LPUART1CLKSOURCE_LSE: \
  100. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  101. break; \
  102. default: \
  103. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  104. break; \
  105. } \
  106. } \
  107. else \
  108. { \
  109. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  110. } \
  111. } while(0U)
  112. #else /* (STM32L031xx) || (STM32L041xx) || (STM32L011xx) || (STM32L021xx) || (STM32L010xB) || (STM32L010x8)*/
  113. #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  114. do { \
  115. if((__HANDLE__)->Instance == USART1) \
  116. { \
  117. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  118. { \
  119. case RCC_USART1CLKSOURCE_PCLK2: \
  120. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2; \
  121. break; \
  122. case RCC_USART1CLKSOURCE_HSI: \
  123. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  124. break; \
  125. case RCC_USART1CLKSOURCE_SYSCLK: \
  126. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
  127. break; \
  128. case RCC_USART1CLKSOURCE_LSE: \
  129. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  130. break; \
  131. default: \
  132. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  133. break; \
  134. } \
  135. } \
  136. else if((__HANDLE__)->Instance == USART2) \
  137. { \
  138. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  139. { \
  140. case RCC_USART2CLKSOURCE_PCLK1: \
  141. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
  142. break; \
  143. case RCC_USART2CLKSOURCE_HSI: \
  144. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  145. break; \
  146. case RCC_USART2CLKSOURCE_SYSCLK: \
  147. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
  148. break; \
  149. case RCC_USART2CLKSOURCE_LSE: \
  150. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  151. break; \
  152. default: \
  153. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  154. break; \
  155. } \
  156. } \
  157. else if((__HANDLE__)->Instance == LPUART1) \
  158. { \
  159. switch(__HAL_RCC_GET_LPUART1_SOURCE()) \
  160. { \
  161. case RCC_LPUART1CLKSOURCE_PCLK1: \
  162. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
  163. break; \
  164. case RCC_LPUART1CLKSOURCE_HSI: \
  165. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  166. break; \
  167. case RCC_LPUART1CLKSOURCE_SYSCLK: \
  168. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
  169. break; \
  170. case RCC_LPUART1CLKSOURCE_LSE: \
  171. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  172. break; \
  173. default: \
  174. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  175. break; \
  176. } \
  177. } \
  178. else \
  179. { \
  180. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  181. } \
  182. } while(0U)
  183. #endif /* (STM32L031xx) || (STM32L041xx) || (STM32L011xx) || (STM32L021xx) || (STM32L010xB) || (STM32L010x8)*/
  184. /** @brief Compute the mask to apply to retrieve the received data
  185. * according to the word length and to the parity bits activation.
  186. * @param __HANDLE__ specifies the IRDA Handle.
  187. * @retval None, the mask to apply to the associated UART RDR register is stored in (__HANDLE__)->Mask field.
  188. */
  189. #define IRDA_MASK_COMPUTATION(__HANDLE__) \
  190. do { \
  191. if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_9B) \
  192. { \
  193. if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
  194. { \
  195. (__HANDLE__)->Mask = 0x01FFU ; \
  196. } \
  197. else \
  198. { \
  199. (__HANDLE__)->Mask = 0x00FFU ; \
  200. } \
  201. } \
  202. else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_8B) \
  203. { \
  204. if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
  205. { \
  206. (__HANDLE__)->Mask = 0x00FFU ; \
  207. } \
  208. else \
  209. { \
  210. (__HANDLE__)->Mask = 0x007FU ; \
  211. } \
  212. } \
  213. else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_7B) \
  214. { \
  215. if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
  216. { \
  217. (__HANDLE__)->Mask = 0x007FU ; \
  218. } \
  219. else \
  220. { \
  221. (__HANDLE__)->Mask = 0x003FU ; \
  222. } \
  223. } \
  224. else \
  225. { \
  226. (__HANDLE__)->Mask = 0x0000U; \
  227. } \
  228. } while(0U)
  229. /** @brief Ensure that IRDA frame length is valid.
  230. * @param __LENGTH__ IRDA frame length.
  231. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
  232. */
  233. #define IS_IRDA_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == IRDA_WORDLENGTH_7B) || \
  234. ((__LENGTH__) == IRDA_WORDLENGTH_8B) || \
  235. ((__LENGTH__) == IRDA_WORDLENGTH_9B))
  236. /**
  237. * @}
  238. */
  239. /* Exported functions --------------------------------------------------------*/
  240. /**
  241. * @}
  242. */
  243. /**
  244. * @}
  245. */
  246. #endif /* !defined (STM32L010x4) && !defined (STM32L010x6) && !defined (STM32L010x8) */
  247. #ifdef __cplusplus
  248. }
  249. #endif
  250. #endif /* STM32L0xx_HAL_IRDA_EX_H */