STM32G474xx HAL 用户手册
stm32g4xx_ll_lpuart.c
转到此文件的文档。
00001 /**
00002   ******************************************************************************
00003   * @file    stm32g4xx_ll_lpuart.c
00004   * @author  MCD Application Team
00005   * @brief   LPUART LL 模块驱动。
00006   ******************************************************************************
00007   * @attention
00008   *
00009   * Copyright (c) 2019 STMicroelectronics.
00010   * All rights reserved.
00011   *
00012   * 本软件受可在本软件组件根目录中找到的 LICENSE 文件条款的约束。
00013   * 如果本软件未附带 LICENSE 文件,则按原样提供。
00014   *
00015   *
00016   ******************************************************************************
00017   */
00018 #if defined(USE_FULL_LL_DRIVER)
00019 
00020 /* 包含文件 ------------------------------------------------------------------*/
00021 #include "stm32g4xx_ll_lpuart.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 (LPUART1)
00035 
00036 /** @addtogroup LPUART_LL
00037   * @{
00038   */
00039 
00040 /* 私有类型 -------------------------------------------------------------*/
00041 /* 私有变量 ---------------------------------------------------------*/
00042 /* 私有常量 ---------------------------------------------------------*/
00043 /** @addtogroup LPUART_LL_Private_Constants
00044   * @{
00045   */
00046 
00047 /* 用于 LPUART 初始化的默认波特率值定义 */
00048 #define LPUART_DEFAULT_BAUDRATE          (9600U)
00049 
00050 /**
00051   * @}
00052   */
00053 
00054 
00055 /* 私有宏 ------------------------------------------------------------*/
00056 /** @addtogroup LPUART_LL_Private_Macros
00057   * @{
00058   */
00059 
00060 /* 检查 LPUART 寄存器配置的参数                  */
00061 
00062 #define IS_LL_LPUART_PRESCALER(__VALUE__)  (((__VALUE__) == LL_LPUART_PRESCALER_DIV1) \
00063                                             || ((__VALUE__) == LL_LPUART_PRESCALER_DIV2) \
00064                                             || ((__VALUE__) == LL_LPUART_PRESCALER_DIV4) \
00065                                             || ((__VALUE__) == LL_LPUART_PRESCALER_DIV6) \
00066                                             || ((__VALUE__) == LL_LPUART_PRESCALER_DIV8) \
00067                                             || ((__VALUE__) == LL_LPUART_PRESCALER_DIV10) \
00068                                             || ((__VALUE__) == LL_LPUART_PRESCALER_DIV12) \
00069                                             || ((__VALUE__) == LL_LPUART_PRESCALER_DIV16) \
00070                                             || ((__VALUE__) == LL_LPUART_PRESCALER_DIV32) \
00071                                             || ((__VALUE__) == LL_LPUART_PRESCALER_DIV64) \
00072                                             || ((__VALUE__) == LL_LPUART_PRESCALER_DIV128) \
00073                                             || ((__VALUE__) == LL_LPUART_PRESCALER_DIV256))
00074 
00075 /* __BAUDRATE__ 取决于适用于 LPUART BRR 寄存器的约束条件   */
00076 /*              值:                                                       */
00077 /*                - fck 必须在 [3 x 波特率, 4096 x 波特率] 范围内  */
00078 /*                - LPUART_BRR 寄存器值应 >= 0x300              */
00079 /*                - LPUART_BRR 寄存器值应 <= 0xFFFFF (20 位)  */
00080 /*              用户指定的波特率应属于 [8, 50000000]。*/
00081 #define IS_LL_LPUART_BAUDRATE(__BAUDRATE__) (((__BAUDRATE__) <= 50000000U) && ((__BAUDRATE__) >= 8U))
00082 
00083 /* __VALUE__ BRR 内容必须大于或等于 0x300。 */
00084 #define IS_LL_LPUART_BRR_MIN(__VALUE__)   ((__VALUE__) >= 0x300U)
00085 
00086 /* __VALUE__ BRR 内容必须小于或等于 0xFFFFF。 */
00087 #define IS_LL_LPUART_BRR_MAX(__VALUE__)   ((__VALUE__) <= 0x000FFFFFU)
00088 
00089 #define IS_LL_LPUART_DIRECTION(__VALUE__) (((__VALUE__) == LL_LPUART_DIRECTION_NONE) \
00090                                            || ((__VALUE__) == LL_LPUART_DIRECTION_RX) \
00091                                            || ((__VALUE__) == LL_LPUART_DIRECTION_TX) \
00092                                            || ((__VALUE__) == LL_LPUART_DIRECTION_TX_RX))
00093 
00094 #define IS_LL_LPUART_PARITY(__VALUE__) (((__VALUE__) == LL_LPUART_PARITY_NONE) \
00095                                         || ((__VALUE__) == LL_LPUART_PARITY_EVEN) \
00096                                         || ((__VALUE__) == LL_LPUART_PARITY_ODD))
00097 
00098 #define IS_LL_LPUART_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_LPUART_DATAWIDTH_7B) \
00099                                            || ((__VALUE__) == LL_LPUART_DATAWIDTH_8B) \
00100                                            || ((__VALUE__) == LL_LPUART_DATAWIDTH_9B))
00101 
00102 #define IS_LL_LPUART_STOPBITS(__VALUE__) (((__VALUE__) == LL_LPUART_STOPBITS_1) \
00103                                           || ((__VALUE__) == LL_LPUART_STOPBITS_2))
00104 
00105 #define IS_LL_LPUART_HWCONTROL(__VALUE__) (((__VALUE__) == LL_LPUART_HWCONTROL_NONE) \
00106                                            || ((__VALUE__) == LL_LPUART_HWCONTROL_RTS) \
00107                                            || ((__VALUE__) == LL_LPUART_HWCONTROL_CTS) \
00108                                            || ((__VALUE__) == LL_LPUART_HWCONTROL_RTS_CTS))
00109 
00110 /**
00111   * @}
00112   */
00113 
00114 /* 私有函数原型 -----------------------------------------------*/
00115 
00116 /* 导出函数 --------------------------------------------------------*/
00117 /** @addtogroup LPUART_LL_Exported_Functions
00118   * @{
00119   */
00120 
00121 /** @addtogroup LPUART_LL_EF_Init
00122   * @{
00123   */
00124 
00125 /**
00126   * @brief  反初始化 LPUART 寄存器(寄存器恢复为默认值)。
00127   * @param  LPUARTx LPUART 实例
00128   * @retval 一个 ErrorStatus 枚举值:
00129   *          - SUCCESS:LPUART 寄存器已反初始化
00130   *          - ERROR:不适用
00131   */
00132 ErrorStatus LL_LPUART_DeInit(const USART_TypeDef *LPUARTx)
00133 {
00134   ErrorStatus status = SUCCESS;
00135 
00136   /* 检查参数 */
00137   assert_param(IS_LPUART_INSTANCE(LPUARTx));
00138 
00139   if (LPUARTx == LPUART1)
00140   {
00141     /* 强制复位 LPUART 外设 */
00142     LL_APB1_GRP2_ForceReset(LL_APB1_GRP2_PERIPH_LPUART1);
00143 
00144     /* 释放 LPUART 外设复位 */
00145     LL_APB1_GRP2_ReleaseReset(LL_APB1_GRP2_PERIPH_LPUART1);
00146   }
00147   else
00148   {
00149     status = ERROR;
00150   }
00151 
00152   return (status);
00153 }
00154 
00155 /**
00156   * @brief  根据 LPUART_InitStruct 中指定的参数初始化 LPUART 寄存器。
00157   * @note   由于 LPUART 配置寄存器中的某些位只能在 LPUART 禁用时写入
00158   *         (USART_CR1_UE 位 =0),
00159   *         调用此函数前 LPUART 外设应处于禁用状态。
00160   *         否则,将返回 ERROR 结果。
00161   * @note   存储在 LPUART_InitStruct BaudRate 字段中的波特率值应有效(不为 0)。