Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:35

0001 /**
0002   ******************************************************************************
0003   * @file    stm32h7xx_hal_irda_ex.h
0004   * @author  MCD Application Team
0005   * @brief   Header file of IRDA HAL Extended module.
0006   ******************************************************************************
0007   * @attention
0008   *
0009   * Copyright (c) 2017 STMicroelectronics.
0010   * All rights reserved.
0011   *
0012   * This software is licensed under terms that can be found in the LICENSE file
0013   * in the root directory of this software component.
0014   * If no LICENSE file comes with this software, it is provided AS-IS.
0015   *
0016   ******************************************************************************
0017   */
0018 
0019 /* Define to prevent recursive inclusion -------------------------------------*/
0020 #ifndef STM32H7xx_HAL_IRDA_EX_H
0021 #define STM32H7xx_HAL_IRDA_EX_H
0022 
0023 #ifdef __cplusplus
0024 extern "C" {
0025 #endif
0026 
0027 /* Includes ------------------------------------------------------------------*/
0028 #include "stm32h7xx_hal_def.h"
0029 
0030 /** @addtogroup STM32H7xx_HAL_Driver
0031   * @{
0032   */
0033 
0034 /** @defgroup IRDAEx IRDAEx
0035   * @ingroup RTEMSBSPsARMSTM32H7
0036   * @brief IRDA Extended HAL module driver
0037   * @{
0038   */
0039 
0040 /* Exported types ------------------------------------------------------------*/
0041 /* Exported constants --------------------------------------------------------*/
0042 /** @defgroup IRDAEx_Extended_Exported_Constants IRDAEx Extended Exported Constants
0043   * @ingroup RTEMSBSPsARMSTM32H7
0044   * @{
0045   */
0046 
0047 /** @defgroup IRDAEx_Word_Length IRDAEx Word Length
0048   * @ingroup RTEMSBSPsARMSTM32H7
0049   * @{
0050   */
0051 #define IRDA_WORDLENGTH_7B                  USART_CR1_M1   /*!< 7-bit long frame */
0052 #define IRDA_WORDLENGTH_8B                  0x00000000U    /*!< 8-bit long frame */
0053 #define IRDA_WORDLENGTH_9B                  USART_CR1_M0   /*!< 9-bit long frame */
0054 /**
0055   * @}
0056   */
0057 
0058 /**
0059   * @}
0060   */
0061 
0062 /* Exported macros -----------------------------------------------------------*/
0063 
0064 /* Private macros ------------------------------------------------------------*/
0065 
0066 /** @defgroup IRDAEx_Private_Macros IRDAEx Private Macros
0067   * @ingroup RTEMSBSPsARMSTM32H7
0068   * @{
0069   */
0070 
0071 /** @brief  Report the IRDA clock source.
0072   * @param  __HANDLE__ specifies the IRDA Handle.
0073   * @param  __CLOCKSOURCE__ output variable.
0074   * @retval IRDA clocking source, written in __CLOCKSOURCE__.
0075   */
0076 #if defined(UART9) && defined(USART10)
0077 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \
0078   do {                                                        \
0079     if((__HANDLE__)->Instance == USART1)                      \
0080     {                                                         \
0081       switch(__HAL_RCC_GET_USART1_SOURCE())                   \
0082       {                                                       \
0083         case RCC_USART1CLKSOURCE_D2PCLK2:                     \
0084           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2;       \
0085           break;                                              \
0086         case RCC_USART1CLKSOURCE_PLL2:                        \
0087           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0088           break;                                              \
0089         case RCC_USART1CLKSOURCE_PLL3:                        \
0090           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0091           break;                                              \
0092         case RCC_USART1CLKSOURCE_HSI:                         \
0093           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0094           break;                                              \
0095         case RCC_USART1CLKSOURCE_CSI:                         \
0096           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0097           break;                                              \
0098         case RCC_USART1CLKSOURCE_LSE:                         \
0099           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0100           break;                                              \
0101         default:                                              \
0102           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0103           break;                                              \
0104       }                                                       \
0105     }                                                         \
0106     else if((__HANDLE__)->Instance == USART2)                 \
0107     {                                                         \
0108       switch(__HAL_RCC_GET_USART2_SOURCE())                   \
0109       {                                                       \
0110         case RCC_USART2CLKSOURCE_D2PCLK1:                     \
0111           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0112           break;                                              \
0113         case RCC_USART2CLKSOURCE_PLL2:                        \
0114           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0115           break;                                              \
0116         case RCC_USART2CLKSOURCE_PLL3:                        \
0117           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0118           break;                                              \
0119         case RCC_USART2CLKSOURCE_HSI:                         \
0120           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0121           break;                                              \
0122         case RCC_USART2CLKSOURCE_CSI:                         \
0123           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0124           break;                                              \
0125         case RCC_USART2CLKSOURCE_LSE:                         \
0126           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0127           break;                                              \
0128         default:                                              \
0129           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0130           break;                                              \
0131       }                                                       \
0132     }                                                         \
0133     else if((__HANDLE__)->Instance == USART3)                 \
0134     {                                                         \
0135       switch(__HAL_RCC_GET_USART3_SOURCE())                   \
0136       {                                                       \
0137         case RCC_USART3CLKSOURCE_D2PCLK1:                     \
0138           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0139           break;                                              \
0140         case RCC_USART3CLKSOURCE_PLL2:                        \
0141           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0142           break;                                              \
0143         case RCC_USART3CLKSOURCE_PLL3:                        \
0144           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0145           break;                                              \
0146         case RCC_USART3CLKSOURCE_HSI:                         \
0147           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0148           break;                                              \
0149         case RCC_USART3CLKSOURCE_CSI:                         \
0150           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0151           break;                                              \
0152         case RCC_USART3CLKSOURCE_LSE:                         \
0153           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0154           break;                                              \
0155         default:                                              \
0156           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0157           break;                                              \
0158       }                                                       \
0159     }                                                         \
0160     else if((__HANDLE__)->Instance == UART4)                  \
0161     {                                                         \
0162       switch(__HAL_RCC_GET_UART4_SOURCE())                    \
0163       {                                                       \
0164         case RCC_UART4CLKSOURCE_D2PCLK1:                      \
0165           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0166           break;                                              \
0167         case RCC_UART4CLKSOURCE_PLL2:                         \
0168           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0169           break;                                              \
0170         case RCC_UART4CLKSOURCE_PLL3:                         \
0171           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0172           break;                                              \
0173         case RCC_UART4CLKSOURCE_HSI:                          \
0174           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0175           break;                                              \
0176         case RCC_UART4CLKSOURCE_CSI:                          \
0177           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0178           break;                                              \
0179         case RCC_UART4CLKSOURCE_LSE:                          \
0180           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0181           break;                                              \
0182         default:                                              \
0183           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0184           break;                                              \
0185       }                                                       \
0186     }                                                         \
0187     else if ((__HANDLE__)->Instance == UART5)                 \
0188     {                                                         \
0189       switch(__HAL_RCC_GET_UART5_SOURCE())                    \
0190       {                                                       \
0191         case RCC_UART5CLKSOURCE_D2PCLK1:                      \
0192           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0193           break;                                              \
0194         case RCC_UART5CLKSOURCE_PLL2:                         \
0195           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0196           break;                                              \
0197         case RCC_UART5CLKSOURCE_PLL3:                         \
0198           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0199           break;                                              \
0200         case RCC_UART5CLKSOURCE_HSI:                          \
0201           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0202           break;                                              \
0203         case RCC_UART5CLKSOURCE_CSI:                          \
0204           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0205           break;                                              \
0206         case RCC_UART5CLKSOURCE_LSE:                          \
0207           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0208           break;                                              \
0209         default:                                              \
0210           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0211           break;                                              \
0212       }                                                       \
0213     }                                                         \
0214     else if((__HANDLE__)->Instance == USART6)                 \
0215     {                                                         \
0216       switch(__HAL_RCC_GET_USART6_SOURCE())                   \
0217       {                                                       \
0218         case RCC_USART6CLKSOURCE_D2PCLK2:                     \
0219           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2;       \
0220           break;                                              \
0221         case RCC_USART6CLKSOURCE_PLL2:                        \
0222           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0223           break;                                              \
0224         case RCC_USART6CLKSOURCE_PLL3:                        \
0225           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0226           break;                                              \
0227         case RCC_USART6CLKSOURCE_HSI:                         \
0228           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0229           break;                                              \
0230         case RCC_USART6CLKSOURCE_CSI:                         \
0231           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0232           break;                                              \
0233         case RCC_USART6CLKSOURCE_LSE:                         \
0234           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0235           break;                                              \
0236         default:                                              \
0237           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0238           break;                                              \
0239       }                                                       \
0240     }                                                         \
0241     else if((__HANDLE__)->Instance == UART7)                  \
0242     {                                                         \
0243       switch(__HAL_RCC_GET_UART7_SOURCE())                    \
0244       {                                                       \
0245         case RCC_UART7CLKSOURCE_D2PCLK1:                      \
0246           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0247           break;                                              \
0248         case RCC_UART7CLKSOURCE_PLL2:                         \
0249           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0250           break;                                              \
0251         case RCC_UART7CLKSOURCE_PLL3:                         \
0252           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0253           break;                                              \
0254         case RCC_UART7CLKSOURCE_HSI:                          \
0255           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0256           break;                                              \
0257         case RCC_UART7CLKSOURCE_CSI:                          \
0258           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0259           break;                                              \
0260         case RCC_UART7CLKSOURCE_LSE:                          \
0261           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0262           break;                                              \
0263         default:                                              \
0264           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0265           break;                                              \
0266       }                                                       \
0267     }                                                         \
0268     else if((__HANDLE__)->Instance == UART8)                  \
0269     {                                                         \
0270       switch(__HAL_RCC_GET_UART8_SOURCE())                    \
0271       {                                                       \
0272         case RCC_UART8CLKSOURCE_D2PCLK1:                      \
0273           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0274           break;                                              \
0275         case RCC_UART8CLKSOURCE_PLL2:                         \
0276           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0277           break;                                              \
0278         case RCC_UART8CLKSOURCE_PLL3:                         \
0279           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0280           break;                                              \
0281         case RCC_UART8CLKSOURCE_HSI:                          \
0282           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0283           break;                                              \
0284         case RCC_UART8CLKSOURCE_CSI:                          \
0285           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0286           break;                                              \
0287         case RCC_UART8CLKSOURCE_LSE:                          \
0288           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0289           break;                                              \
0290         default:                                              \
0291           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0292           break;                                              \
0293       }                                                       \
0294     }                                                         \
0295     else if((__HANDLE__)->Instance == UART9)                  \
0296     {                                                         \
0297       switch(__HAL_RCC_GET_UART9_SOURCE())                    \
0298       {                                                       \
0299         case RCC_UART9CLKSOURCE_D2PCLK2:                      \
0300           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2;       \
0301           break;                                              \
0302         case RCC_UART9CLKSOURCE_PLL2:                         \
0303           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0304           break;                                              \
0305         case RCC_UART9CLKSOURCE_PLL3:                         \
0306           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0307           break;                                              \
0308         case RCC_UART9CLKSOURCE_HSI:                          \
0309           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0310           break;                                              \
0311         case RCC_UART9CLKSOURCE_CSI:                          \
0312           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0313           break;                                              \
0314         case RCC_UART9CLKSOURCE_LSE:                          \
0315           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0316           break;                                              \
0317         default:                                              \
0318           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0319           break;                                              \
0320       }                                                       \
0321     }                                                         \
0322     else if((__HANDLE__)->Instance == USART10)                \
0323     {                                                         \
0324       switch(__HAL_RCC_GET_USART10_SOURCE())                  \
0325       {                                                       \
0326         case RCC_USART10CLKSOURCE_D2PCLK2:                    \
0327           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2;       \
0328           break;                                              \
0329         case RCC_USART10CLKSOURCE_PLL2:                       \
0330           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0331           break;                                              \
0332         case RCC_USART10CLKSOURCE_PLL3:                       \
0333           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0334           break;                                              \
0335         case RCC_USART10CLKSOURCE_HSI:                        \
0336           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0337           break;                                              \
0338         case RCC_USART10CLKSOURCE_CSI:                        \
0339           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0340           break;                                              \
0341         case RCC_USART10CLKSOURCE_LSE:                        \
0342           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0343           break;                                              \
0344         default:                                              \
0345           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0346           break;                                              \
0347       }                                                       \
0348     }                                                         \
0349     else                                                      \
0350     {                                                         \
0351       (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;         \
0352     }                                                         \
0353   } while(0U)
0354 #else
0355 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \
0356   do {                                                        \
0357     if((__HANDLE__)->Instance == USART1)                      \
0358     {                                                         \
0359       switch(__HAL_RCC_GET_USART1_SOURCE())                   \
0360       {                                                       \
0361         case RCC_USART1CLKSOURCE_D2PCLK2:                     \
0362           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2;       \
0363           break;                                              \
0364         case RCC_USART1CLKSOURCE_PLL2:                        \
0365           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0366           break;                                              \
0367         case RCC_USART1CLKSOURCE_PLL3:                        \
0368           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0369           break;                                              \
0370         case RCC_USART1CLKSOURCE_HSI:                         \
0371           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0372           break;                                              \
0373         case RCC_USART1CLKSOURCE_CSI:                         \
0374           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0375           break;                                              \
0376         case RCC_USART1CLKSOURCE_LSE:                         \
0377           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0378           break;                                              \
0379         default:                                              \
0380           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0381           break;                                              \
0382       }                                                       \
0383     }                                                         \
0384     else if((__HANDLE__)->Instance == USART2)                 \
0385     {                                                         \
0386       switch(__HAL_RCC_GET_USART2_SOURCE())                   \
0387       {                                                       \
0388         case RCC_USART2CLKSOURCE_D2PCLK1:                     \
0389           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0390           break;                                              \
0391         case RCC_USART2CLKSOURCE_PLL2:                        \
0392           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0393           break;                                              \
0394         case RCC_USART2CLKSOURCE_PLL3:                        \
0395           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0396           break;                                              \
0397         case RCC_USART2CLKSOURCE_HSI:                         \
0398           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0399           break;                                              \
0400         case RCC_USART2CLKSOURCE_CSI:                         \
0401           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0402           break;                                              \
0403         case RCC_USART2CLKSOURCE_LSE:                         \
0404           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0405           break;                                              \
0406         default:                                              \
0407           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0408           break;                                              \
0409       }                                                       \
0410     }                                                         \
0411     else if((__HANDLE__)->Instance == USART3)                 \
0412     {                                                         \
0413       switch(__HAL_RCC_GET_USART3_SOURCE())                   \
0414       {                                                       \
0415         case RCC_USART3CLKSOURCE_D2PCLK1:                     \
0416           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0417           break;                                              \
0418         case RCC_USART3CLKSOURCE_PLL2:                        \
0419           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0420           break;                                              \
0421         case RCC_USART3CLKSOURCE_PLL3:                        \
0422           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0423           break;                                              \
0424         case RCC_USART3CLKSOURCE_HSI:                         \
0425           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0426           break;                                              \
0427         case RCC_USART3CLKSOURCE_CSI:                         \
0428           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0429           break;                                              \
0430         case RCC_USART3CLKSOURCE_LSE:                         \
0431           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0432           break;                                              \
0433         default:                                              \
0434           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0435           break;                                              \
0436       }                                                       \
0437     }                                                         \
0438     else if((__HANDLE__)->Instance == UART4)                  \
0439     {                                                         \
0440       switch(__HAL_RCC_GET_UART4_SOURCE())                    \
0441       {                                                       \
0442         case RCC_UART4CLKSOURCE_D2PCLK1:                      \
0443           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0444           break;                                              \
0445         case RCC_UART4CLKSOURCE_PLL2:                         \
0446           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0447           break;                                              \
0448         case RCC_UART4CLKSOURCE_PLL3:                         \
0449           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0450           break;                                              \
0451         case RCC_UART4CLKSOURCE_HSI:                          \
0452           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0453           break;                                              \
0454         case RCC_UART4CLKSOURCE_CSI:                          \
0455           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0456           break;                                              \
0457         case RCC_UART4CLKSOURCE_LSE:                          \
0458           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0459           break;                                              \
0460         default:                                              \
0461           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0462           break;                                              \
0463       }                                                       \
0464     }                                                         \
0465     else if ((__HANDLE__)->Instance == UART5)                 \
0466     {                                                         \
0467       switch(__HAL_RCC_GET_UART5_SOURCE())                    \
0468       {                                                       \
0469         case RCC_UART5CLKSOURCE_D2PCLK1:                      \
0470           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0471           break;                                              \
0472         case RCC_UART5CLKSOURCE_PLL2:                         \
0473           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0474           break;                                              \
0475         case RCC_UART5CLKSOURCE_PLL3:                         \
0476           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0477           break;                                              \
0478         case RCC_UART5CLKSOURCE_HSI:                          \
0479           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0480           break;                                              \
0481         case RCC_UART5CLKSOURCE_CSI:                          \
0482           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0483           break;                                              \
0484         case RCC_UART5CLKSOURCE_LSE:                          \
0485           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0486           break;                                              \
0487         default:                                              \
0488           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0489           break;                                              \
0490       }                                                       \
0491     }                                                         \
0492     else if((__HANDLE__)->Instance == USART6)                 \
0493     {                                                         \
0494       switch(__HAL_RCC_GET_USART6_SOURCE())                   \
0495       {                                                       \
0496         case RCC_USART6CLKSOURCE_D2PCLK2:                     \
0497           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK2;       \
0498           break;                                              \
0499         case RCC_USART6CLKSOURCE_PLL2:                        \
0500           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0501           break;                                              \
0502         case RCC_USART6CLKSOURCE_PLL3:                        \
0503           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0504           break;                                              \
0505         case RCC_USART6CLKSOURCE_HSI:                         \
0506           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0507           break;                                              \
0508         case RCC_USART6CLKSOURCE_CSI:                         \
0509           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0510           break;                                              \
0511         case RCC_USART6CLKSOURCE_LSE:                         \
0512           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0513           break;                                              \
0514         default:                                              \
0515           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0516           break;                                              \
0517       }                                                       \
0518     }                                                         \
0519     else if((__HANDLE__)->Instance == UART7)                  \
0520     {                                                         \
0521       switch(__HAL_RCC_GET_UART7_SOURCE())                    \
0522       {                                                       \
0523         case RCC_UART7CLKSOURCE_D2PCLK1:                      \
0524           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0525           break;                                              \
0526         case RCC_UART7CLKSOURCE_PLL2:                         \
0527           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0528           break;                                              \
0529         case RCC_UART7CLKSOURCE_PLL3:                         \
0530           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0531           break;                                              \
0532         case RCC_UART7CLKSOURCE_HSI:                          \
0533           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0534           break;                                              \
0535         case RCC_UART7CLKSOURCE_CSI:                          \
0536           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0537           break;                                              \
0538         case RCC_UART7CLKSOURCE_LSE:                          \
0539           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0540           break;                                              \
0541         default:                                              \
0542           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0543           break;                                              \
0544       }                                                       \
0545     }                                                         \
0546     else if((__HANDLE__)->Instance == UART8)                  \
0547     {                                                         \
0548       switch(__HAL_RCC_GET_UART8_SOURCE())                    \
0549       {                                                       \
0550         case RCC_UART8CLKSOURCE_D2PCLK1:                      \
0551           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_D2PCLK1;       \
0552           break;                                              \
0553         case RCC_UART8CLKSOURCE_PLL2:                         \
0554           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL2Q;         \
0555           break;                                              \
0556         case RCC_UART8CLKSOURCE_PLL3:                         \
0557           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PLL3Q;         \
0558           break;                                              \
0559         case RCC_UART8CLKSOURCE_HSI:                          \
0560           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \
0561           break;                                              \
0562         case RCC_UART8CLKSOURCE_CSI:                          \
0563           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_CSI;           \
0564           break;                                              \
0565         case RCC_UART8CLKSOURCE_LSE:                          \
0566           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \
0567           break;                                              \
0568         default:                                              \
0569           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \
0570           break;                                              \
0571       }                                                       \
0572     }                                                         \
0573     else                                                      \
0574     {                                                         \
0575       (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;         \
0576     }                                                         \
0577   } while(0U)
0578 #endif /* UART9 && USART10 */
0579 
0580 /** @brief  Compute the mask to apply to retrieve the received data
0581   *         according to the word length and to the parity bits activation.
0582   * @param  __HANDLE__ specifies the IRDA Handle.
0583   * @retval None, the mask to apply to the associated UART RDR register is stored in (__HANDLE__)->Mask field.
0584   */
0585 #define IRDA_MASK_COMPUTATION(__HANDLE__)                             \
0586   do {                                                                \
0587     if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_9B)          \
0588     {                                                                 \
0589       if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \
0590       {                                                               \
0591         (__HANDLE__)->Mask = 0x01FFU ;                                \
0592       }                                                               \
0593       else                                                            \
0594       {                                                               \
0595         (__HANDLE__)->Mask = 0x00FFU ;                                \
0596       }                                                               \
0597     }                                                                 \
0598     else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_8B)     \
0599     {                                                                 \
0600       if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \
0601       {                                                               \
0602         (__HANDLE__)->Mask = 0x00FFU ;                                \
0603       }                                                               \
0604       else                                                            \
0605       {                                                               \
0606         (__HANDLE__)->Mask = 0x007FU ;                                \
0607       }                                                               \
0608     }                                                                 \
0609     else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_7B)     \
0610     {                                                                 \
0611       if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \
0612       {                                                               \
0613         (__HANDLE__)->Mask = 0x007FU ;                                \
0614       }                                                               \
0615       else                                                            \
0616       {                                                               \
0617         (__HANDLE__)->Mask = 0x003FU ;                                \
0618       }                                                               \
0619     }                                                                 \
0620     else                                                              \
0621     {                                                                 \
0622       (__HANDLE__)->Mask = 0x0000U;                                   \
0623     }                                                                 \
0624   } while(0U)
0625 
0626 /** @brief Ensure that IRDA frame length is valid.
0627   * @param __LENGTH__ IRDA frame length.
0628   * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
0629   */
0630 #define IS_IRDA_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == IRDA_WORDLENGTH_7B) || \
0631                                          ((__LENGTH__) == IRDA_WORDLENGTH_8B) || \
0632                                          ((__LENGTH__) == IRDA_WORDLENGTH_9B))
0633 /**
0634   * @}
0635   */
0636 
0637 /* Exported functions --------------------------------------------------------*/
0638 
0639 /**
0640   * @}
0641   */
0642 
0643 /**
0644   * @}
0645   */
0646 
0647 #ifdef __cplusplus
0648 }
0649 #endif
0650 
0651 #endif /* STM32H7xx_HAL_IRDA_EX_H */
0652