STM32G474xx HAL 用户手册
stm32g4xx_ll_usart.c
转到此文件的文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_ll_usart.c
00004   * @author  MCD Application Team
00005   * @brief   USART LL模块驱动程序。
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2019 STMicroelectronics.
00010   * All rights reserved.
00011   *
00012   * This software is licensed under terms that can be found in the LICENSE file
00013   * in the root directory of this software component.
00014   * If no LICENSE file comes with this software, it is provided AS-IS.
00015   *
00016   ******************************************************************************
00017   */
00018 #if defined(USE_FULL_LL_DRIVER)
00019 
00020 /* 包含文件 ------------------------------------------------------------------*/
00021 #include "stm32g4xx_ll_usart.h"
00022 #include "stm32g4xx_ll_rcc.h"
00023 #include "stm32g4xx_ll_bus.h"
00024 #ifdef USE_FULL_ASSERT
00025 #include "stm32_assert.h"
00026 #else
00027 #define assert_param(expr) ((void)0U)
00028 #endif /* USE_FULL_ASSERT */
00029 
00030 /** @addtogroup STM32G4xx_LL_Driver
00031   * @{
00032   */
00033 
00034 #if defined(USART1) || defined(USART2) || defined(USART3) || defined(UART4) || defined(UART5)
00035 
00036 /** @addtogroup USART_LL
00037   * @{
00038   */
00039 
00040 /* 私有类型 -------------------------------------------------------------*/
00041 /* 私有变量 ---------------------------------------------------------*/
00042 /* 私有常量 ---------------------------------------------------------*/
00043 /** @addtogroup USART_LL_Private_Constants
00044   * @{
00045   */
00046 
00047 /* 用于USART初始化的默认波特率值定义 */
00048 #define USART_DEFAULT_BAUDRATE          (9600U)
00049 
00050 /**
00051   * @}
00052   */
00053 
00054 /* 私有宏 ------------------------------------------------------------*/
00055 /** @addtogroup USART_LL_Private_Macros
00056   * @{
00057   */
00058 
00059 #define IS_LL_USART_PRESCALER(__VALUE__)  (((__VALUE__) == LL_USART_PRESCALER_DIV1) \
00060                                            || ((__VALUE__) == LL_USART_PRESCALER_DIV2) \
00061                                            || ((__VALUE__) == LL_USART_PRESCALER_DIV4) \
00062                                            || ((__VALUE__) == LL_USART_PRESCALER_DIV6) \
00063                                            || ((__VALUE__) == LL_USART_PRESCALER_DIV8) \
00064                                            || ((__VALUE__) == LL_USART_PRESCALER_DIV10) \
00065                                            || ((__VALUE__) == LL_USART_PRESCALER_DIV12) \
00066                                            || ((__VALUE__) == LL_USART_PRESCALER_DIV16) \
00067                                            || ((__VALUE__) == LL_USART_PRESCALER_DIV32) \
00068                                            || ((__VALUE__) == LL_USART_PRESCALER_DIV64) \
00069                                            || ((__VALUE__) == LL_USART_PRESCALER_DIV128) \
00070                                            || ((__VALUE__) == LL_USART_PRESCALER_DIV256))
00071 
00072 /* __BAUDRATE__ 最大波特率由可用的最大时钟频率除以USART使用的最小过采样率(即8)得出 */
00073 
00074 #define IS_LL_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) <= 18750000U)
00075 
00076 /* __VALUE__ 在16倍和8倍过采样的情况下,BRR内容必须大于或等于16d。 */
00077 #define IS_LL_USART_BRR_MIN(__VALUE__) ((__VALUE__) >= 16U)
00078 
00079 #define IS_LL_USART_DIRECTION(__VALUE__) (((__VALUE__) == LL_USART_DIRECTION_NONE) \
00080                                           || ((__VALUE__) == LL_USART_DIRECTION_RX) \
00081                                           || ((__VALUE__) == LL_USART_DIRECTION_TX) \
00082                                           || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
00083 
00084 #define IS_LL_USART_PARITY(__VALUE__) (((__VALUE__) == LL_USART_PARITY_NONE) \
00085                                        || ((__VALUE__) == LL_USART_PARITY_EVEN) \
00086                                        || ((__VALUE__) == LL_USART_PARITY_ODD))
00087 
00088 #define IS_LL_USART_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_USART_DATAWIDTH_7B) \
00089                                           || ((__VALUE__) == LL_USART_DATAWIDTH_8B) \
00090                                           || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
00091 
00092 #define IS_LL_USART_OVERSAMPLING(__VALUE__) (((__VALUE__) == LL_USART_OVERSAMPLING_16) \
00093                                              || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
00094 
00095 #define IS_LL_USART_LASTBITCLKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_LASTCLKPULSE_NO_OUTPUT) \
00096                                                  || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
00097 
00098 #define IS_LL_USART_CLOCKPHASE(__VALUE__) (((__VALUE__) == LL_USART_PHASE_1EDGE) \
00099                                            || ((__VALUE__) == LL_USART_PHASE_2EDGE))
00100 
00101 #define IS_LL_USART_CLOCKPOLARITY(__VALUE__) (((__VALUE__) == LL_USART_POLARITY_LOW) \
00102                                               || ((__VALUE__) == LL_USART_POLARITY_HIGH))
00103 
00104 #define IS_LL_USART_CLOCKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_CLOCK_DISABLE) \
00105                                             || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
00106 
00107 #define IS_LL_USART_STOPBITS(__VALUE__) (((__VALUE__) == LL_USART_STOPBITS_0_5) \
00108                                          || ((__VALUE__) == LL_USART_STOPBITS_1) \
00109                                          || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
00110                                          || ((__VALUE__) == LL_USART_STOPBITS_2))
00111 
00112 #define IS_LL_USART_HWCONTROL(__VALUE__) (((__VALUE__) == LL_USART_HWCONTROL_NONE) \
00113                                           || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
00114                                           || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
00115                                           || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
00116 
00117 /**
00118   * @}
00119   */
00120 
00121 /* 私有函数原型 -----------------------------------------------*/
00122 
00123 /* 导出函数 --------------------------------------------------------*/
00124 /** @addtogroup USART_LL_Exported_Functions
00125   * @{
00126   */
00127 
00128 /** @addtogroup USART_LL_EF_Init
00129   * @{
00130   */
00131 
00132 /**
00133   * @brief  反初始化USART寄存器(寄存器恢复为默认值)。
00134   * @param  USARTx USART实例
00135   * @retval 一个ErrorStatus枚举值:
00136   *          - SUCCESS: USART寄存器已反初始化
00137   *          - ERROR: USART寄存器未反初始化
00138   */
00139 ErrorStatus LL_USART_DeInit(const USART_TypeDef *USARTx)
00140 {
00141   ErrorStatus status = SUCCESS;
00142 
00143   /* 检查参数 */
00144   assert_param(IS_UART_INSTANCE(USARTx));
00145 
00146   if (USARTx == USART1)
00147   {
00148     /* 强制复位USART时钟 */
00149     LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_USART1);
00150 
00151     /* 释放USART时钟复位 */
00152     LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_USART1);
00153   }
00154   else if (USARTx == USART2)
00155   {
00156     /* 强制复位USART时钟 */
00157     LL_APB1_GRP1_ForceReset(