|
STM32G474xx HAL 用户手册
|
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)。