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.
 
 
 

860 lines
50 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32f0xx_hal_uart_ex.h
  4. * @author MCD Application Team
  5. * @brief Header file of UART HAL Extended module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
  10. *
  11. * Redistribution and use in source and binary forms, with or without modification,
  12. * are permitted provided that the following conditions are met:
  13. * 1. Redistributions of source code must retain the above copyright notice,
  14. * this list of conditions and the following disclaimer.
  15. * 2. Redistributions in binary form must reproduce the above copyright notice,
  16. * this list of conditions and the following disclaimer in the documentation
  17. * and/or other materials provided with the distribution.
  18. * 3. Neither the name of STMicroelectronics nor the names of its contributors
  19. * may be used to endorse or promote products derived from this software
  20. * without specific prior written permission.
  21. *
  22. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  23. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  25. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  26. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  28. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  29. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  30. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  31. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32. *
  33. ******************************************************************************
  34. */
  35. /* Define to prevent recursive inclusion -------------------------------------*/
  36. #ifndef __STM32F0xx_HAL_UART_EX_H
  37. #define __STM32F0xx_HAL_UART_EX_H
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41. /* Includes ------------------------------------------------------------------*/
  42. #include "stm32f0xx_hal_def.h"
  43. /** @addtogroup STM32F0xx_HAL_Driver
  44. * @{
  45. */
  46. /** @addtogroup UARTEx
  47. * @{
  48. */
  49. /* Exported types ------------------------------------------------------------*/
  50. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  51. /** @defgroup UARTEx_Exported_Types UARTEx Exported Types
  52. * @{
  53. */
  54. /**
  55. * @brief UART wake up from stop mode parameters
  56. */
  57. typedef struct
  58. {
  59. uint32_t WakeUpEvent; /*!< Specifies which event will activat the Wakeup from Stop mode flag (WUF).
  60. This parameter can be a value of @ref UART_WakeUp_from_Stop_Selection.
  61. If set to UART_WAKEUP_ON_ADDRESS, the two other fields below must
  62. be filled up. */
  63. uint16_t AddressLength; /*!< Specifies whether the address is 4 or 7-bit long.
  64. This parameter can be a value of @ref UART_WakeUp_Address_Length. */
  65. uint8_t Address; /*!< UART/USART node address (7-bit long max). */
  66. } UART_WakeUpTypeDef;
  67. /**
  68. * @}
  69. */
  70. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  71. /* Exported constants --------------------------------------------------------*/
  72. /** @defgroup UARTEx_Exported_Constants UARTEx Exported Constants
  73. * @{
  74. */
  75. /** @defgroup UARTEx_Word_Length UARTEx Word Length
  76. * @{
  77. */
  78. #if defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F070x6) || \
  79. defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || defined (STM32F070xB) || \
  80. defined (STM32F091xC) || defined (STM32F098xx) || defined (STM32F030xC)
  81. #define UART_WORDLENGTH_7B ((uint32_t)USART_CR1_M1) /*!< 7-bit long UART frame */
  82. #define UART_WORDLENGTH_8B (0x00000000U) /*!< 8-bit long UART frame */
  83. #define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M0) /*!< 9-bit long UART frame */
  84. #else
  85. #define UART_WORDLENGTH_8B (0x00000000U) /*!< 8-bit long UART frame */
  86. #define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M) /*!< 9-bit long UART frame */
  87. #endif /* defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F070x6) || \
  88. defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || defined (STM32F070xB) || \
  89. defined (STM32F091xC) || defined (STM32F098xx) || defined (STM32F030xC) */
  90. /**
  91. * @}
  92. */
  93. /** @defgroup UARTEx_AutoBaud_Rate_Mode UARTEx Advanced Feature AutoBaud Rate Mode
  94. * @{
  95. */
  96. #if defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F070x6) || \
  97. defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || defined (STM32F070xB) || \
  98. defined (STM32F091xC) || defined (STM32F098xx) || defined (STM32F030xC)
  99. #define UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT (0x00000000U) /*!< Auto Baud rate detection on start bit */
  100. #define UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE ((uint32_t)USART_CR2_ABRMODE_0) /*!< Auto Baud rate detection on falling edge */
  101. #define UART_ADVFEATURE_AUTOBAUDRATE_ON0X7FFRAME ((uint32_t)USART_CR2_ABRMODE_1) /*!< Auto Baud rate detection on 0x7F frame detection */
  102. #define UART_ADVFEATURE_AUTOBAUDRATE_ON0X55FRAME ((uint32_t)USART_CR2_ABRMODE) /*!< Auto Baud rate detection on 0x55 frame detection */
  103. #else
  104. #define UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT (0x00000000U) /*!< Auto Baud rate detection on start bit */
  105. #define UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE ((uint32_t)USART_CR2_ABRMODE_0) /*!< Auto Baud rate detection on falling edge */
  106. #endif /* defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F070x6) || \
  107. defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || defined (STM32F070xB) || \
  108. defined (STM32F091xC) || defined (STM32F098xx) || defined (STM32F030xC) */
  109. /**
  110. * @}
  111. */
  112. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  113. /** @defgroup UARTEx_LIN UARTEx Local Interconnection Network mode
  114. * @{
  115. */
  116. #define UART_LIN_DISABLE (0x00000000U) /*!< Local Interconnect Network disable */
  117. #define UART_LIN_ENABLE ((uint32_t)USART_CR2_LINEN) /*!< Local Interconnect Network enable */
  118. /**
  119. * @}
  120. */
  121. /** @defgroup UARTEx_LIN_Break_Detection UARTEx LIN Break Detection
  122. * @{
  123. */
  124. #define UART_LINBREAKDETECTLENGTH_10B (0x00000000U) /*!< LIN 10-bit break detection length */
  125. #define UART_LINBREAKDETECTLENGTH_11B ((uint32_t)USART_CR2_LBDL) /*!< LIN 11-bit break detection length */
  126. /**
  127. * @}
  128. */
  129. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  130. /** @defgroup UART_Flags UARTEx Status Flags
  131. * Elements values convention: 0xXXXX
  132. * - 0xXXXX : Flag mask in the ISR register
  133. * @{
  134. */
  135. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  136. #define UART_FLAG_REACK (0x00400000U) /*!< UART receive enable acknowledge flag */
  137. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  138. #define UART_FLAG_TEACK (0x00200000U) /*!< UART transmit enable acknowledge flag */
  139. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  140. #define UART_FLAG_WUF (0x00100000U) /*!< UART wake-up from stop mode flag */
  141. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  142. #define UART_FLAG_RWU (0x00080000U) /*!< UART receiver wake-up from mute mode flag */
  143. #define UART_FLAG_SBKF (0x00040000U) /*!< UART send break flag */
  144. #define UART_FLAG_CMF (0x00020000U) /*!< UART character match flag */
  145. #define UART_FLAG_BUSY (0x00010000U) /*!< UART busy flag */
  146. #define UART_FLAG_ABRF (0x00008000U) /*!< UART auto Baud rate flag */
  147. #define UART_FLAG_ABRE (0x00004000U) /*!< UART auto Baud rate error */
  148. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  149. #define UART_FLAG_EOBF (0x00001000U) /*!< UART end of block flag */
  150. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  151. #define UART_FLAG_RTOF (0x00000800U) /*!< UART receiver timeout flag */
  152. #define UART_FLAG_CTS (0x00000400U) /*!< UART clear to send flag */
  153. #define UART_FLAG_CTSIF (0x00000200U) /*!< UART clear to send interrupt flag */
  154. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  155. #define UART_FLAG_LBDF (0x00000100U) /*!< UART LIN break detection flag (not available on F030xx devices)*/
  156. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  157. #define UART_FLAG_TXE (0x00000080U) /*!< UART transmit data register empty */
  158. #define UART_FLAG_TC (0x00000040U) /*!< UART transmission complete */
  159. #define UART_FLAG_RXNE (0x00000020U) /*!< UART read data register not empty */
  160. #define UART_FLAG_IDLE (0x00000010U) /*!< UART idle flag */
  161. #define UART_FLAG_ORE (0x00000008U) /*!< UART overrun error */
  162. #define UART_FLAG_NE (0x00000004U) /*!< UART noise error */
  163. #define UART_FLAG_FE (0x00000002U) /*!< UART frame error */
  164. #define UART_FLAG_PE (0x00000001U) /*!< UART parity error */
  165. /**
  166. * @}
  167. */
  168. /** @defgroup UART_Interrupt_definition UARTEx Interrupts Definition
  169. * Elements values convention: 000ZZZZZ0XXYYYYYb
  170. * - YYYYY : Interrupt source position in the XX register (5bits)
  171. * - XX : Interrupt source register (2bits)
  172. * - 01: CR1 register
  173. * - 10: CR2 register
  174. * - 11: CR3 register
  175. * - ZZZZZ : Flag position in the ISR register(5bits)
  176. * @{
  177. */
  178. #define UART_IT_PE (0x0028U) /*!< UART parity error interruption */
  179. #define UART_IT_TXE (0x0727U) /*!< UART transmit data register empty interruption */
  180. #define UART_IT_TC (0x0626U) /*!< UART transmission complete interruption */
  181. #define UART_IT_RXNE (0x0525U) /*!< UART read data register not empty interruption */
  182. #define UART_IT_IDLE (0x0424U) /*!< UART idle interruption */
  183. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  184. #define UART_IT_LBD (0x0846U) /*!< UART LIN break detection interruption */
  185. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  186. #define UART_IT_CTS (0x096AU) /*!< UART CTS interruption */
  187. #define UART_IT_CM (0x112EU) /*!< UART character match interruption */
  188. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  189. #define UART_IT_WUF (0x1476U) /*!< UART wake-up from stop mode interruption */
  190. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  191. /**
  192. * @}
  193. */
  194. /** @defgroup UART_IT_CLEAR_Flags UARTEx Interruption Clear Flags
  195. * @{
  196. */
  197. #define UART_CLEAR_PEF USART_ICR_PECF /*!< Parity Error Clear Flag */
  198. #define UART_CLEAR_FEF USART_ICR_FECF /*!< Framing Error Clear Flag */
  199. #define UART_CLEAR_NEF USART_ICR_NCF /*!< Noise detected Clear Flag */
  200. #define UART_CLEAR_OREF USART_ICR_ORECF /*!< Overrun Error Clear Flag */
  201. #define UART_CLEAR_IDLEF USART_ICR_IDLECF /*!< IDLE line detected Clear Flag */
  202. #define UART_CLEAR_TCF USART_ICR_TCCF /*!< Transmission Complete Clear Flag */
  203. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  204. #define UART_CLEAR_LBDF USART_ICR_LBDCF /*!< LIN Break Detection Clear Flag (not available on F030xx devices)*/
  205. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  206. #define UART_CLEAR_CTSF USART_ICR_CTSCF /*!< CTS Interrupt Clear Flag */
  207. #define UART_CLEAR_RTOF USART_ICR_RTOCF /*!< Receiver Time Out Clear Flag */
  208. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  209. #define UART_CLEAR_EOBF USART_ICR_EOBCF /*!< End Of Block Clear Flag */
  210. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  211. #define UART_CLEAR_CMF USART_ICR_CMCF /*!< Character Match Clear Flag */
  212. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  213. #define UART_CLEAR_WUF USART_ICR_WUCF /*!< Wake Up from stop mode Clear Flag */
  214. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  215. /**
  216. * @}
  217. */
  218. /** @defgroup UART_Request_Parameters UARTEx Request Parameters
  219. * @{
  220. */
  221. #define UART_AUTOBAUD_REQUEST ((uint32_t)USART_RQR_ABRRQ) /*!< Auto-Baud Rate Request */
  222. #define UART_SENDBREAK_REQUEST ((uint32_t)USART_RQR_SBKRQ) /*!< Send Break Request */
  223. #define UART_MUTE_MODE_REQUEST ((uint32_t)USART_RQR_MMRQ) /*!< Mute Mode Request */
  224. #define UART_RXDATA_FLUSH_REQUEST ((uint32_t)USART_RQR_RXFRQ) /*!< Receive Data flush Request */
  225. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  226. #define UART_TXDATA_FLUSH_REQUEST ((uint32_t)USART_RQR_TXFRQ) /*!< Transmit data flush Request */
  227. #else
  228. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  229. /**
  230. * @}
  231. */
  232. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  233. /** @defgroup UART_Stop_Mode_Enable UARTEx Advanced Feature Stop Mode Enable
  234. * @{
  235. */
  236. #define UART_ADVFEATURE_STOPMODE_DISABLE (0x00000000U) /*!< UART stop mode disable */
  237. #define UART_ADVFEATURE_STOPMODE_ENABLE ((uint32_t)USART_CR1_UESM) /*!< UART stop mode enable */
  238. /**
  239. * @}
  240. */
  241. /** @defgroup UART_WakeUp_from_Stop_Selection UART WakeUp From Stop Selection
  242. * @{
  243. */
  244. #define UART_WAKEUP_ON_ADDRESS (0x00000000U) /*!< UART wake-up on address */
  245. #define UART_WAKEUP_ON_STARTBIT ((uint32_t)USART_CR3_WUS_1) /*!< UART wake-up on start bit */
  246. #define UART_WAKEUP_ON_READDATA_NONEMPTY ((uint32_t)USART_CR3_WUS) /*!< UART wake-up on receive data register not empty */
  247. /**
  248. * @}
  249. */
  250. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  251. /**
  252. * @}
  253. */
  254. /* Exported macros ------------------------------------------------------------*/
  255. /** @defgroup UARTEx_Exported_Macros UARTEx Exported Macros
  256. * @{
  257. */
  258. /** @brief Flush the UART Data registers.
  259. * @param __HANDLE__ specifies the UART Handle.
  260. * @retval None
  261. */
  262. #if !defined(STM32F030x6) && !defined(STM32F030x8)
  263. #define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) \
  264. do{ \
  265. SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \
  266. SET_BIT((__HANDLE__)->Instance->RQR, UART_TXDATA_FLUSH_REQUEST); \
  267. } while(0)
  268. #else
  269. #define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) \
  270. do{ \
  271. SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \
  272. } while(0)
  273. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) */
  274. /**
  275. * @}
  276. */
  277. /* Private macros ------------------------------------------------------------*/
  278. /** @defgroup UARTEx_Private_Macros UARTEx Private Macros
  279. * @{
  280. */
  281. /** @brief Report the UART clock source.
  282. * @param __HANDLE__ specifies the UART Handle.
  283. * @param __CLOCKSOURCE__ output variable.
  284. * @retval UART clocking source, written in __CLOCKSOURCE__.
  285. */
  286. #if defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx)
  287. #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  288. do { \
  289. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  290. { \
  291. case RCC_USART1CLKSOURCE_PCLK1: \
  292. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  293. break; \
  294. case RCC_USART1CLKSOURCE_HSI: \
  295. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
  296. break; \
  297. case RCC_USART1CLKSOURCE_SYSCLK: \
  298. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
  299. break; \
  300. case RCC_USART1CLKSOURCE_LSE: \
  301. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
  302. break; \
  303. default: \
  304. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  305. break; \
  306. } \
  307. } while(0)
  308. #elif defined (STM32F030x8) || defined (STM32F070x6) || \
  309. defined (STM32F042x6) || defined (STM32F048xx) || \
  310. defined (STM32F051x8) || defined (STM32F058xx)
  311. #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  312. do { \
  313. if((__HANDLE__)->Instance == USART1) \
  314. { \
  315. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  316. { \
  317. case RCC_USART1CLKSOURCE_PCLK1: \
  318. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  319. break; \
  320. case RCC_USART1CLKSOURCE_HSI: \
  321. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
  322. break; \
  323. case RCC_USART1CLKSOURCE_SYSCLK: \
  324. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
  325. break; \
  326. case RCC_USART1CLKSOURCE_LSE: \
  327. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
  328. break; \
  329. default: \
  330. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  331. break; \
  332. } \
  333. } \
  334. else if((__HANDLE__)->Instance == USART2) \
  335. { \
  336. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  337. } \
  338. else \
  339. { \
  340. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  341. } \
  342. } while(0)
  343. #elif defined(STM32F070xB)
  344. #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  345. do { \
  346. if((__HANDLE__)->Instance == USART1) \
  347. { \
  348. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  349. { \
  350. case RCC_USART1CLKSOURCE_PCLK1: \
  351. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  352. break; \
  353. case RCC_USART1CLKSOURCE_HSI: \
  354. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
  355. break; \
  356. case RCC_USART1CLKSOURCE_SYSCLK: \
  357. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
  358. break; \
  359. case RCC_USART1CLKSOURCE_LSE: \
  360. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
  361. break; \
  362. default: \
  363. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  364. break; \
  365. } \
  366. } \
  367. else if((__HANDLE__)->Instance == USART2) \
  368. { \
  369. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  370. } \
  371. else if((__HANDLE__)->Instance == USART3) \
  372. { \
  373. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  374. } \
  375. else if((__HANDLE__)->Instance == USART4) \
  376. { \
  377. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  378. } \
  379. else \
  380. { \
  381. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  382. } \
  383. } while(0)
  384. #elif defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)
  385. #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  386. do { \
  387. if((__HANDLE__)->Instance == USART1) \
  388. { \
  389. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  390. { \
  391. case RCC_USART1CLKSOURCE_PCLK1: \
  392. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  393. break; \
  394. case RCC_USART1CLKSOURCE_HSI: \
  395. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
  396. break; \
  397. case RCC_USART1CLKSOURCE_SYSCLK: \
  398. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
  399. break; \
  400. case RCC_USART1CLKSOURCE_LSE: \
  401. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
  402. break; \
  403. default: \
  404. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  405. break; \
  406. } \
  407. } \
  408. else if((__HANDLE__)->Instance == USART2) \
  409. { \
  410. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  411. { \
  412. case RCC_USART2CLKSOURCE_PCLK1: \
  413. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  414. break; \
  415. case RCC_USART2CLKSOURCE_HSI: \
  416. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
  417. break; \
  418. case RCC_USART2CLKSOURCE_SYSCLK: \
  419. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
  420. break; \
  421. case RCC_USART2CLKSOURCE_LSE: \
  422. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
  423. break; \
  424. default: \
  425. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  426. break; \
  427. } \
  428. } \
  429. else if((__HANDLE__)->Instance == USART3) \
  430. { \
  431. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  432. } \
  433. else if((__HANDLE__)->Instance == USART4) \
  434. { \
  435. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  436. } \
  437. else \
  438. { \
  439. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  440. } \
  441. } while(0)
  442. #elif defined(STM32F091xC) || defined (STM32F098xx)
  443. #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  444. do { \
  445. if((__HANDLE__)->Instance == USART1) \
  446. { \
  447. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  448. { \
  449. case RCC_USART1CLKSOURCE_PCLK1: \
  450. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  451. break; \
  452. case RCC_USART1CLKSOURCE_HSI: \
  453. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
  454. break; \
  455. case RCC_USART1CLKSOURCE_SYSCLK: \
  456. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
  457. break; \
  458. case RCC_USART1CLKSOURCE_LSE: \
  459. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
  460. break; \
  461. default: \
  462. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  463. break; \
  464. } \
  465. } \
  466. else if((__HANDLE__)->Instance == USART2) \
  467. { \
  468. switch(__HAL_RCC_GET_USART2_SOURCE()) \
  469. { \
  470. case RCC_USART2CLKSOURCE_PCLK1: \
  471. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  472. break; \
  473. case RCC_USART2CLKSOURCE_HSI: \
  474. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
  475. break; \
  476. case RCC_USART2CLKSOURCE_SYSCLK: \
  477. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
  478. break; \
  479. case RCC_USART2CLKSOURCE_LSE: \
  480. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
  481. break; \
  482. default: \
  483. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  484. break; \
  485. } \
  486. } \
  487. else if((__HANDLE__)->Instance == USART3) \
  488. { \
  489. switch(__HAL_RCC_GET_USART3_SOURCE()) \
  490. { \
  491. case RCC_USART3CLKSOURCE_PCLK1: \
  492. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  493. break; \
  494. case RCC_USART3CLKSOURCE_HSI: \
  495. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
  496. break; \
  497. case RCC_USART3CLKSOURCE_SYSCLK: \
  498. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
  499. break; \
  500. case RCC_USART3CLKSOURCE_LSE: \
  501. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
  502. break; \
  503. default: \
  504. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  505. break; \
  506. } \
  507. } \
  508. else if((__HANDLE__)->Instance == USART4) \
  509. { \
  510. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  511. } \
  512. else if((__HANDLE__)->Instance == USART5) \
  513. { \
  514. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  515. } \
  516. else if((__HANDLE__)->Instance == USART6) \
  517. { \
  518. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  519. } \
  520. else if((__HANDLE__)->Instance == USART7) \
  521. { \
  522. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  523. } \
  524. else if((__HANDLE__)->Instance == USART8) \
  525. { \
  526. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  527. } \
  528. else \
  529. { \
  530. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  531. } \
  532. } while(0)
  533. #elif defined(STM32F030xC)
  534. #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
  535. do { \
  536. if((__HANDLE__)->Instance == USART1) \
  537. { \
  538. switch(__HAL_RCC_GET_USART1_SOURCE()) \
  539. { \
  540. case RCC_USART1CLKSOURCE_PCLK1: \
  541. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  542. break; \
  543. case RCC_USART1CLKSOURCE_HSI: \
  544. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
  545. break; \
  546. case RCC_USART1CLKSOURCE_SYSCLK: \
  547. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
  548. break; \
  549. case RCC_USART1CLKSOURCE_LSE: \
  550. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
  551. break; \
  552. default: \
  553. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  554. break; \
  555. } \
  556. } \
  557. else if((__HANDLE__)->Instance == USART2) \
  558. { \
  559. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  560. } \
  561. else if((__HANDLE__)->Instance == USART3) \
  562. { \
  563. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  564. } \
  565. else if((__HANDLE__)->Instance == USART4) \
  566. { \
  567. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  568. } \
  569. else if((__HANDLE__)->Instance == USART5) \
  570. { \
  571. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  572. } \
  573. else if((__HANDLE__)->Instance == USART6) \
  574. { \
  575. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
  576. } \
  577. else \
  578. { \
  579. (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
  580. } \
  581. } while(0)
  582. #endif /* defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx) */
  583. /** @brief Compute the UART mask to apply to retrieve the received data
  584. * according to the word length and to the parity bits activation.
  585. * @note If PCE = 1, the parity bit is not included in the data extracted
  586. * by the reception API().
  587. * This masking operation is not carried out in the case of
  588. * DMA transfers.
  589. * @param __HANDLE__ specifies the UART Handle.
  590. * @retval None, the mask to apply to UART RDR register is stored in (__HANDLE__)->Mask field.
  591. */
  592. #if defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F070x6) || \
  593. defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || defined (STM32F070xB) || \
  594. defined (STM32F091xC) || defined (STM32F098xx) || defined (STM32F030xC)
  595. #define UART_MASK_COMPUTATION(__HANDLE__) \
  596. do { \
  597. if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
  598. { \
  599. if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
  600. { \
  601. (__HANDLE__)->Mask = 0x01FFU; \
  602. } \
  603. else \
  604. { \
  605. (__HANDLE__)->Mask = 0x00FFU; \
  606. } \
  607. } \
  608. else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
  609. { \
  610. if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
  611. { \
  612. (__HANDLE__)->Mask = 0x00FFU; \
  613. } \
  614. else \
  615. { \
  616. (__HANDLE__)->Mask = 0x007FU; \
  617. } \
  618. } \
  619. else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
  620. { \
  621. if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
  622. { \
  623. (__HANDLE__)->Mask = 0x007FU; \
  624. } \
  625. else \
  626. { \
  627. (__HANDLE__)->Mask = 0x003FU; \
  628. } \
  629. } \
  630. } while(0)
  631. #else
  632. #define UART_MASK_COMPUTATION(__HANDLE__) \
  633. do { \
  634. if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
  635. { \
  636. if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
  637. { \
  638. (__HANDLE__)->Mask = 0x01FFU; \
  639. } \
  640. else \
  641. { \
  642. (__HANDLE__)->Mask = 0x00FFU; \
  643. } \
  644. } \
  645. else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
  646. { \
  647. if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
  648. { \
  649. (__HANDLE__)->Mask = 0x00FFU; \
  650. } \
  651. else \
  652. { \
  653. (__HANDLE__)->Mask = 0x007FU; \
  654. } \
  655. } \
  656. } while(0)
  657. #endif /* defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F070x6) || \
  658. defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || defined (STM32F070xB) || \
  659. defined (STM32F091xC) || defined (STM32F098xx) || defined (STM32F030xC) */
  660. /**
  661. * @brief Ensure that UART frame length is valid.
  662. * @param __LENGTH__ UART frame length.
  663. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
  664. */
  665. #if defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F070x6) || \
  666. defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || defined (STM32F070xB) || \
  667. defined (STM32F091xC) || defined (STM32F098xx) || defined (STM32F030xC)
  668. #define IS_UART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == UART_WORDLENGTH_7B) || \
  669. ((__LENGTH__) == UART_WORDLENGTH_8B) || \
  670. ((__LENGTH__) == UART_WORDLENGTH_9B))
  671. #else
  672. #define IS_UART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == UART_WORDLENGTH_8B) || \
  673. ((__LENGTH__) == UART_WORDLENGTH_9B))
  674. #endif /* defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F070x6) || \
  675. defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || defined (STM32F070xB) || \
  676. defined (STM32F091xC) || defined (STM32F098xx) || defined (STM32F030xC) */
  677. /**
  678. * @brief Ensure that UART auto Baud rate detection mode is valid.
  679. * @param __MODE__ UART auto Baud rate detection mode.
  680. * @retval SET (__MODE__ is valid) or RESET (__MODE__ is invalid)
  681. */
  682. #if defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F070x6) || \
  683. defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || defined (STM32F070xB) || \
  684. defined (STM32F091xC) || defined (STM32F098xx) || defined (STM32F030xC)
  685. #define IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(__MODE__) (((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT) || \
  686. ((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE) || \
  687. ((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ON0X7FFRAME) || \
  688. ((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ON0X55FRAME))
  689. #else
  690. #define IS_UART_ADVFEATURE_AUTOBAUDRATEMODE(__MODE__) (((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT) || \
  691. ((__MODE__) == UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE))
  692. #endif /* defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F070x6) || \
  693. defined (STM32F071xB) || defined (STM32F072xB) || defined (STM32F078xx) || defined (STM32F070xB) || \
  694. defined (STM32F091xC) || defined (STM32F098xx) || defined (STM32F030xC) */
  695. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  696. /**
  697. * @brief Ensure that UART LIN state is valid.
  698. * @param __LIN__ UART LIN state.
  699. * @retval SET (__LIN__ is valid) or RESET (__LIN__ is invalid)
  700. */
  701. #define IS_UART_LIN(__LIN__) (((__LIN__) == UART_LIN_DISABLE) || \
  702. ((__LIN__) == UART_LIN_ENABLE))
  703. /**
  704. * @brief Ensure that UART LIN break detection length is valid.
  705. * @param __LENGTH__ UART LIN break detection length.
  706. * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
  707. */
  708. #define IS_UART_LIN_BREAK_DETECT_LENGTH(__LENGTH__) (((__LENGTH__) == UART_LINBREAKDETECTLENGTH_10B) || \
  709. ((__LENGTH__) == UART_LINBREAKDETECTLENGTH_11B))
  710. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  711. /**
  712. * @brief Ensure that UART request parameter is valid.
  713. * @param __PARAM__ UART request parameter.
  714. * @retval SET (__PARAM__ is valid) or RESET (__PARAM__ is invalid)
  715. */
  716. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  717. #define IS_UART_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == UART_AUTOBAUD_REQUEST) || \
  718. ((__PARAM__) == UART_SENDBREAK_REQUEST) || \
  719. ((__PARAM__) == UART_MUTE_MODE_REQUEST) || \
  720. ((__PARAM__) == UART_RXDATA_FLUSH_REQUEST) || \
  721. ((__PARAM__) == UART_TXDATA_FLUSH_REQUEST))
  722. #else
  723. #define IS_UART_REQUEST_PARAMETER(__PARAM__) (((__PARAM__) == UART_AUTOBAUD_REQUEST) || \
  724. ((__PARAM__) == UART_SENDBREAK_REQUEST) || \
  725. ((__PARAM__) == UART_MUTE_MODE_REQUEST) || \
  726. ((__PARAM__) == UART_RXDATA_FLUSH_REQUEST))
  727. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  728. #if !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC)
  729. /**
  730. * @brief Ensure that UART stop mode state is valid.
  731. * @param __STOPMODE__ UART stop mode state.
  732. * @retval SET (__STOPMODE__ is valid) or RESET (__STOPMODE__ is invalid)
  733. */
  734. #define IS_UART_ADVFEATURE_STOPMODE(__STOPMODE__) (((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_DISABLE) || \
  735. ((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_ENABLE))
  736. /**
  737. * @brief Ensure that UART wake-up selection is valid.
  738. * @param __WAKE__ UART wake-up selection.
  739. * @retval SET (__WAKE__ is valid) or RESET (__WAKE__ is invalid)
  740. */
  741. #define IS_UART_WAKEUP_SELECTION(__WAKE__) (((__WAKE__) == UART_WAKEUP_ON_ADDRESS) || \
  742. ((__WAKE__) == UART_WAKEUP_ON_STARTBIT) || \
  743. ((__WAKE__) == UART_WAKEUP_ON_READDATA_NONEMPTY))
  744. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8) && !defined(STM32F070x6) && !defined(STM32F070xB) && !defined(STM32F030xC) */
  745. /**
  746. * @}
  747. */
  748. /* Exported functions --------------------------------------------------------*/
  749. /** @addtogroup UARTEx_Exported_Functions
  750. * @{
  751. */
  752. /** @addtogroup UARTEx_Exported_Functions_Group1
  753. * @brief Extended Initialization and Configuration Functions
  754. * @{
  755. */
  756. /* Initialization and de-initialization functions ****************************/
  757. HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime);
  758. #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
  759. HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength);
  760. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
  761. /**
  762. * @}
  763. */
  764. /** @addtogroup UARTEx_Exported_Functions_Group2
  765. * @brief Extended UART Interrupt handling function
  766. * @{
  767. */
  768. /* IO operation functions ***************************************************/
  769. #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
  770. void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart);
  771. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
  772. /**
  773. * @}
  774. */
  775. /** @addtogroup UARTEx_Exported_Functions_Group3
  776. * @brief Extended Peripheral Control functions
  777. * @{
  778. */
  779. /* Peripheral Control functions **********************************************/
  780. HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength);
  781. #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6) && !defined(STM32F030xC)
  782. HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
  783. HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart);
  784. HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart);
  785. HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart);
  786. #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
  787. /**
  788. * @}
  789. */
  790. /* Peripheral State functions ************************************************/
  791. /**
  792. * @}
  793. */
  794. /* Private functions ---------------------------------------------------------*/
  795. /**
  796. * @}
  797. */
  798. /**
  799. * @}
  800. */
  801. #ifdef __cplusplus
  802. }
  803. #endif
  804. #endif /* __STM32F0xx_HAL_UART_EX_H */
  805. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/