stm32l0xx_hal_usart_ex.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. /**
  2. ******************************************************************************
  3. * @file stm32l0xx_hal_usart_ex.h
  4. * @author MCD Application Team
  5. * @brief Header file of USART 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_USART_EX_H
  20. #define STM32L0xx_HAL_USART_EX_H
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. /* Includes ------------------------------------------------------------------*/
  25. #include "stm32l0xx_hal_def.h"
  26. /** @addtogroup STM32L0xx_HAL_Driver
  27. * @{
  28. */
  29. /** @addtogroup USARTEx
  30. * @{
  31. */
  32. /* Exported types ------------------------------------------------------------*/
  33. /* Exported constants --------------------------------------------------------*/
  34. /** @defgroup USARTEx_Exported_Constants USARTEx Exported Constants
  35. * @{
  36. */
  37. /** @defgroup USARTEx_Word_Length USARTEx Word Length
  38. * @{
  39. */
  40. #define USART_WORDLENGTH_7B (USART_CR1_M1) /*!< 7-bit long USART frame */
  41. #define USART_WORDLENGTH_8B (0x00000000U) /*!< 8-bit long USART frame */
  42. #define USART_WORDLENGTH_9B (USART_CR1_M0) /*!< 9-bit long USART frame */
  43. /**
  44. * @}
  45. */
  46. /**
  47. * @}
  48. */
  49. /* Private macros ------------------------------------------------------------*/
  50. /** @defgroup USARTEx_Private_Macros USARTEx Private Macros
  51. * @{
  52. */
  53. /** @brief Report the USART clock source.
  54. * @param __HANDLE__ specifies the USART Handle.
  55. * @param __CLOCKSOURCE__ output variable.
  56. * @retval the USART clocking source, written in __CLOCKSOURCE__.
  57. */
  58. #if defined(STM32L051xx) || defined(STM32L052xx) || defined(STM32L053xx) || defined(STM32L062xx) || defined(STM32L063xx)
  59. #define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  60. do { \
  61. if((__HANDLE__)->Instance == USART1) \
  62. { \
  63. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  64. { \
  65. case RCC_USART1CLKSOURCE_PCLK2: \
  66. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK2; \
  67. break; \
  68. case RCC_USART1CLKSOURCE_HSI: \
  69. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
  70. break; \
  71. case RCC_USART1CLKSOURCE_SYSCLK: \
  72. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK; \
  73. break; \
  74. case RCC_USART1CLKSOURCE_LSE: \
  75. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
  76. break; \
  77. default: \
  78. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
  79. break; \
  80. } \
  81. } \
  82. else if((__HANDLE__)->Instance == USART2) \
  83. { \
  84. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  85. { \
  86. case RCC_USART2CLKSOURCE_PCLK1: \
  87. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1; \
  88. break; \
  89. case RCC_USART2CLKSOURCE_HSI: \
  90. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
  91. break; \
  92. case RCC_USART2CLKSOURCE_SYSCLK: \
  93. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK; \
  94. break; \
  95. case RCC_USART2CLKSOURCE_LSE: \
  96. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
  97. break; \
  98. default: \
  99. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
  100. break; \
  101. } \
  102. } \
  103. else \
  104. { \
  105. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
  106. } \
  107. } while(0U)
  108. #elif defined(STM32L071xx) || defined (STM32L081xx) || defined(STM32L072xx) || defined (STM32L082xx) \
  109. || defined(STM32L073xx) || defined (STM32L083xx)
  110. #define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  111. do { \
  112. if((__HANDLE__)->Instance == USART1) \
  113. { \
  114. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  115. { \
  116. case RCC_USART1CLKSOURCE_PCLK2: \
  117. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK2; \
  118. break; \
  119. case RCC_USART1CLKSOURCE_HSI: \
  120. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
  121. break; \
  122. case RCC_USART1CLKSOURCE_SYSCLK: \
  123. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK; \
  124. break; \
  125. case RCC_USART1CLKSOURCE_LSE: \
  126. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
  127. break; \
  128. default: \
  129. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
  130. break; \
  131. } \
  132. } \
  133. else if((__HANDLE__)->Instance == USART2) \
  134. { \
  135. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  136. { \
  137. case RCC_USART2CLKSOURCE_PCLK1: \
  138. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1; \
  139. break; \
  140. case RCC_USART2CLKSOURCE_HSI: \
  141. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
  142. break; \
  143. case RCC_USART2CLKSOURCE_SYSCLK: \
  144. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK; \
  145. break; \
  146. case RCC_USART2CLKSOURCE_LSE: \
  147. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
  148. break; \
  149. default: \
  150. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
  151. break; \
  152. } \
  153. } \
  154. else if((__HANDLE__)->Instance == USART4) \
  155. { \
  156. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1; \
  157. } \
  158. else if((__HANDLE__)->Instance == USART5) \
  159. { \
  160. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1; \
  161. } \
  162. else \
  163. { \
  164. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
  165. } \
  166. } while(0U)
  167. #else
  168. #define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  169. do { \
  170. if((__HANDLE__)->Instance == USART2) \
  171. { \
  172. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  173. { \
  174. case RCC_USART2CLKSOURCE_PCLK1: \
  175. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1; \
  176. break; \
  177. case RCC_USART2CLKSOURCE_HSI: \
  178. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
  179. break; \
  180. case RCC_USART2CLKSOURCE_SYSCLK: \
  181. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK; \
  182. break; \
  183. case RCC_USART2CLKSOURCE_LSE: \
  184. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
  185. break; \
  186. default: \
  187. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
  188. break; \
  189. } \
  190. } \
  191. else \
  192. { \
  193. (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
  194. } \
  195. } while(0U)
  196. #endif /* STM32L051xx || STM32L052xx || STM32L053xx || STM32L062xx || STM32L063xx */
  197. /** @brief Compute the USART mask to apply to retrieve the received data
  198. * according to the word length and to the parity bits activation.
  199. * @note If PCE = 1, the parity bit is not included in the data extracted
  200. * by the reception API().
  201. * This masking operation is not carried out in the case of
  202. * DMA transfers.
  203. * @param __HANDLE__ specifies the USART Handle.
  204. * @retval None, the mask to apply to USART RDR register is stored in (__HANDLE__)->Mask field.
  205. */
  206. #define USART_MASK_COMPUTATION(__HANDLE__) \
  207. do { \
  208. if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_9B) \
  209. { \
  210. if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \
  211. { \
  212. (__HANDLE__)->Mask = 0x01FFU; \
  213. } \
  214. else \
  215. { \
  216. (__HANDLE__)->Mask = 0x00FFU; \
  217. } \
  218. } \
  219. else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_8B) \
  220. { \
  221. if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \
  222. { \
  223. (__HANDLE__)->Mask = 0x00FFU; \
  224. } \
  225. else \
  226. { \
  227. (__HANDLE__)->Mask = 0x007FU; \
  228. } \
  229. } \
  230. else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_7B) \
  231. { \
  232. if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \
  233. { \
  234. (__HANDLE__)->Mask = 0x007FU; \
  235. } \
  236. else \
  237. { \
  238. (__HANDLE__)->Mask = 0x003FU; \
  239. } \
  240. } \
  241. else \
  242. { \
  243. (__HANDLE__)->Mask = 0x0000U; \
  244. } \
  245. } while(0U)
  246. /**
  247. * @brief Ensure that USART frame length is valid.
  248. * @param __LENGTH__ USART frame length.
  249. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
  250. */
  251. #define IS_USART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == USART_WORDLENGTH_7B) || \
  252. ((__LENGTH__) == USART_WORDLENGTH_8B) || \
  253. ((__LENGTH__) == USART_WORDLENGTH_9B))
  254. /**
  255. * @}
  256. */
  257. /* Exported functions --------------------------------------------------------*/
  258. /** @addtogroup USARTEx_Exported_Functions
  259. * @{
  260. */
  261. /** @addtogroup USARTEx_Exported_Functions_Group1
  262. * @{
  263. */
  264. /* IO operation functions *****************************************************/
  265. /**
  266. * @}
  267. */
  268. /** @addtogroup USARTEx_Exported_Functions_Group2
  269. * @{
  270. */
  271. /* Peripheral Control functions ***********************************************/
  272. /**
  273. * @}
  274. */
  275. /**
  276. * @}
  277. */
  278. /**
  279. * @}
  280. */
  281. /**
  282. * @}
  283. */
  284. #ifdef __cplusplus
  285. }
  286. #endif
  287. #endif /* STM32L0xx_HAL_USART_EX_H */