STM32L443xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32l4xx_hal_irda_ex.h 00004 * @author MCD Application Team 00005 * @brief Header file of IRDA HAL Extended module. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * Copyright (c) 2017 STMicroelectronics. 00010 * All rights reserved. 00011 * 00012 * This software is licensed under terms that can be found in the LICENSE file 00013 * in the root directory of this software component. 00014 * If no LICENSE file comes with this software, it is provided AS-IS. 00015 * 00016 ****************************************************************************** 00017 */ 00018 00019 /* Define to prevent recursive inclusion -------------------------------------*/ 00020 #ifndef STM32L4xx_HAL_IRDA_EX_H 00021 #define STM32L4xx_HAL_IRDA_EX_H 00022 00023 #ifdef __cplusplus 00024 extern "C" { 00025 #endif 00026 00027 /* Includes ------------------------------------------------------------------*/ 00028 #include "stm32l4xx_hal_def.h" 00029 00030 /** @addtogroup STM32L4xx_HAL_Driver 00031 * @{ 00032 */ 00033 00034 /** @defgroup IRDAEx IRDAEx 00035 * @brief IRDA Extended HAL module driver 00036 * @{ 00037 */ 00038 00039 /* Exported types ------------------------------------------------------------*/ 00040 /* Exported constants --------------------------------------------------------*/ 00041 /** @defgroup IRDAEx_Extended_Exported_Constants IRDAEx Extended Exported Constants 00042 * @{ 00043 */ 00044 00045 /** @defgroup IRDAEx_Word_Length IRDAEx Word Length 00046 * @{ 00047 */ 00048 #define IRDA_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long frame */ 00049 #define IRDA_WORDLENGTH_8B 0x00000000U /*!< 8-bit long frame */ 00050 #define IRDA_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long frame */ 00051 /** 00052 * @} 00053 */ 00054 00055 /** 00056 * @} 00057 */ 00058 00059 /* Exported macros -----------------------------------------------------------*/ 00060 00061 /* Private macros ------------------------------------------------------------*/ 00062 00063 /** @defgroup IRDAEx_Private_Macros IRDAEx Private Macros 00064 * @{ 00065 */ 00066 00067 /** @brief Report the IRDA clock source. 00068 * @param __HANDLE__ specifies the IRDA Handle. 00069 * @param __CLOCKSOURCE__ output variable. 00070 * @retval IRDA clocking source, written in __CLOCKSOURCE__. 00071 */ 00072 #if defined (STM32L471xx) || defined (STM32L475xx) || defined (STM32L476xx) || defined (STM32L485xx) || defined (STM32L486xx) \ 00073 || defined (STM32L496xx) || defined (STM32L4A6xx) \ 00074 || defined (STM32L4P5xx) || defined (STM32L4Q5xx) \ 00075 || defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) 00076 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ 00077 do { \ 00078 if((__HANDLE__)->Instance == USART1) \ 00079 { \ 00080 switch(__HAL_RCC_GET_USART1_SOURCE()) \ 00081 { \ 00082 case RCC_USART1CLKSOURCE_PCLK2: \ 00083 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2; \ 00084 break; \ 00085 case RCC_USART1CLKSOURCE_HSI: \ 00086 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00087 break; \ 00088 case RCC_USART1CLKSOURCE_SYSCLK: \ 00089 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00090 break; \ 00091 case RCC_USART1CLKSOURCE_LSE: \ 00092 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00093 break; \ 00094 default: \ 00095 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00096 break; \ 00097 } \ 00098 } \ 00099 else if((__HANDLE__)->Instance == USART2) \ 00100 { \ 00101 switch(__HAL_RCC_GET_USART2_SOURCE()) \ 00102 { \ 00103 case RCC_USART2CLKSOURCE_PCLK1: \ 00104 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \ 00105 break; \ 00106 case RCC_USART2CLKSOURCE_HSI: \ 00107 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00108 break; \ 00109 case RCC_USART2CLKSOURCE_SYSCLK: \ 00110 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00111 break; \ 00112 case RCC_USART2CLKSOURCE_LSE: \ 00113 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00114 break; \ 00115 default: \ 00116 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00117 break; \ 00118 } \ 00119 } \ 00120 else if((__HANDLE__)->Instance == USART3) \ 00121 { \ 00122 switch(__HAL_RCC_GET_USART3_SOURCE()) \ 00123 { \ 00124 case RCC_USART3CLKSOURCE_PCLK1: \ 00125 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \ 00126 break; \ 00127 case RCC_USART3CLKSOURCE_HSI: \ 00128 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00129 break; \ 00130 case RCC_USART3CLKSOURCE_SYSCLK: \ 00131 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00132 break; \ 00133 case RCC_USART3CLKSOURCE_LSE: \ 00134 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00135 break; \ 00136 default: \ 00137 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00138 break; \ 00139 } \ 00140 } \ 00141 else if((__HANDLE__)->Instance == UART4) \ 00142 { \ 00143 switch(__HAL_RCC_GET_UART4_SOURCE()) \ 00144 { \ 00145 case RCC_UART4CLKSOURCE_PCLK1: \ 00146 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \ 00147 break; \ 00148 case RCC_UART4CLKSOURCE_HSI: \ 00149 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00150 break; \ 00151 case RCC_UART4CLKSOURCE_SYSCLK: \ 00152 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00153 break; \ 00154 case RCC_UART4CLKSOURCE_LSE: \ 00155 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00156 break; \ 00157 default: \ 00158 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00159 break; \ 00160 } \ 00161 } \ 00162 else if ((__HANDLE__)->Instance == UART5) \ 00163 { \ 00164 switch(__HAL_RCC_GET_UART5_SOURCE()) \ 00165 { \ 00166 case RCC_UART5CLKSOURCE_PCLK1: \ 00167 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \ 00168 break; \ 00169 case RCC_UART5CLKSOURCE_HSI: \ 00170 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00171 break; \ 00172 case RCC_UART5CLKSOURCE_SYSCLK: \ 00173 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00174 break; \ 00175 case RCC_UART5CLKSOURCE_LSE: \ 00176 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00177 break; \ 00178 default: \ 00179 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00180 break; \ 00181 } \ 00182 } \ 00183 else \ 00184 { \ 00185 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00186 } \ 00187 } while(0) 00188 #elif defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L431xx) || defined (STM32L433xx) || defined (STM32L443xx) 00189 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ 00190 do { \ 00191 if((__HANDLE__)->Instance == USART1) \ 00192 { \ 00193 switch(__HAL_RCC_GET_USART1_SOURCE()) \ 00194 { \ 00195 case RCC_USART1CLKSOURCE_PCLK2: \ 00196 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2; \ 00197 break; \ 00198 case RCC_USART1CLKSOURCE_HSI: \ 00199 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00200 break; \ 00201 case RCC_USART1CLKSOURCE_SYSCLK: \ 00202 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00203 break; \ 00204 case RCC_USART1CLKSOURCE_LSE: \ 00205 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00206 break; \ 00207 default: \ 00208 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00209 break; \ 00210 } \ 00211 } \ 00212 else if((__HANDLE__)->Instance == USART2) \ 00213 { \ 00214 switch(__HAL_RCC_GET_USART2_SOURCE()) \ 00215 { \ 00216 case RCC_USART2CLKSOURCE_PCLK1: \ 00217 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \ 00218 break; \ 00219 case RCC_USART2CLKSOURCE_HSI: \ 00220 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00221 break; \ 00222 case RCC_USART2CLKSOURCE_SYSCLK: \ 00223 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00224 break; \ 00225 case RCC_USART2CLKSOURCE_LSE: \ 00226 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00227 break; \ 00228 default: \ 00229 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00230 break; \ 00231 } \ 00232 } \ 00233 else if((__HANDLE__)->Instance == USART3) \ 00234 { \ 00235 switch(__HAL_RCC_GET_USART3_SOURCE()) \ 00236 { \ 00237 case RCC_USART3CLKSOURCE_PCLK1: \ 00238 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \ 00239 break; \ 00240 case RCC_USART3CLKSOURCE_HSI: \ 00241 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00242 break; \ 00243 case RCC_USART3CLKSOURCE_SYSCLK: \ 00244 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00245 break; \ 00246 case RCC_USART3CLKSOURCE_LSE: \ 00247 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00248 break; \ 00249 default: \ 00250 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00251 break; \ 00252 } \ 00253 } \ 00254 else \ 00255 { \ 00256 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00257 } \ 00258 } while(0) 00259 #elif defined (STM32L432xx) || defined (STM32L442xx) 00260 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ 00261 do { \ 00262 if((__HANDLE__)->Instance == USART1) \ 00263 { \ 00264 switch(__HAL_RCC_GET_USART1_SOURCE()) \ 00265 { \ 00266 case RCC_USART1CLKSOURCE_PCLK2: \ 00267 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2; \ 00268 break; \ 00269 case RCC_USART1CLKSOURCE_HSI: \ 00270 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00271 break; \ 00272 case RCC_USART1CLKSOURCE_SYSCLK: \ 00273 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00274 break; \ 00275 case RCC_USART1CLKSOURCE_LSE: \ 00276 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00277 break; \ 00278 default: \ 00279 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00280 break; \ 00281 } \ 00282 } \ 00283 else if((__HANDLE__)->Instance == USART2) \ 00284 { \ 00285 switch(__HAL_RCC_GET_USART2_SOURCE()) \ 00286 { \ 00287 case RCC_USART2CLKSOURCE_PCLK1: \ 00288 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \ 00289 break; \ 00290 case RCC_USART2CLKSOURCE_HSI: \ 00291 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00292 break; \ 00293 case RCC_USART2CLKSOURCE_SYSCLK: \ 00294 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00295 break; \ 00296 case RCC_USART2CLKSOURCE_LSE: \ 00297 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00298 break; \ 00299 default: \ 00300 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00301 break; \ 00302 } \ 00303 } \ 00304 else \ 00305 { \ 00306 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00307 } \ 00308 } while(0) 00309 #elif defined (STM32L451xx) || defined (STM32L452xx) || defined (STM32L462xx) 00310 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \ 00311 do { \ 00312 if((__HANDLE__)->Instance == USART1) \ 00313 { \ 00314 switch(__HAL_RCC_GET_USART1_SOURCE()) \ 00315 { \ 00316 case RCC_USART1CLKSOURCE_PCLK2: \ 00317 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2; \ 00318 break; \ 00319 case RCC_USART1CLKSOURCE_HSI: \ 00320 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00321 break; \ 00322 case RCC_USART1CLKSOURCE_SYSCLK: \ 00323 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00324 break; \ 00325 case RCC_USART1CLKSOURCE_LSE: \ 00326 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00327 break; \ 00328 default: \ 00329 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00330 break; \ 00331 } \ 00332 } \ 00333 else if((__HANDLE__)->Instance == USART2) \ 00334 { \ 00335 switch(__HAL_RCC_GET_USART2_SOURCE()) \ 00336 { \ 00337 case RCC_USART2CLKSOURCE_PCLK1: \ 00338 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \ 00339 break; \ 00340 case RCC_USART2CLKSOURCE_HSI: \ 00341 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00342 break; \ 00343 case RCC_USART2CLKSOURCE_SYSCLK: \ 00344 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00345 break; \ 00346 case RCC_USART2CLKSOURCE_LSE: \ 00347 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00348 break; \ 00349 default: \ 00350 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00351 break; \ 00352 } \ 00353 } \ 00354 else if((__HANDLE__)->Instance == USART3) \ 00355 { \ 00356 switch(__HAL_RCC_GET_USART3_SOURCE()) \ 00357 { \ 00358 case RCC_USART3CLKSOURCE_PCLK1: \ 00359 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \ 00360 break; \ 00361 case RCC_USART3CLKSOURCE_HSI: \ 00362 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00363 break; \ 00364 case RCC_USART3CLKSOURCE_SYSCLK: \ 00365 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00366 break; \ 00367 case RCC_USART3CLKSOURCE_LSE: \ 00368 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00369 break; \ 00370 default: \ 00371 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00372 break; \ 00373 } \ 00374 } \ 00375 else if((__HANDLE__)->Instance == UART4) \ 00376 { \ 00377 switch(__HAL_RCC_GET_UART4_SOURCE()) \ 00378 { \ 00379 case RCC_UART4CLKSOURCE_PCLK1: \ 00380 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1; \ 00381 break; \ 00382 case RCC_UART4CLKSOURCE_HSI: \ 00383 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI; \ 00384 break; \ 00385 case RCC_UART4CLKSOURCE_SYSCLK: \ 00386 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK; \ 00387 break; \ 00388 case RCC_UART4CLKSOURCE_LSE: \ 00389 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE; \ 00390 break; \ 00391 default: \ 00392 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00393 break; \ 00394 } \ 00395 } \ 00396 else \ 00397 { \ 00398 (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED; \ 00399 } \ 00400 } while(0) 00401 #endif /* STM32L471xx || STM32L475xx || STM32L476xx || STM32L485xx || STM32L486xx || 00402 * STM32L496xx || STM32L4A6xx || 00403 * STM32L4P5xx || STM32L4Q5xx || 00404 * STM32L4R5xx || STM32L4R7xx || STM32L4R9xx || STM32L4S5xx || STM32L4S7xx || STM32L4S9xx 00405 */ 00406 00407 /** @brief Compute the mask to apply to retrieve the received data 00408 * according to the word length and to the parity bits activation. 00409 * @param __HANDLE__ specifies the IRDA Handle. 00410 * @retval None, the mask to apply to the associated UART RDR register is stored in (__HANDLE__)->Mask field. 00411 */ 00412 #define IRDA_MASK_COMPUTATION(__HANDLE__) \ 00413 do { \ 00414 if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_9B) \ 00415 { \ 00416 if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \ 00417 { \ 00418 (__HANDLE__)->Mask = 0x01FFU ; \ 00419 } \ 00420 else \ 00421 { \ 00422 (__HANDLE__)->Mask = 0x00FFU ; \ 00423 } \ 00424 } \ 00425 else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_8B) \ 00426 { \ 00427 if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \ 00428 { \ 00429 (__HANDLE__)->Mask = 0x00FFU ; \ 00430 } \ 00431 else \ 00432 { \ 00433 (__HANDLE__)->Mask = 0x007FU ; \ 00434 } \ 00435 } \ 00436 else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_7B) \ 00437 { \ 00438 if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE) \ 00439 { \ 00440 (__HANDLE__)->Mask = 0x007FU ; \ 00441 } \ 00442 else \ 00443 { \ 00444 (__HANDLE__)->Mask = 0x003FU ; \ 00445 } \ 00446 } \ 00447 else \ 00448 { \ 00449 (__HANDLE__)->Mask = 0x0000U; \ 00450 } \ 00451 } while(0U) 00452 00453 /** @brief Ensure that IRDA frame length is valid. 00454 * @param __LENGTH__ IRDA frame length. 00455 * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid) 00456 */ 00457 #define IS_IRDA_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == IRDA_WORDLENGTH_7B) || \ 00458 ((__LENGTH__) == IRDA_WORDLENGTH_8B) || \ 00459 ((__LENGTH__) == IRDA_WORDLENGTH_9B)) 00460 /** 00461 * @} 00462 */ 00463 00464 /* Exported functions --------------------------------------------------------*/ 00465 00466 /** 00467 * @} 00468 */ 00469 00470 /** 00471 * @} 00472 */ 00473 00474 #ifdef __cplusplus 00475 } 00476 #endif 00477 00478 #endif /* STM32L4xx_HAL_IRDA_EX_H */ 00479