| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 | /**  ******************************************************************************  * @file    stm32f0xx_hal_irda_ex.h  * @author  MCD Application Team  * @brief   Header file of IRDA HAL Extended module.  ******************************************************************************  * @attention  *  * Copyright (c) 2016 STMicroelectronics.  * All rights reserved.  *  * This software is licensed under terms that can be found in the LICENSE file  * in the root directory of this software component.  * If no LICENSE file comes with this software, it is provided AS-IS.  *  ******************************************************************************  *//* Define to prevent recursive inclusion -------------------------------------*/#ifndef STM32F0xx_HAL_IRDA_EX_H#define STM32F0xx_HAL_IRDA_EX_H#ifdef __cplusplusextern "C" {#endif#if defined(USART_IRDA_SUPPORT)/* Includes ------------------------------------------------------------------*/#include "stm32f0xx_hal_def.h"/** @addtogroup STM32F0xx_HAL_Driver  * @{  *//** @defgroup IRDAEx IRDAEx  * @brief IRDA Extended HAL module driver  * @{  *//* Exported types ------------------------------------------------------------*//* Exported constants --------------------------------------------------------*//** @defgroup IRDAEx_Extended_Exported_Constants IRDAEx Extended Exported Constants  * @{  *//** @defgroup IRDAEx_Word_Length IRDAEx Word Length  * @{  */#if defined(USART_CR1_M1)&&defined(USART_CR1_M0)#define IRDA_WORDLENGTH_7B                  USART_CR1_M1   /*!< 7-bit long frame */#define IRDA_WORDLENGTH_8B                  0x00000000U    /*!< 8-bit long frame */#define IRDA_WORDLENGTH_9B                  USART_CR1_M0   /*!< 9-bit long frame */#else#if defined(USART_CR1_M)#define IRDA_WORDLENGTH_8B                  (0x00000000U)              /*!< 8-bit long frame */#define IRDA_WORDLENGTH_9B                  USART_CR1_M    /*!< 9-bit long frame */#endif  /* USART_CR1_M1 */#endif  /* USART_CR1_M1 && USART_CR1_M0 *//**  * @}  *//**  * @}  *//* Exported macros -----------------------------------------------------------*//* Private macros ------------------------------------------------------------*//** @defgroup IRDAEx_Private_Macros IRDAEx Private Macros  * @{  *//** @brief  Report the IRDA clock source.  * @param  __HANDLE__ specifies the IRDA Handle.  * @param  __CLOCKSOURCE__ output variable.  * @retval IRDA clocking source, written in __CLOCKSOURCE__.  */#if defined(STM32F031x6) || defined(STM32F038xx)#define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \  do {                                                        \    switch(__HAL_RCC_GET_USART1_SOURCE())                     \    {                                                         \      case RCC_USART1CLKSOURCE_PCLK1:                         \        (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;           \        break;                                                \      case RCC_USART1CLKSOURCE_HSI:                           \        (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;             \        break;                                                \      case RCC_USART1CLKSOURCE_SYSCLK:                        \        (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;          \        break;                                                \      case RCC_USART1CLKSOURCE_LSE:                           \        (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;             \        break;                                                \      default:                                                \        (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;       \        break;                                                \    }                                                         \  } while(0)#elif defined (STM32F042x6) || defined (STM32F048xx) || defined (STM32F051x8) || defined (STM32F058xx)#define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \  do {                                                        \    if((__HANDLE__)->Instance == USART1)                      \    {                                                         \      switch(__HAL_RCC_GET_USART1_SOURCE())                   \      {                                                       \        case RCC_USART1CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART1CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART1CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART1CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART2)                 \    {                                                         \      (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;             \    }                                                         \    else                                                      \    {                                                         \      (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;         \    }                                                         \  } while(0)#elif defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)#define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \  do {                                                        \    if((__HANDLE__)->Instance == USART1)                      \    {                                                         \      switch(__HAL_RCC_GET_USART1_SOURCE())                   \      {                                                       \        case RCC_USART1CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART1CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART1CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART1CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART2)                 \    {                                                         \      switch(__HAL_RCC_GET_USART2_SOURCE())                   \      {                                                       \        case RCC_USART2CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART2CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART2CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART2CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART3)                 \    {                                                         \      (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART4)                 \    {                                                         \      (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;             \    }                                                         \    else                                                      \    {                                                         \      (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;         \    }                                                         \  } while(0)#elif defined(STM32F091xC) || defined(STM32F098xx)#define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)       \  do {                                                        \    if((__HANDLE__)->Instance == USART1)                      \    {                                                         \      switch(__HAL_RCC_GET_USART1_SOURCE())                   \      {                                                       \        case RCC_USART1CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART1CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART1CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART1CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART2)                 \    {                                                         \      switch(__HAL_RCC_GET_USART2_SOURCE())                   \      {                                                       \        case RCC_USART2CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART2CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART2CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART2CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART3)                 \    {                                                         \      switch(__HAL_RCC_GET_USART3_SOURCE())                   \      {                                                       \        case RCC_USART3CLKSOURCE_PCLK1:                       \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;         \          break;                                              \        case RCC_USART3CLKSOURCE_HSI:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;           \          break;                                              \        case RCC_USART3CLKSOURCE_SYSCLK:                      \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;        \          break;                                              \        case RCC_USART3CLKSOURCE_LSE:                         \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;           \          break;                                              \        default:                                              \          (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;     \          break;                                              \      }                                                       \    }                                                         \    else if((__HANDLE__)->Instance == USART4)                 \    {                                                         \      (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART5)                 \    {                                                         \      (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART6)                 \    {                                                         \      (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART7)                 \    {                                                         \      (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;             \    }                                                         \    else if((__HANDLE__)->Instance == USART8)                 \    {                                                         \      (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;             \    }                                                         \    else                                                      \    {                                                         \      (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;         \    }                                                         \  } while(0)#endif /* defined(STM32F031x6) || defined(STM32F038xx) *//** @brief  Compute the mask to apply to retrieve the received data  *         according to the word length and to the parity bits activation.  * @note   If PCE = 1, the parity bit is not included in the data extracted  *         by the reception API().  *         This masking operation is not carried out in the case of  *         DMA transfers.  * @param  __HANDLE__ specifies the IRDA Handle.  * @retval None, the mask to apply to the associated UART RDR register is stored in (__HANDLE__)->Mask field.  */#if defined(USART_CR1_M1)&&defined(USART_CR1_M0)#define IRDA_MASK_COMPUTATION(__HANDLE__)                             \  do {                                                                \    if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_9B)          \    {                                                                 \      if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \      {                                                               \        (__HANDLE__)->Mask = 0x01FFU ;                                \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU ;                                \      }                                                               \    }                                                                 \    else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_8B)     \    {                                                                 \      if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU ;                                \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x007FU ;                                \      }                                                               \    }                                                                 \    else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_7B)     \    {                                                                 \      if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \      {                                                               \        (__HANDLE__)->Mask = 0x007FU ;                                \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x003FU ;                                \      }                                                               \    }                                                                 \    else                                                              \    {                                                                 \      (__HANDLE__)->Mask = 0x0000U;                                   \    }                                                                 \  } while(0U)#else#if defined(USART_CR1_M)#define IRDA_MASK_COMPUTATION(__HANDLE__)                             \  do {                                                                \    if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_9B)          \    {                                                                 \      if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \      {                                                               \        (__HANDLE__)->Mask = 0x01FFU ;                                \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU ;                                \      }                                                               \    }                                                                 \    else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_8B)     \    {                                                                 \      if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU ;                                \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x007FU ;                                \      }                                                               \    }                                                                 \  } while(0U)#endif  /* USART_CR1_M */#endif  /* USART_CR1_M && USART_CR1_M0 *//** @brief Ensure that IRDA frame length is valid.  * @param __LENGTH__ IRDA frame length.  * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)  */#if defined(USART_CR1_M1)&&defined(USART_CR1_M0)#define IS_IRDA_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == IRDA_WORDLENGTH_7B) || \                                         ((__LENGTH__) == IRDA_WORDLENGTH_8B) || \                                         ((__LENGTH__) == IRDA_WORDLENGTH_9B))#else#if defined(USART_CR1_M)#define IS_IRDA_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == IRDA_WORDLENGTH_8B) || \                                         ((__LENGTH__) == IRDA_WORDLENGTH_9B))#endif  /* USART_CR1_M */#endif  /* USART_CR1_M && USART_CR1_M0 *//**  * @}  *//* Exported functions --------------------------------------------------------*//**  * @}  *//**  * @}  */#endif /* USART_IRDA_SUPPORT */#ifdef __cplusplus}#endif#endif /* STM32F0xx_HAL_IRDA_EX_H */
 |