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_usart_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 USART 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_USART_EX_H
elmot 1:d0dfbce63a89 40 #define __STM32L4xx_HAL_USART_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 USARTEx
elmot 1:d0dfbce63a89 54 * @{
elmot 1:d0dfbce63a89 55 */
elmot 1:d0dfbce63a89 56
elmot 1:d0dfbce63a89 57 /* Exported types ------------------------------------------------------------*/
elmot 1:d0dfbce63a89 58 /* Exported constants --------------------------------------------------------*/
elmot 1:d0dfbce63a89 59 /** @defgroup USARTEx_Exported_Constants USARTEx Exported Constants
elmot 1:d0dfbce63a89 60 * @{
elmot 1:d0dfbce63a89 61 */
elmot 1:d0dfbce63a89 62
elmot 1:d0dfbce63a89 63 /** @defgroup USARTEx_Word_Length USARTEx Word Length
elmot 1:d0dfbce63a89 64 * @{
elmot 1:d0dfbce63a89 65 */
elmot 1:d0dfbce63a89 66 #define USART_WORDLENGTH_7B ((uint32_t)USART_CR1_M1) /*!< 7-bit long USART frame */
elmot 1:d0dfbce63a89 67 #define USART_WORDLENGTH_8B ((uint32_t)0x00000000) /*!< 8-bit long USART frame */
elmot 1:d0dfbce63a89 68 #define USART_WORDLENGTH_9B ((uint32_t)USART_CR1_M0) /*!< 9-bit long USART frame */
elmot 1:d0dfbce63a89 69 /**
elmot 1:d0dfbce63a89 70 * @}
elmot 1:d0dfbce63a89 71 */
elmot 1:d0dfbce63a89 72
elmot 1:d0dfbce63a89 73 /**
elmot 1:d0dfbce63a89 74 * @}
elmot 1:d0dfbce63a89 75 */
elmot 1:d0dfbce63a89 76
elmot 1:d0dfbce63a89 77 /* Exported functions --------------------------------------------------------*/
elmot 1:d0dfbce63a89 78
elmot 1:d0dfbce63a89 79 /* Private macros ------------------------------------------------------------*/
elmot 1:d0dfbce63a89 80 /** @defgroup USARTEx_Private_Macros USARTEx Private Macros
elmot 1:d0dfbce63a89 81 * @{
elmot 1:d0dfbce63a89 82 */
elmot 1:d0dfbce63a89 83
elmot 1:d0dfbce63a89 84 /** @brief Report the USART clock source.
elmot 1:d0dfbce63a89 85 * @param __HANDLE__: specifies the USART Handle.
elmot 1:d0dfbce63a89 86 * @param __CLOCKSOURCE__: output variable.
elmot 1:d0dfbce63a89 87 * @retval the USART clocking source, written in __CLOCKSOURCE__.
elmot 1:d0dfbce63a89 88 */
elmot 1:d0dfbce63a89 89 #if defined (STM32L432xx) || defined (STM32L442xx)
elmot 1:d0dfbce63a89 90 #define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
elmot 1:d0dfbce63a89 91 do { \
elmot 1:d0dfbce63a89 92 if((__HANDLE__)->Instance == USART1) \
elmot 1:d0dfbce63a89 93 { \
elmot 1:d0dfbce63a89 94 switch(__HAL_RCC_GET_USART1_SOURCE()) \
elmot 1:d0dfbce63a89 95 { \
elmot 1:d0dfbce63a89 96 case RCC_USART1CLKSOURCE_PCLK2: \
elmot 1:d0dfbce63a89 97 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK2; \
elmot 1:d0dfbce63a89 98 break; \
elmot 1:d0dfbce63a89 99 case RCC_USART1CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 100 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 101 break; \
elmot 1:d0dfbce63a89 102 case RCC_USART1CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 103 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 104 break; \
elmot 1:d0dfbce63a89 105 case RCC_USART1CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 106 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 107 break; \
elmot 1:d0dfbce63a89 108 default: \
elmot 1:d0dfbce63a89 109 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 110 break; \
elmot 1:d0dfbce63a89 111 } \
elmot 1:d0dfbce63a89 112 } \
elmot 1:d0dfbce63a89 113 else if((__HANDLE__)->Instance == USART2) \
elmot 1:d0dfbce63a89 114 { \
elmot 1:d0dfbce63a89 115 switch(__HAL_RCC_GET_USART2_SOURCE()) \
elmot 1:d0dfbce63a89 116 { \
elmot 1:d0dfbce63a89 117 case RCC_USART2CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 118 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 119 break; \
elmot 1:d0dfbce63a89 120 case RCC_USART2CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 121 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 122 break; \
elmot 1:d0dfbce63a89 123 case RCC_USART2CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 124 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 125 break; \
elmot 1:d0dfbce63a89 126 case RCC_USART2CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 127 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 128 break; \
elmot 1:d0dfbce63a89 129 default: \
elmot 1:d0dfbce63a89 130 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 131 break; \
elmot 1:d0dfbce63a89 132 } \
elmot 1:d0dfbce63a89 133 } \
elmot 1:d0dfbce63a89 134 } while(0)
elmot 1:d0dfbce63a89 135 #else
elmot 1:d0dfbce63a89 136 #define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
elmot 1:d0dfbce63a89 137 do { \
elmot 1:d0dfbce63a89 138 if((__HANDLE__)->Instance == USART1) \
elmot 1:d0dfbce63a89 139 { \
elmot 1:d0dfbce63a89 140 switch(__HAL_RCC_GET_USART1_SOURCE()) \
elmot 1:d0dfbce63a89 141 { \
elmot 1:d0dfbce63a89 142 case RCC_USART1CLKSOURCE_PCLK2: \
elmot 1:d0dfbce63a89 143 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK2; \
elmot 1:d0dfbce63a89 144 break; \
elmot 1:d0dfbce63a89 145 case RCC_USART1CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 146 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 147 break; \
elmot 1:d0dfbce63a89 148 case RCC_USART1CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 149 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 150 break; \
elmot 1:d0dfbce63a89 151 case RCC_USART1CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 152 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 153 break; \
elmot 1:d0dfbce63a89 154 default: \
elmot 1:d0dfbce63a89 155 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 156 break; \
elmot 1:d0dfbce63a89 157 } \
elmot 1:d0dfbce63a89 158 } \
elmot 1:d0dfbce63a89 159 else if((__HANDLE__)->Instance == USART2) \
elmot 1:d0dfbce63a89 160 { \
elmot 1:d0dfbce63a89 161 switch(__HAL_RCC_GET_USART2_SOURCE()) \
elmot 1:d0dfbce63a89 162 { \
elmot 1:d0dfbce63a89 163 case RCC_USART2CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 164 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 165 break; \
elmot 1:d0dfbce63a89 166 case RCC_USART2CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 167 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 168 break; \
elmot 1:d0dfbce63a89 169 case RCC_USART2CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 170 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 171 break; \
elmot 1:d0dfbce63a89 172 case RCC_USART2CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 173 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 174 break; \
elmot 1:d0dfbce63a89 175 default: \
elmot 1:d0dfbce63a89 176 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 177 break; \
elmot 1:d0dfbce63a89 178 } \
elmot 1:d0dfbce63a89 179 } \
elmot 1:d0dfbce63a89 180 else if((__HANDLE__)->Instance == USART3) \
elmot 1:d0dfbce63a89 181 { \
elmot 1:d0dfbce63a89 182 switch(__HAL_RCC_GET_USART3_SOURCE()) \
elmot 1:d0dfbce63a89 183 { \
elmot 1:d0dfbce63a89 184 case RCC_USART3CLKSOURCE_PCLK1: \
elmot 1:d0dfbce63a89 185 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1; \
elmot 1:d0dfbce63a89 186 break; \
elmot 1:d0dfbce63a89 187 case RCC_USART3CLKSOURCE_HSI: \
elmot 1:d0dfbce63a89 188 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI; \
elmot 1:d0dfbce63a89 189 break; \
elmot 1:d0dfbce63a89 190 case RCC_USART3CLKSOURCE_SYSCLK: \
elmot 1:d0dfbce63a89 191 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK; \
elmot 1:d0dfbce63a89 192 break; \
elmot 1:d0dfbce63a89 193 case RCC_USART3CLKSOURCE_LSE: \
elmot 1:d0dfbce63a89 194 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE; \
elmot 1:d0dfbce63a89 195 break; \
elmot 1:d0dfbce63a89 196 default: \
elmot 1:d0dfbce63a89 197 (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED; \
elmot 1:d0dfbce63a89 198 break; \
elmot 1:d0dfbce63a89 199 } \
elmot 1:d0dfbce63a89 200 } \
elmot 1:d0dfbce63a89 201 } while(0)
elmot 1:d0dfbce63a89 202 #endif /* STM32L432xx || STM32L442xx */
elmot 1:d0dfbce63a89 203
elmot 1:d0dfbce63a89 204 /** @brief Compute the USART mask to apply to retrieve the received data
elmot 1:d0dfbce63a89 205 * according to the word length and to the parity bits activation.
elmot 1:d0dfbce63a89 206 * @note If PCE = 1, the parity bit is not included in the data extracted
elmot 1:d0dfbce63a89 207 * by the reception API().
elmot 1:d0dfbce63a89 208 * This masking operation is not carried out in the case of
elmot 1:d0dfbce63a89 209 * DMA transfers.
elmot 1:d0dfbce63a89 210 * @param __HANDLE__: specifies the USART Handle.
elmot 1:d0dfbce63a89 211 * @retval None, the mask to apply to USART RDR register is stored in (__HANDLE__)->Mask field.
elmot 1:d0dfbce63a89 212 */
elmot 1:d0dfbce63a89 213 #define USART_MASK_COMPUTATION(__HANDLE__) \
elmot 1:d0dfbce63a89 214 do { \
elmot 1:d0dfbce63a89 215 if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_9B) \
elmot 1:d0dfbce63a89 216 { \
elmot 1:d0dfbce63a89 217 if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \
elmot 1:d0dfbce63a89 218 { \
elmot 1:d0dfbce63a89 219 (__HANDLE__)->Mask = 0x01FF ; \
elmot 1:d0dfbce63a89 220 } \
elmot 1:d0dfbce63a89 221 else \
elmot 1:d0dfbce63a89 222 { \
elmot 1:d0dfbce63a89 223 (__HANDLE__)->Mask = 0x00FF ; \
elmot 1:d0dfbce63a89 224 } \
elmot 1:d0dfbce63a89 225 } \
elmot 1:d0dfbce63a89 226 else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_8B) \
elmot 1:d0dfbce63a89 227 { \
elmot 1:d0dfbce63a89 228 if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \
elmot 1:d0dfbce63a89 229 { \
elmot 1:d0dfbce63a89 230 (__HANDLE__)->Mask = 0x00FF ; \
elmot 1:d0dfbce63a89 231 } \
elmot 1:d0dfbce63a89 232 else \
elmot 1:d0dfbce63a89 233 { \
elmot 1:d0dfbce63a89 234 (__HANDLE__)->Mask = 0x007F ; \
elmot 1:d0dfbce63a89 235 } \
elmot 1:d0dfbce63a89 236 } \
elmot 1:d0dfbce63a89 237 else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_7B) \
elmot 1:d0dfbce63a89 238 { \
elmot 1:d0dfbce63a89 239 if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE) \
elmot 1:d0dfbce63a89 240 { \
elmot 1:d0dfbce63a89 241 (__HANDLE__)->Mask = 0x007F ; \
elmot 1:d0dfbce63a89 242 } \
elmot 1:d0dfbce63a89 243 else \
elmot 1:d0dfbce63a89 244 { \
elmot 1:d0dfbce63a89 245 (__HANDLE__)->Mask = 0x003F ; \
elmot 1:d0dfbce63a89 246 } \
elmot 1:d0dfbce63a89 247 } \
elmot 1:d0dfbce63a89 248 } while(0)
elmot 1:d0dfbce63a89 249
elmot 1:d0dfbce63a89 250
elmot 1:d0dfbce63a89 251 /**
elmot 1:d0dfbce63a89 252 * @brief Ensure that USART frame length is valid.
elmot 1:d0dfbce63a89 253 * @param __LENGTH__: USART frame length.
elmot 1:d0dfbce63a89 254 * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
elmot 1:d0dfbce63a89 255 */
elmot 1:d0dfbce63a89 256 #define IS_USART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == USART_WORDLENGTH_7B) || \
elmot 1:d0dfbce63a89 257 ((__LENGTH__) == USART_WORDLENGTH_8B) || \
elmot 1:d0dfbce63a89 258 ((__LENGTH__) == USART_WORDLENGTH_9B))
elmot 1:d0dfbce63a89 259
elmot 1:d0dfbce63a89 260 /**
elmot 1:d0dfbce63a89 261 * @}
elmot 1:d0dfbce63a89 262 */
elmot 1:d0dfbce63a89 263
elmot 1:d0dfbce63a89 264 /* Exported functions --------------------------------------------------------*/
elmot 1:d0dfbce63a89 265
elmot 1:d0dfbce63a89 266 /**
elmot 1:d0dfbce63a89 267 * @}
elmot 1:d0dfbce63a89 268 */
elmot 1:d0dfbce63a89 269
elmot 1:d0dfbce63a89 270 /**
elmot 1:d0dfbce63a89 271 * @}
elmot 1:d0dfbce63a89 272 */
elmot 1:d0dfbce63a89 273
elmot 1:d0dfbce63a89 274 #ifdef __cplusplus
elmot 1:d0dfbce63a89 275 }
elmot 1:d0dfbce63a89 276 #endif
elmot 1:d0dfbce63a89 277
elmot 1:d0dfbce63a89 278 #endif /* __STM32L4xx_HAL_USART_EX_H */
elmot 1:d0dfbce63a89 279
elmot 1:d0dfbce63a89 280 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/