| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519 | /**  ******************************************************************************  * @file    stm32f0xx_hal_usart_ex.h  * @author  MCD Application Team  * @brief   Header file of USART 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_USART_EX_H#define STM32F0xx_HAL_USART_EX_H#ifdef __cplusplusextern "C" {#endif/* Includes ------------------------------------------------------------------*/#include "stm32f0xx_hal_def.h"/** @addtogroup STM32F0xx_HAL_Driver  * @{  *//** @addtogroup USARTEx  * @{  *//* Exported types ------------------------------------------------------------*//* Exported constants --------------------------------------------------------*//** @defgroup USARTEx_Exported_Constants USARTEx Exported Constants  * @{  *//** @defgroup USARTEx_Word_Length USARTEx Word Length  * @{  */#if  defined(USART_CR1_M0)&& defined(USART_CR1_M1)#define USART_WORDLENGTH_7B                  (USART_CR1_M1)   /*!< 7-bit long USART frame */#define USART_WORDLENGTH_8B                  (0x00000000U)              /*!< 8-bit long USART frame */#define USART_WORDLENGTH_9B                  (USART_CR1_M0)   /*!< 9-bit long USART frame */#elif  defined(USART_CR1_M)#define USART_WORDLENGTH_8B                  (0x00000000U)              /*!< 8-bit long USART frame */#define USART_WORDLENGTH_9B                  (USART_CR1_M)    /*!< 9-bit long USART frame */#endif /* USART_CR1_M0 && USART_CR1_M *//**  * @}  *//**  * @}  *//* Private macros ------------------------------------------------------------*//** @defgroup USARTEx_Private_Macros USARTEx Private Macros  * @{  *//** @brief  Report the USART clock source.  * @param  __HANDLE__ specifies the USART Handle.  * @param  __CLOCKSOURCE__ output variable.  * @retval the USART clocking source, written in __CLOCKSOURCE__.  *//** @brief  Report the UART clock source.  * @param  __HANDLE__ specifies the UART Handle.  * @param  __CLOCKSOURCE__ output variable.  * @retval UART clocking source, written in __CLOCKSOURCE__.  */#if defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx)#define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \  do {                                                         \    switch(__HAL_RCC_GET_USART1_SOURCE())                      \    {                                                          \      case RCC_USART1CLKSOURCE_PCLK1:                          \        (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;           \        break;                                                 \      case RCC_USART1CLKSOURCE_HSI:                            \        (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI;             \        break;                                                 \      case RCC_USART1CLKSOURCE_SYSCLK:                         \        (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK;          \        break;                                                 \      case RCC_USART1CLKSOURCE_LSE:                            \        (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE;             \        break;                                                 \      default:                                                 \        (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;       \        break;                                                 \    }                                                          \  } while(0)#elif defined (STM32F030x8) || defined (STM32F070x6) ||  defined (STM32F042x6) || defined (STM32F048xx) \   || defined (STM32F051x8) || defined (STM32F058xx)#define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \  do {                                                         \    if((__HANDLE__)->Instance == USART1)                       \    {                                                          \      switch(__HAL_RCC_GET_USART1_SOURCE())                    \      {                                                        \        case RCC_USART1CLKSOURCE_PCLK1:                        \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;         \          break;                                               \        case RCC_USART1CLKSOURCE_HSI:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI;           \          break;                                               \        case RCC_USART1CLKSOURCE_SYSCLK:                       \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK;        \          break;                                               \        case RCC_USART1CLKSOURCE_LSE:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE;           \          break;                                               \        default:                                               \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;     \          break;                                               \      }                                                        \    }                                                          \    else if((__HANDLE__)->Instance == USART2)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else                                                       \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;         \    }                                                          \  } while(0)#elif defined (STM32F070xB)#define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \  do {                                                         \    if((__HANDLE__)->Instance == USART1)                       \    {                                                          \      switch(__HAL_RCC_GET_USART1_SOURCE())                    \      {                                                        \        case RCC_USART1CLKSOURCE_PCLK1:                        \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;         \          break;                                               \        case RCC_USART1CLKSOURCE_HSI:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI;           \          break;                                               \        case RCC_USART1CLKSOURCE_SYSCLK:                       \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK;        \          break;                                               \        case RCC_USART1CLKSOURCE_LSE:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE;           \          break;                                               \        default:                                               \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;     \          break;                                               \      }                                                        \    }                                                          \    else if((__HANDLE__)->Instance == USART2)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else if((__HANDLE__)->Instance == USART3)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else if((__HANDLE__)->Instance == USART4)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else                                                       \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;         \    }                                                          \  } while(0)#elif defined(STM32F071xB) || defined(STM32F072xB) || defined(STM32F078xx)#define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \  do {                                                         \    if((__HANDLE__)->Instance == USART1)                       \    {                                                          \      switch(__HAL_RCC_GET_USART1_SOURCE())                    \      {                                                        \        case RCC_USART1CLKSOURCE_PCLK1:                        \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;         \          break;                                               \        case RCC_USART1CLKSOURCE_HSI:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI;           \          break;                                               \        case RCC_USART1CLKSOURCE_SYSCLK:                       \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK;        \          break;                                               \        case RCC_USART1CLKSOURCE_LSE:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE;           \          break;                                               \        default:                                               \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;     \          break;                                               \      }                                                        \    }                                                          \    else if((__HANDLE__)->Instance == USART2)                  \    {                                                          \      switch(__HAL_RCC_GET_USART2_SOURCE())                    \      {                                                        \        case RCC_USART2CLKSOURCE_PCLK1:                        \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;         \          break;                                               \        case RCC_USART2CLKSOURCE_HSI:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI;           \          break;                                               \        case RCC_USART2CLKSOURCE_SYSCLK:                       \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK;        \          break;                                               \        case RCC_USART2CLKSOURCE_LSE:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE;           \          break;                                               \        default:                                               \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;     \          break;                                               \      }                                                        \    }                                                          \    else if((__HANDLE__)->Instance == USART3)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else if((__HANDLE__)->Instance == USART4)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else                                                       \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;         \    }                                                          \  } while(0)#elif defined(STM32F091xC) || defined (STM32F098xx)#define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \  do {                                                         \    if((__HANDLE__)->Instance == USART1)                       \    {                                                          \      switch(__HAL_RCC_GET_USART1_SOURCE())                    \      {                                                        \        case RCC_USART1CLKSOURCE_PCLK1:                        \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;         \          break;                                               \        case RCC_USART1CLKSOURCE_HSI:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI;           \          break;                                               \        case RCC_USART1CLKSOURCE_SYSCLK:                       \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK;        \          break;                                               \        case RCC_USART1CLKSOURCE_LSE:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE;           \          break;                                               \        default:                                               \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;     \          break;                                               \      }                                                        \    }                                                          \    else if((__HANDLE__)->Instance == USART2)                  \    {                                                          \      switch(__HAL_RCC_GET_USART2_SOURCE())                    \      {                                                        \        case RCC_USART2CLKSOURCE_PCLK1:                        \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;         \          break;                                               \        case RCC_USART2CLKSOURCE_HSI:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI;           \          break;                                               \        case RCC_USART2CLKSOURCE_SYSCLK:                       \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK;        \          break;                                               \        case RCC_USART2CLKSOURCE_LSE:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE;           \          break;                                               \        default:                                               \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;     \          break;                                               \      }                                                        \    }                                                          \    else if((__HANDLE__)->Instance == USART3)                  \    {                                                          \      switch(__HAL_RCC_GET_USART3_SOURCE())                    \      {                                                        \        case RCC_USART3CLKSOURCE_PCLK1:                        \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;         \          break;                                               \        case RCC_USART3CLKSOURCE_HSI:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI;           \          break;                                               \        case RCC_USART3CLKSOURCE_SYSCLK:                       \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK;        \          break;                                               \        case RCC_USART3CLKSOURCE_LSE:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE;           \          break;                                               \        default:                                               \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;     \          break;                                               \      }                                                        \    }                                                          \    else if((__HANDLE__)->Instance == USART4)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else if((__HANDLE__)->Instance == USART5)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else if((__HANDLE__)->Instance == USART6)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else if((__HANDLE__)->Instance == USART7)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else if((__HANDLE__)->Instance == USART8)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else                                                       \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;         \    }                                                          \  } while(0)#elif defined(STM32F030xC)#define USART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \  do {                                                         \    if((__HANDLE__)->Instance == USART1)                       \    {                                                          \      switch(__HAL_RCC_GET_USART1_SOURCE())                    \      {                                                        \        case RCC_USART1CLKSOURCE_PCLK1:                        \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;         \          break;                                               \        case RCC_USART1CLKSOURCE_HSI:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_HSI;           \          break;                                               \        case RCC_USART1CLKSOURCE_SYSCLK:                       \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_SYSCLK;        \          break;                                               \        case RCC_USART1CLKSOURCE_LSE:                          \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_LSE;           \          break;                                               \        default:                                               \          (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;     \          break;                                               \      }                                                        \    }                                                          \    else if((__HANDLE__)->Instance == USART2)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else if((__HANDLE__)->Instance == USART3)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else if((__HANDLE__)->Instance == USART4)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else if((__HANDLE__)->Instance == USART5)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else if((__HANDLE__)->Instance == USART6)                  \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_PCLK1;             \    }                                                          \    else                                                       \    {                                                          \      (__CLOCKSOURCE__) = USART_CLOCKSOURCE_UNDEFINED;         \    }                                                          \  } while(0)#endif /* defined(STM32F030x6) || defined(STM32F031x6) || defined(STM32F038xx) *//** @brief  Compute the USART 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 USART Handle.  * @retval None, the mask to apply to USART RDR register is stored in (__HANDLE__)->Mask field.  */#if  defined(USART_CR1_M0)&& defined(USART_CR1_M1)#define USART_MASK_COMPUTATION(__HANDLE__)                            \  do {                                                                \    if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_9B)         \    {                                                                 \      if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE)             \      {                                                               \        (__HANDLE__)->Mask = 0x01FFU;                                 \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU;                                 \      }                                                               \    }                                                                 \    else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_8B)    \    {                                                                 \      if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE)             \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU;                                 \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x007FU;                                 \      }                                                               \    }                                                                 \    else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_7B)    \    {                                                                 \      if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE)             \      {                                                               \        (__HANDLE__)->Mask = 0x007FU;                                 \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x003FU;                                 \      }                                                               \    }                                                                 \    else                                                              \    {                                                                 \      (__HANDLE__)->Mask = 0x0000U;                                   \    }                                                                 \  } while(0U)#elif  defined(USART_CR1_M)#define USART_MASK_COMPUTATION(__HANDLE__)                            \  do {                                                                \    if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_9B)         \    {                                                                 \      if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE)             \      {                                                               \        (__HANDLE__)->Mask = 0x01FFU;                                 \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU;                                 \      }                                                               \    }                                                                 \    else if ((__HANDLE__)->Init.WordLength == USART_WORDLENGTH_8B)    \    {                                                                 \      if ((__HANDLE__)->Init.Parity == USART_PARITY_NONE)             \      {                                                               \        (__HANDLE__)->Mask = 0x00FFU;                                 \      }                                                               \      else                                                            \      {                                                               \        (__HANDLE__)->Mask = 0x007FU;                                 \      }                                                               \    }                                                                 \    else                                                              \    {                                                                 \      (__HANDLE__)->Mask = 0x0000U;                                   \    }                                                                 \  } while(0U)#endif  /* USART_CR1_M0 && USART_CR1_M *//**  * @brief Ensure that USART frame length is valid.  * @param __LENGTH__ USART frame length.  * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)  */#if  defined(USART_CR1_M0)&& defined(USART_CR1_M1)#define IS_USART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == USART_WORDLENGTH_7B) || \                                          ((__LENGTH__) == USART_WORDLENGTH_8B) || \                                          ((__LENGTH__) == USART_WORDLENGTH_9B))#elif  defined(USART_CR1_M)#define IS_USART_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == USART_WORDLENGTH_8B) || \                                          ((__LENGTH__) == USART_WORDLENGTH_9B))#endif /* USART_CR1_M0 && USART_CR1_M *//**  * @}  *//* Exported functions --------------------------------------------------------*//** @addtogroup USARTEx_Exported_Functions  * @{  *//** @addtogroup USARTEx_Exported_Functions_Group1  * @{  *//* IO operation functions *****************************************************//**  * @}  *//** @addtogroup USARTEx_Exported_Functions_Group2  * @{  *//* Peripheral Control functions ***********************************************//**  * @}  *//**  * @}  *//**  * @}  *//**  * @}  */#ifdef __cplusplus}#endif#endif /* STM32F0xx_HAL_USART_EX_H */
 |