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.
 
 
 

274 lines
14 KiB

  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. * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. */
  19. /* Define to prevent recursive inclusion -------------------------------------*/
  20. #ifndef STM32L0xx_HAL_IRDA_EX_H
  21. #define STM32L0xx_HAL_IRDA_EX_H
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. #if !defined (STM32L010x4) && !defined (STM32L010x6) && !defined (STM32L010x8)
  26. /* Includes ------------------------------------------------------------------*/
  27. #include "stm32l0xx_hal_def.h"
  28. /** @addtogroup STM32L0xx_HAL_Driver
  29. * @{
  30. */
  31. /** @defgroup IRDAEx
  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) || defined (STM32L010xB) || defined (STM32L010x8)
  62. #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  63. do { \
  64. if((__HANDLE__)->Instance == USART2) \
  65. { \
  66. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  67. { \
  68. case RCC_USART2CLKSOURCE_PCLK1: \
  69. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
  70. break; \
  71. case RCC_USART2CLKSOURCE_HSI: \
  72. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  73. break; \
  74. case RCC_USART2CLKSOURCE_SYSCLK: \
  75. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
  76. break; \
  77. case RCC_USART2CLKSOURCE_LSE: \
  78. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  79. break; \
  80. default: \
  81. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  82. break; \
  83. } \
  84. } \
  85. else if((__HANDLE__)->Instance == LPUART1) \
  86. { \
  87. switch(__HAL_RCC_GET_LPUART1_SOURCE()) \
  88. { \
  89. case RCC_LPUART1CLKSOURCE_PCLK1: \
  90. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
  91. break; \
  92. case RCC_LPUART1CLKSOURCE_HSI: \
  93. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  94. break; \
  95. case RCC_LPUART1CLKSOURCE_SYSCLK: \
  96. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
  97. break; \
  98. case RCC_LPUART1CLKSOURCE_LSE: \
  99. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  100. break; \
  101. default: \
  102. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  103. break; \
  104. } \
  105. } \
  106. else \
  107. { \
  108. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  109. } \
  110. } while(0U)
  111. #else /* (STM32L031xx) || defined (STM32L041xx) || (STM32L011xx) || defined (STM32L021xx) || defined (STM32L010xB) || defined (STM32L010x8)*/
  112. #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  113. do { \
  114. if((__HANDLE__)->Instance == USART1) \
  115. { \
  116. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  117. { \
  118. case RCC_USART1CLKSOURCE_PCLK2: \
  119. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2; \
  120. break; \
  121. case RCC_USART1CLKSOURCE_HSI: \
  122. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  123. break; \
  124. case RCC_USART1CLKSOURCE_SYSCLK: \
  125. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
  126. break; \
  127. case RCC_USART1CLKSOURCE_LSE: \
  128. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  129. break; \
  130. default: \
  131. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  132. break; \
  133. } \
  134. } \
  135. else if((__HANDLE__)->Instance == USART2) \
  136. { \
  137. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  138. { \
  139. case RCC_USART2CLKSOURCE_PCLK1: \
  140. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
  141. break; \
  142. case RCC_USART2CLKSOURCE_HSI: \
  143. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  144. break; \
  145. case RCC_USART2CLKSOURCE_SYSCLK: \
  146. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
  147. break; \
  148. case RCC_USART2CLKSOURCE_LSE: \
  149. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  150. break; \
  151. default: \
  152. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  153. break; \
  154. } \
  155. } \
  156. else if((__HANDLE__)->Instance == LPUART1) \
  157. { \
  158. switch(__HAL_RCC_GET_LPUART1_SOURCE()) \
  159. { \
  160. case RCC_LPUART1CLKSOURCE_PCLK1: \
  161. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \
  162. break; \
  163. case RCC_LPUART1CLKSOURCE_HSI: \
  164. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \
  165. break; \
  166. case RCC_LPUART1CLKSOURCE_SYSCLK: \
  167. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \
  168. break; \
  169. case RCC_LPUART1CLKSOURCE_LSE: \
  170. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \
  171. break; \
  172. default: \
  173. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  174. break; \
  175. } \
  176. } \
  177. else \
  178. { \
  179. (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \
  180. } \
  181. } while(0U)
  182. #endif /* (STM32L031xx) || (STM32L041xx) || (STM32L011xx) || (STM32L021xx) || (STM32L010xB) || (STM32L010x8)*/
  183. /** @brief Compute the mask to apply to retrieve the received data
  184. * according to the word length and to the parity bits activation.
  185. * @param __HANDLE__ specifies the IRDA Handle.
  186. * @retval None, the mask to apply to the associated UART RDR register is stored in (__HANDLE__)->Mask field.
  187. */
  188. #define IRDA_MASK_COMPUTATION(__HANDLE__) \
  189. do { \
  190. if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_9B) \
  191. { \
  192. if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
  193. { \
  194. (__HANDLE__)->Mask = 0x01FFU ; \
  195. } \
  196. else \
  197. { \
  198. (__HANDLE__)->Mask = 0x00FFU ; \
  199. } \
  200. } \
  201. else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_8B) \
  202. { \
  203. if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
  204. { \
  205. (__HANDLE__)->Mask = 0x00FFU ; \
  206. } \
  207. else \
  208. { \
  209. (__HANDLE__)->Mask = 0x007FU ; \
  210. } \
  211. } \
  212. else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_7B) \
  213. { \
  214. if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \
  215. { \
  216. (__HANDLE__)->Mask = 0x007FU ; \
  217. } \
  218. else \
  219. { \
  220. (__HANDLE__)->Mask = 0x003FU ; \
  221. } \
  222. } \
  223. else \
  224. { \
  225. (__HANDLE__)->Mask = 0x0000U; \
  226. } \
  227. } while(0U)
  228. /** @brief Ensure that IRDA frame length is valid.
  229. * @param __LENGTH__ IRDA frame length.
  230. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
  231. */
  232. #define IS_IRDA_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == IRDA_WORDLENGTH_7B) || \
  233. ((__LENGTH__) == IRDA_WORDLENGTH_8B) || \
  234. ((__LENGTH__) == IRDA_WORDLENGTH_9B))
  235. /**
  236. * @}
  237. */
  238. /* Exported functions --------------------------------------------------------*/
  239. /**
  240. * @}
  241. */
  242. /**
  243. * @}
  244. */
  245. #endif /* !defined (STM32L010x4) && !defined (STM32L010x6) && !defined (STM32L010x8) */
  246. #ifdef __cplusplus
  247. }
  248. #endif
  249. #endif /* STM32L0xx_HAL_IRDA_EX_H */
  250. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/