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