TUKS MCU Introductory course / TUKS-COURSE-TIMER
Committer:
elmot
Date:
Fri Feb 24 21:13:56 2017 +0000
Revision:
1:d0dfbce63a89
Ready-to-copy

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elmot 1:d0dfbce63a89 1 /**
elmot 1:d0dfbce63a89 2 ******************************************************************************
elmot 1:d0dfbce63a89 3 * @file stm32l4xx_hal_uart_ex.h
elmot 1:d0dfbce63a89 4 * @author MCD Application Team
elmot 1:d0dfbce63a89 5 * @version V1.5.1
elmot 1:d0dfbce63a89 6 * @date 31-May-2016
elmot 1:d0dfbce63a89 7 * @brief Header file of UART HAL Extended module.
elmot 1:d0dfbce63a89 8 ******************************************************************************
elmot 1:d0dfbce63a89 9 * @attention
elmot 1:d0dfbce63a89 10 *
elmot 1:d0dfbce63a89 11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
elmot 1:d0dfbce63a89 12 *
elmot 1:d0dfbce63a89 13 * Redistribution and use in source and binary forms, with or without modification,
elmot 1:d0dfbce63a89 14 * are permitted provided that the following conditions are met:
elmot 1:d0dfbce63a89 15 * 1. Redistributions of source code must retain the above copyright notice,
elmot 1:d0dfbce63a89 16 * this list of conditions and the following disclaimer.
elmot 1:d0dfbce63a89 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
elmot 1:d0dfbce63a89 18 * this list of conditions and the following disclaimer in the documentation
elmot 1:d0dfbce63a89 19 * and/or other materials provided with the distribution.
elmot 1:d0dfbce63a89 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
elmot 1:d0dfbce63a89 21 * may be used to endorse or promote products derived from this software
elmot 1:d0dfbce63a89 22 * without specific prior written permission.
elmot 1:d0dfbce63a89 23 *
elmot 1:d0dfbce63a89 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
elmot 1:d0dfbce63a89 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
elmot 1:d0dfbce63a89 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
elmot 1:d0dfbce63a89 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
elmot 1:d0dfbce63a89 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
elmot 1:d0dfbce63a89 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
elmot 1:d0dfbce63a89 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
elmot 1:d0dfbce63a89 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
elmot 1:d0dfbce63a89 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
elmot 1:d0dfbce63a89 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
elmot 1:d0dfbce63a89 34 *
elmot 1:d0dfbce63a89 35 ******************************************************************************
elmot 1:d0dfbce63a89 36 */
elmot 1:d0dfbce63a89 37
elmot 1:d0dfbce63a89 38 /* Define to prevent recursive inclusion -------------------------------------*/
elmot 1:d0dfbce63a89 39 #ifndef __STM32L4xx_HAL_UART_EX_H
elmot 1:d0dfbce63a89 40 #define __STM32L4xx_HAL_UART_EX_H
elmot 1:d0dfbce63a89 41
elmot 1:d0dfbce63a89 42 #ifdef __cplusplus
elmot 1:d0dfbce63a89 43 extern "C" {
elmot 1:d0dfbce63a89 44 #endif
elmot 1:d0dfbce63a89 45
elmot 1:d0dfbce63a89 46 /* Includes ------------------------------------------------------------------*/
elmot 1:d0dfbce63a89 47 #include "stm32l4xx_hal_def.h"
elmot 1:d0dfbce63a89 48
elmot 1:d0dfbce63a89 49 /** @addtogroup STM32L4xx_HAL_Driver
elmot 1:d0dfbce63a89 50 * @{
elmot 1:d0dfbce63a89 51 */
elmot 1:d0dfbce63a89 52
elmot 1:d0dfbce63a89 53 /** @addtogroup UARTEx
elmot 1:d0dfbce63a89 54 * @{
elmot 1:d0dfbce63a89 55 */
elmot 1:d0dfbce63a89 56
elmot 1:d0dfbce63a89 57 /* Exported types ------------------------------------------------------------*/
elmot 1:d0dfbce63a89 58 /** @defgroup UARTEx_Exported_Types UARTEx Exported Types
elmot 1:d0dfbce63a89 59 * @{
elmot 1:d0dfbce63a89 60 */
elmot 1:d0dfbce63a89 61
elmot 1:d0dfbce63a89 62 /**
elmot 1:d0dfbce63a89 63 * @brief UART wake up from stop mode parameters
elmot 1:d0dfbce63a89 64 */
elmot 1:d0dfbce63a89 65 typedef struct
elmot 1:d0dfbce63a89 66 {
elmot 1:d0dfbce63a89 67 uint32_t WakeUpEvent; /*!< Specifies which event will activat the Wakeup from Stop mode flag (WUF).
elmot 1:d0dfbce63a89 68 This parameter can be a value of @ref UART_WakeUp_from_Stop_Selection.
elmot 1:d0dfbce63a89 69 If set to UART_WAKEUP_ON_ADDRESS, the two other fields below must
elmot 1:d0dfbce63a89 70 be filled up. */
elmot 1:d0dfbce63a89 71
elmot 1:d0dfbce63a89 72 uint16_t AddressLength; /*!< Specifies whether the address is 4 or 7-bit long.
elmot 1:d0dfbce63a89 73 This parameter can be a value of @ref UARTEx_WakeUp_Address_Length. */
elmot 1:d0dfbce63a89 74
elmot 1:d0dfbce63a89 75 uint8_t Address; /*!< UART/USART node address (7-bit long max). */
elmot 1:d0dfbce63a89 76 } UART_WakeUpTypeDef;
elmot 1:d0dfbce63a89 77
elmot 1:d0dfbce63a89 78 /**
elmot 1:d0dfbce63a89 79 * @}
elmot 1:d0dfbce63a89 80 */
elmot 1:d0dfbce63a89 81
elmot 1:d0dfbce63a89 82 /* Exported constants --------------------------------------------------------*/
elmot 1:d0dfbce63a89 83 /** @defgroup UARTEx_Exported_Constants UARTEx Exported Constants
elmot 1:d0dfbce63a89 84 * @{
elmot 1:d0dfbce63a89 85 */
elmot 1:d0dfbce63a89 86
elmot 1:d0dfbce63a89 87 /** @defgroup UARTEx_Word_Length UART Word Length
elmot 1:d0dfbce63a89 88 * @{
elmot 1:d0dfbce63a89 89 */
elmot 1:d0dfbce63a89 90 #define UART_WORDLENGTH_7B ((uint32_t)USART_CR1_M1) /*!< 7-bit long UART frame */
elmot 1:d0dfbce63a89 91 #define UART_WORDLENGTH_8B ((uint32_t)0x00000000) /*!< 8-bit long UART frame */
elmot 1:d0dfbce63a89 92 #define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M0) /*!< 9-bit long UART frame */
elmot 1:d0dfbce63a89 93 /**
elmot 1:d0dfbce63a89 94 * @}
elmot 1:d0dfbce63a89 95 */
elmot 1:d0dfbce63a89 96
elmot 1:d0dfbce63a89 97 /** @defgroup UARTEx_WakeUp_Address_Length UART Extended WakeUp Address Length
elmot 1:d0dfbce63a89 98 * @{
elmot 1:d0dfbce63a89 99 */
elmot 1:d0dfbce63a89 100 #define UART_ADDRESS_DETECT_4B ((uint32_t)0x00000000) /*!< 4-bit long wake-up address */
elmot 1:d0dfbce63a89 101 #define UART_ADDRESS_DETECT_7B ((uint32_t)USART_CR2_ADDM7) /*!< 7-bit long wake-up address */
elmot 1:d0dfbce63a89 102 /**
elmot 1:d0dfbce63a89 103 * @}
elmot 1:d0dfbce63a89 104 */
elmot 1:d0dfbce63a89 105
elmot 1:d0dfbce63a89 106 /**
elmot 1:d0dfbce63a89 107 * @}
elmot 1:d0dfbce63a89 108 */
elmot 1:d0dfbce63a89 109
elmot 1:d0dfbce63a89 110 /* Exported macros -----------------------------------------------------------*/
elmot 1:d0dfbce63a89 111 /* Exported functions --------------------------------------------------------*/
elmot 1:d0dfbce63a89 112 /** @addtogroup UARTEx_Exported_Functions
elmot 1:d0dfbce63a89 113 * @{
elmot 1:d0dfbce63a89 114 */
elmot 1:d0dfbce63a89 115
elmot 1:d0dfbce63a89 116 /** @addtogroup UARTEx_Exported_Functions_Group1
elmot 1:d0dfbce63a89 117 * @{
elmot 1:d0dfbce63a89 118 */
elmot 1:d0dfbce63a89 119
elmot 1:d0dfbce63a89 120 /* Initialization and de-initialization functions ****************************/
elmot 1:d0dfbce63a89 121 HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime);
elmot 1:d0dfbce63a89 122
elmot 1:d0dfbce63a89 123 /**
elmot 1:d0dfbce63a89 124 * @}
elmot 1:d0dfbce63a89 125 */
elmot 1:d0dfbce63a89 126
elmot 1:d0dfbce63a89 127 /* IO operation functions *****************************************************/
elmot 1:d0dfbce63a89 128
elmot 1:d0dfbce63a89 129 /** @addtogroup UARTEx_Exported_Functions_Group3
elmot 1:d0dfbce63a89 130 * @{
elmot 1:d0dfbce63a89 131 */
elmot 1:d0dfbce63a89 132
elmot 1:d0dfbce63a89 133 /* Peripheral Control functions **********************************************/
elmot 1:d0dfbce63a89 134 HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
elmot 1:d0dfbce63a89 135 HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart);
elmot 1:d0dfbce63a89 136 HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart);
elmot 1:d0dfbce63a89 137 HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength);
elmot 1:d0dfbce63a89 138 void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart);
elmot 1:d0dfbce63a89 139
elmot 1:d0dfbce63a89 140 /**
elmot 1:d0dfbce63a89 141 * @}
elmot 1:d0dfbce63a89 142 */
elmot 1:d0dfbce63a89 143
elmot 1:d0dfbce63a89 144 /**
elmot 1:d0dfbce63a89 145 * @}
elmot 1:d0dfbce63a89 146 */
elmot 1:d0dfbce63a89 147
elmot 1:d0dfbce63a89 148 /* Private macros ------------------------------------------------------------*/
elmot 1:d0dfbce63a89 149 /** @defgroup UARTEx_Private_Macros UARTEx Private Macros
elmot 1:d0dfbce63a89 150 * @{
elmot 1:d0dfbce63a89 151 */
elmot 1:d0dfbce63a89 152
elmot 1:d0dfbce63a89 153 /** @brief Report the UART clock source.
elmot 1:d0dfbce63a89 154 * @param __HANDLE__: specifies the UART Handle.
elmot 1:d0dfbce63a89 155 * @param __CLOCKSOURCE__: output variable.
elmot 1:d0dfbce63a89 156 * @retval UART clocking source, written in __CLOCKSOURCE__.
elmot 1:d0dfbce63a89 157 */
elmot 1:d0dfbce63a89 158 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx)
elmot 1:d0dfbce63a89 159 #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
elmot 1:d0dfbce63a89 160 do { \
elmot 1:d0dfbce63a89 161 if((__HANDLE__)->Instance == USART1) \
elmot 1:d0dfbce63a89 162 { \
elmot 1:d0dfbce63a89 163 switch(__HAL_RCC_GET_USART1_SOURCE()) \
elmot 1:d0dfbce63a89 164 { \
elmot 1:d0dfbce63a89 165 case RCC_USART1CLKSOURCE_PCLK2: \
elmot 1:d0dfbce63a89 166 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
elmot 1:d0dfbce63a89 167 break; \
elmot 1:d0dfbce63a89 168 case RCC_USART1CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 169 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 170 break; \
elmot 1:d0dfbce63a89 171 case RCC_USART1CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 172 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 173 break; \
elmot 1:d0dfbce63a89 174 case RCC_USART1CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 175 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 176 break; \
elmot 1:d0dfbce63a89 177 default: \
elmot 1:d0dfbce63a89 178 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 179 break; \
elmot 1:d0dfbce63a89 180 } \
elmot 1:d0dfbce63a89 181 } \
elmot 1:d0dfbce63a89 182 else if((__HANDLE__)->Instance == USART2) \
elmot 1:d0dfbce63a89 183 { \
elmot 1:d0dfbce63a89 184 switch(__HAL_RCC_GET_USART2_SOURCE()) \
elmot 1:d0dfbce63a89 185 { \
elmot 1:d0dfbce63a89 186 case RCC_USART2CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 187 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 188 break; \
elmot 1:d0dfbce63a89 189 case RCC_USART2CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 190 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 191 break; \
elmot 1:d0dfbce63a89 192 case RCC_USART2CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 193 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 194 break; \
elmot 1:d0dfbce63a89 195 case RCC_USART2CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 196 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 197 break; \
elmot 1:d0dfbce63a89 198 default: \
elmot 1:d0dfbce63a89 199 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 200 break; \
elmot 1:d0dfbce63a89 201 } \
elmot 1:d0dfbce63a89 202 } \
elmot 1:d0dfbce63a89 203 else if((__HANDLE__)->Instance == USART3) \
elmot 1:d0dfbce63a89 204 { \
elmot 1:d0dfbce63a89 205 switch(__HAL_RCC_GET_USART3_SOURCE()) \
elmot 1:d0dfbce63a89 206 { \
elmot 1:d0dfbce63a89 207 case RCC_USART3CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 208 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 209 break; \
elmot 1:d0dfbce63a89 210 case RCC_USART3CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 211 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 212 break; \
elmot 1:d0dfbce63a89 213 case RCC_USART3CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 214 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 215 break; \
elmot 1:d0dfbce63a89 216 case RCC_USART3CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 217 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 218 break; \
elmot 1:d0dfbce63a89 219 default: \
elmot 1:d0dfbce63a89 220 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 221 break; \
elmot 1:d0dfbce63a89 222 } \
elmot 1:d0dfbce63a89 223 } \
elmot 1:d0dfbce63a89 224 else if((__HANDLE__)->Instance == UART4) \
elmot 1:d0dfbce63a89 225 { \
elmot 1:d0dfbce63a89 226 switch(__HAL_RCC_GET_UART4_SOURCE()) \
elmot 1:d0dfbce63a89 227 { \
elmot 1:d0dfbce63a89 228 case RCC_UART4CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 229 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 230 break; \
elmot 1:d0dfbce63a89 231 case RCC_UART4CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 232 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 233 break; \
elmot 1:d0dfbce63a89 234 case RCC_UART4CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 235 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 236 break; \
elmot 1:d0dfbce63a89 237 case RCC_UART4CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 238 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 239 break; \
elmot 1:d0dfbce63a89 240 default: \
elmot 1:d0dfbce63a89 241 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 242 break; \
elmot 1:d0dfbce63a89 243 } \
elmot 1:d0dfbce63a89 244 } \
elmot 1:d0dfbce63a89 245 else if ((__HANDLE__)->Instance == UART5) \
elmot 1:d0dfbce63a89 246 { \
elmot 1:d0dfbce63a89 247 switch(__HAL_RCC_GET_UART5_SOURCE()) \
elmot 1:d0dfbce63a89 248 { \
elmot 1:d0dfbce63a89 249 case RCC_UART5CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 250 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 251 break; \
elmot 1:d0dfbce63a89 252 case RCC_UART5CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 253 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 254 break; \
elmot 1:d0dfbce63a89 255 case RCC_UART5CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 256 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 257 break; \
elmot 1:d0dfbce63a89 258 case RCC_UART5CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 259 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 260 break; \
elmot 1:d0dfbce63a89 261 default: \
elmot 1:d0dfbce63a89 262 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 263 break; \
elmot 1:d0dfbce63a89 264 } \
elmot 1:d0dfbce63a89 265 } \
elmot 1:d0dfbce63a89 266 else if((__HANDLE__)->Instance == LPUART1) \
elmot 1:d0dfbce63a89 267 { \
elmot 1:d0dfbce63a89 268 switch(__HAL_RCC_GET_LPUART1_SOURCE()) \
elmot 1:d0dfbce63a89 269 { \
elmot 1:d0dfbce63a89 270 case RCC_LPUART1CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 271 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 272 break; \
elmot 1:d0dfbce63a89 273 case RCC_LPUART1CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 274 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 275 break; \
elmot 1:d0dfbce63a89 276 case RCC_LPUART1CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 277 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 278 break; \
elmot 1:d0dfbce63a89 279 case RCC_LPUART1CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 280 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 281 break; \
elmot 1:d0dfbce63a89 282 default: \
elmot 1:d0dfbce63a89 283 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 284 break; \
elmot 1:d0dfbce63a89 285 } \
elmot 1:d0dfbce63a89 286 } \
elmot 1:d0dfbce63a89 287 } while(0)
elmot 1:d0dfbce63a89 288 #elif defined (STM32L431xx) || defined (STM32L433xx) || defined (STM32L443xx)
elmot 1:d0dfbce63a89 289 #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
elmot 1:d0dfbce63a89 290 do { \
elmot 1:d0dfbce63a89 291 if((__HANDLE__)->Instance == USART1) \
elmot 1:d0dfbce63a89 292 { \
elmot 1:d0dfbce63a89 293 switch(__HAL_RCC_GET_USART1_SOURCE()) \
elmot 1:d0dfbce63a89 294 { \
elmot 1:d0dfbce63a89 295 case RCC_USART1CLKSOURCE_PCLK2: \
elmot 1:d0dfbce63a89 296 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
elmot 1:d0dfbce63a89 297 break; \
elmot 1:d0dfbce63a89 298 case RCC_USART1CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 299 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 300 break; \
elmot 1:d0dfbce63a89 301 case RCC_USART1CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 302 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 303 break; \
elmot 1:d0dfbce63a89 304 case RCC_USART1CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 305 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 306 break; \
elmot 1:d0dfbce63a89 307 default: \
elmot 1:d0dfbce63a89 308 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 309 break; \
elmot 1:d0dfbce63a89 310 } \
elmot 1:d0dfbce63a89 311 } \
elmot 1:d0dfbce63a89 312 else if((__HANDLE__)->Instance == USART2) \
elmot 1:d0dfbce63a89 313 { \
elmot 1:d0dfbce63a89 314 switch(__HAL_RCC_GET_USART2_SOURCE()) \
elmot 1:d0dfbce63a89 315 { \
elmot 1:d0dfbce63a89 316 case RCC_USART2CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 317 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 318 break; \
elmot 1:d0dfbce63a89 319 case RCC_USART2CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 320 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 321 break; \
elmot 1:d0dfbce63a89 322 case RCC_USART2CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 323 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 324 break; \
elmot 1:d0dfbce63a89 325 case RCC_USART2CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 326 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 327 break; \
elmot 1:d0dfbce63a89 328 default: \
elmot 1:d0dfbce63a89 329 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 330 break; \
elmot 1:d0dfbce63a89 331 } \
elmot 1:d0dfbce63a89 332 } \
elmot 1:d0dfbce63a89 333 else if((__HANDLE__)->Instance == USART3) \
elmot 1:d0dfbce63a89 334 { \
elmot 1:d0dfbce63a89 335 switch(__HAL_RCC_GET_USART3_SOURCE()) \
elmot 1:d0dfbce63a89 336 { \
elmot 1:d0dfbce63a89 337 case RCC_USART3CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 338 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 339 break; \
elmot 1:d0dfbce63a89 340 case RCC_USART3CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 341 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 342 break; \
elmot 1:d0dfbce63a89 343 case RCC_USART3CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 344 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 345 break; \
elmot 1:d0dfbce63a89 346 case RCC_USART3CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 347 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 348 break; \
elmot 1:d0dfbce63a89 349 default: \
elmot 1:d0dfbce63a89 350 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 351 break; \
elmot 1:d0dfbce63a89 352 } \
elmot 1:d0dfbce63a89 353 } \
elmot 1:d0dfbce63a89 354 else if((__HANDLE__)->Instance == LPUART1) \
elmot 1:d0dfbce63a89 355 { \
elmot 1:d0dfbce63a89 356 switch(__HAL_RCC_GET_LPUART1_SOURCE()) \
elmot 1:d0dfbce63a89 357 { \
elmot 1:d0dfbce63a89 358 case RCC_LPUART1CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 359 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 360 break; \
elmot 1:d0dfbce63a89 361 case RCC_LPUART1CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 362 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 363 break; \
elmot 1:d0dfbce63a89 364 case RCC_LPUART1CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 365 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 366 break; \
elmot 1:d0dfbce63a89 367 case RCC_LPUART1CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 368 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 369 break; \
elmot 1:d0dfbce63a89 370 default: \
elmot 1:d0dfbce63a89 371 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 372 break; \
elmot 1:d0dfbce63a89 373 } \
elmot 1:d0dfbce63a89 374 } \
elmot 1:d0dfbce63a89 375 } while(0)
elmot 1:d0dfbce63a89 376 #elif defined (STM32L432xx) || defined (STM32L442xx)
elmot 1:d0dfbce63a89 377 #define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
elmot 1:d0dfbce63a89 378 do { \
elmot 1:d0dfbce63a89 379 if((__HANDLE__)->Instance == USART1) \
elmot 1:d0dfbce63a89 380 { \
elmot 1:d0dfbce63a89 381 switch(__HAL_RCC_GET_USART1_SOURCE()) \
elmot 1:d0dfbce63a89 382 { \
elmot 1:d0dfbce63a89 383 case RCC_USART1CLKSOURCE_PCLK2: \
elmot 1:d0dfbce63a89 384 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
elmot 1:d0dfbce63a89 385 break; \
elmot 1:d0dfbce63a89 386 case RCC_USART1CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 387 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 388 break; \
elmot 1:d0dfbce63a89 389 case RCC_USART1CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 390 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 391 break; \
elmot 1:d0dfbce63a89 392 case RCC_USART1CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 393 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 394 break; \
elmot 1:d0dfbce63a89 395 default: \
elmot 1:d0dfbce63a89 396 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 397 break; \
elmot 1:d0dfbce63a89 398 } \
elmot 1:d0dfbce63a89 399 } \
elmot 1:d0dfbce63a89 400 else if((__HANDLE__)->Instance == USART2) \
elmot 1:d0dfbce63a89 401 { \
elmot 1:d0dfbce63a89 402 switch(__HAL_RCC_GET_USART2_SOURCE()) \
elmot 1:d0dfbce63a89 403 { \
elmot 1:d0dfbce63a89 404 case RCC_USART2CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 405 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 406 break; \
elmot 1:d0dfbce63a89 407 case RCC_USART2CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 408 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 409 break; \
elmot 1:d0dfbce63a89 410 case RCC_USART2CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 411 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 412 break; \
elmot 1:d0dfbce63a89 413 case RCC_USART2CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 414 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 415 break; \
elmot 1:d0dfbce63a89 416 default: \
elmot 1:d0dfbce63a89 417 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 418 break; \
elmot 1:d0dfbce63a89 419 } \
elmot 1:d0dfbce63a89 420 } \
elmot 1:d0dfbce63a89 421 else if((__HANDLE__)->Instance == LPUART1) \
elmot 1:d0dfbce63a89 422 { \
elmot 1:d0dfbce63a89 423 switch(__HAL_RCC_GET_LPUART1_SOURCE()) \
elmot 1:d0dfbce63a89 424 { \
elmot 1:d0dfbce63a89 425 case RCC_LPUART1CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 426 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 427 break; \
elmot 1:d0dfbce63a89 428 case RCC_LPUART1CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 429 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 430 break; \
elmot 1:d0dfbce63a89 431 case RCC_LPUART1CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 432 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 433 break; \
elmot 1:d0dfbce63a89 434 case RCC_LPUART1CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 435 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 436 break; \
elmot 1:d0dfbce63a89 437 default: \
elmot 1:d0dfbce63a89 438 (__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 439 break; \
elmot 1:d0dfbce63a89 440 } \
elmot 1:d0dfbce63a89 441 } \
elmot 1:d0dfbce63a89 442 } while(0)
elmot 1:d0dfbce63a89 443 #endif
elmot 1:d0dfbce63a89 444
elmot 1:d0dfbce63a89 445 /** @brief Report the UART mask to apply to retrieve the received data
elmot 1:d0dfbce63a89 446 * according to the word length and to the parity bits activation.
elmot 1:d0dfbce63a89 447 * @note If PCE = 1, the parity bit is not included in the data extracted
elmot 1:d0dfbce63a89 448 * by the reception API().
elmot 1:d0dfbce63a89 449 * This masking operation is not carried out in the case of
elmot 1:d0dfbce63a89 450 * DMA transfers.
elmot 1:d0dfbce63a89 451 * @param __HANDLE__: specifies the UART Handle.
elmot 1:d0dfbce63a89 452 * @retval None, the mask to apply to UART RDR register is stored in (__HANDLE__)->Mask field.
elmot 1:d0dfbce63a89 453 */
elmot 1:d0dfbce63a89 454 #define UART_MASK_COMPUTATION(__HANDLE__) \
elmot 1:d0dfbce63a89 455 do { \
elmot 1:d0dfbce63a89 456 if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
elmot 1:d0dfbce63a89 457 { \
elmot 1:d0dfbce63a89 458 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
elmot 1:d0dfbce63a89 459 { \
elmot 1:d0dfbce63a89 460 (__HANDLE__)->Mask = 0x01FF ; \
elmot 1:d0dfbce63a89 461 } \
elmot 1:d0dfbce63a89 462 else \
elmot 1:d0dfbce63a89 463 { \
elmot 1:d0dfbce63a89 464 (__HANDLE__)->Mask = 0x00FF ; \
elmot 1:d0dfbce63a89 465 } \
elmot 1:d0dfbce63a89 466 } \
elmot 1:d0dfbce63a89 467 else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
elmot 1:d0dfbce63a89 468 { \
elmot 1:d0dfbce63a89 469 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
elmot 1:d0dfbce63a89 470 { \
elmot 1:d0dfbce63a89 471 (__HANDLE__)->Mask = 0x00FF ; \
elmot 1:d0dfbce63a89 472 } \
elmot 1:d0dfbce63a89 473 else \
elmot 1:d0dfbce63a89 474 { \
elmot 1:d0dfbce63a89 475 (__HANDLE__)->Mask = 0x007F ; \
elmot 1:d0dfbce63a89 476 } \
elmot 1:d0dfbce63a89 477 } \
elmot 1:d0dfbce63a89 478 else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
elmot 1:d0dfbce63a89 479 { \
elmot 1:d0dfbce63a89 480 if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
elmot 1:d0dfbce63a89 481 { \
elmot 1:d0dfbce63a89 482 (__HANDLE__)->Mask = 0x007F ; \
elmot 1:d0dfbce63a89 483 } \
elmot 1:d0dfbce63a89 484 else \
elmot 1:d0dfbce63a89 485 { \
elmot 1:d0dfbce63a89 486 (__HANDLE__)->Mask = 0x003F ; \
elmot 1:d0dfbce63a89 487 } \
elmot 1:d0dfbce63a89 488 } \
elmot 1:d0dfbce63a89 489 } while(0)
elmot 1:d0dfbce63a89 490
elmot 1:d0dfbce63a89 491
elmot 1:d0dfbce63a89 492 /**
elmot 1:d0dfbce63a89 493 * @brief Ensure that UART frame length is valid.
elmot 1:d0dfbce63a89 494 * @param __LENGTH__: UART frame length.
elmot 1:d0dfbce63a89 495 * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
elmot 1:d0dfbce63a89 496 */
elmot 1:d0dfbce63a89 497 #define IS_UART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == UART_WORDLENGTH_7B) || \
elmot 1:d0dfbce63a89 498 ((__LENGTH__) == UART_WORDLENGTH_8B) || \
elmot 1:d0dfbce63a89 499 ((__LENGTH__) == UART_WORDLENGTH_9B))
elmot 1:d0dfbce63a89 500
elmot 1:d0dfbce63a89 501 /**
elmot 1:d0dfbce63a89 502 * @brief Ensure that UART wake-up address length is valid.
elmot 1:d0dfbce63a89 503 * @param __ADDRESS__: UART wake-up address length.
elmot 1:d0dfbce63a89 504 * @retval SET (__ADDRESS__ is valid) or RESET (__ADDRESS__ is invalid)
elmot 1:d0dfbce63a89 505 */
elmot 1:d0dfbce63a89 506 #define IS_UART_ADDRESSLENGTH_DETECT(__ADDRESS__) (((__ADDRESS__) == UART_ADDRESS_DETECT_4B) || \
elmot 1:d0dfbce63a89 507 ((__ADDRESS__) == UART_ADDRESS_DETECT_7B))
elmot 1:d0dfbce63a89 508
elmot 1:d0dfbce63a89 509 /**
elmot 1:d0dfbce63a89 510 * @}
elmot 1:d0dfbce63a89 511 */
elmot 1:d0dfbce63a89 512
elmot 1:d0dfbce63a89 513 /* Private functions ---------------------------------------------------------*/
elmot 1:d0dfbce63a89 514
elmot 1:d0dfbce63a89 515 /**
elmot 1:d0dfbce63a89 516 * @}
elmot 1:d0dfbce63a89 517 */
elmot 1:d0dfbce63a89 518
elmot 1:d0dfbce63a89 519 /**
elmot 1:d0dfbce63a89 520 * @}
elmot 1:d0dfbce63a89 521 */
elmot 1:d0dfbce63a89 522
elmot 1:d0dfbce63a89 523 #ifdef __cplusplus
elmot 1:d0dfbce63a89 524 }
elmot 1:d0dfbce63a89 525 #endif
elmot 1:d0dfbce63a89 526
elmot 1:d0dfbce63a89 527 #endif /* __STM32L4xx_HAL_UART_EX_H */
elmot 1:d0dfbce63a89 528
elmot 1:d0dfbce63a89 529 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/