mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
167:e84263d55307
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 167:e84263d55307 1 /**
AnnaBridge 167:e84263d55307 2 ******************************************************************************
AnnaBridge 167:e84263d55307 3 * @file stm32f2xx_ll_usart.c
AnnaBridge 167:e84263d55307 4 * @author MCD Application Team
AnnaBridge 167:e84263d55307 5 * @version V1.2.1
AnnaBridge 167:e84263d55307 6 * @date 14-April-2017
AnnaBridge 167:e84263d55307 7 * @brief USART LL module driver.
AnnaBridge 167:e84263d55307 8 ******************************************************************************
AnnaBridge 167:e84263d55307 9 * @attention
AnnaBridge 167:e84263d55307 10 *
AnnaBridge 167:e84263d55307 11 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
AnnaBridge 167:e84263d55307 12 *
AnnaBridge 167:e84263d55307 13 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 167:e84263d55307 14 * are permitted provided that the following conditions are met:
AnnaBridge 167:e84263d55307 15 * 1. Redistributions of source code must retain the above copyright notice,
AnnaBridge 167:e84263d55307 16 * this list of conditions and the following disclaimer.
AnnaBridge 167:e84263d55307 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
AnnaBridge 167:e84263d55307 18 * this list of conditions and the following disclaimer in the documentation
AnnaBridge 167:e84263d55307 19 * and/or other materials provided with the distribution.
AnnaBridge 167:e84263d55307 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
AnnaBridge 167:e84263d55307 21 * may be used to endorse or promote products derived from this software
AnnaBridge 167:e84263d55307 22 * without specific prior written permission.
AnnaBridge 167:e84263d55307 23 *
AnnaBridge 167:e84263d55307 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AnnaBridge 167:e84263d55307 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
AnnaBridge 167:e84263d55307 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 167:e84263d55307 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
AnnaBridge 167:e84263d55307 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
AnnaBridge 167:e84263d55307 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
AnnaBridge 167:e84263d55307 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
AnnaBridge 167:e84263d55307 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
AnnaBridge 167:e84263d55307 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
AnnaBridge 167:e84263d55307 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 167:e84263d55307 34 *
AnnaBridge 167:e84263d55307 35 ******************************************************************************
AnnaBridge 167:e84263d55307 36 */
AnnaBridge 167:e84263d55307 37 #if defined(USE_FULL_LL_DRIVER)
AnnaBridge 167:e84263d55307 38
AnnaBridge 167:e84263d55307 39 /* Includes ------------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 40 #include "stm32f2xx_ll_usart.h"
AnnaBridge 167:e84263d55307 41 #include "stm32f2xx_ll_rcc.h"
AnnaBridge 167:e84263d55307 42 #include "stm32f2xx_ll_bus.h"
AnnaBridge 167:e84263d55307 43 #ifdef USE_FULL_ASSERT
AnnaBridge 167:e84263d55307 44 #include "stm32_assert.h"
AnnaBridge 167:e84263d55307 45 #else
AnnaBridge 167:e84263d55307 46 #define assert_param(expr) ((void)0U)
AnnaBridge 167:e84263d55307 47 #endif
AnnaBridge 167:e84263d55307 48
AnnaBridge 167:e84263d55307 49 /** @addtogroup STM32F2xx_LL_Driver
AnnaBridge 167:e84263d55307 50 * @{
AnnaBridge 167:e84263d55307 51 */
AnnaBridge 167:e84263d55307 52
AnnaBridge 167:e84263d55307 53 #if defined (USART1) || defined (USART2) || defined (USART3) || defined (USART6) || defined (UART4) || defined (UART5)
AnnaBridge 167:e84263d55307 54
AnnaBridge 167:e84263d55307 55 /** @addtogroup USART_LL
AnnaBridge 167:e84263d55307 56 * @{
AnnaBridge 167:e84263d55307 57 */
AnnaBridge 167:e84263d55307 58
AnnaBridge 167:e84263d55307 59 /* Private types -------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 60 /* Private variables ---------------------------------------------------------*/
AnnaBridge 167:e84263d55307 61 /* Private constants ---------------------------------------------------------*/
AnnaBridge 167:e84263d55307 62 /** @addtogroup USART_LL_Private_Constants
AnnaBridge 167:e84263d55307 63 * @{
AnnaBridge 167:e84263d55307 64 */
AnnaBridge 167:e84263d55307 65
AnnaBridge 167:e84263d55307 66 /**
AnnaBridge 167:e84263d55307 67 * @}
AnnaBridge 167:e84263d55307 68 */
AnnaBridge 167:e84263d55307 69
AnnaBridge 167:e84263d55307 70
AnnaBridge 167:e84263d55307 71 /* Private macros ------------------------------------------------------------*/
AnnaBridge 167:e84263d55307 72 /** @addtogroup USART_LL_Private_Macros
AnnaBridge 167:e84263d55307 73 * @{
AnnaBridge 167:e84263d55307 74 */
AnnaBridge 167:e84263d55307 75
AnnaBridge 167:e84263d55307 76 /* __BAUDRATE__ The maximum Baud Rate is derived from the maximum clock available
AnnaBridge 167:e84263d55307 77 * divided by the smallest oversampling used on the USART (i.e. 8) */
AnnaBridge 167:e84263d55307 78 #define IS_LL_USART_BAUDRATE(__BAUDRATE__) ((__BAUDRATE__) <= 10000000U)
AnnaBridge 167:e84263d55307 79
AnnaBridge 167:e84263d55307 80 #define IS_LL_USART_DIRECTION(__VALUE__) (((__VALUE__) == LL_USART_DIRECTION_NONE) \
AnnaBridge 167:e84263d55307 81 || ((__VALUE__) == LL_USART_DIRECTION_RX) \
AnnaBridge 167:e84263d55307 82 || ((__VALUE__) == LL_USART_DIRECTION_TX) \
AnnaBridge 167:e84263d55307 83 || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
AnnaBridge 167:e84263d55307 84
AnnaBridge 167:e84263d55307 85 #define IS_LL_USART_PARITY(__VALUE__) (((__VALUE__) == LL_USART_PARITY_NONE) \
AnnaBridge 167:e84263d55307 86 || ((__VALUE__) == LL_USART_PARITY_EVEN) \
AnnaBridge 167:e84263d55307 87 || ((__VALUE__) == LL_USART_PARITY_ODD))
AnnaBridge 167:e84263d55307 88
AnnaBridge 167:e84263d55307 89 #define IS_LL_USART_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_USART_DATAWIDTH_8B) \
AnnaBridge 167:e84263d55307 90 || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
AnnaBridge 167:e84263d55307 91
AnnaBridge 167:e84263d55307 92 #define IS_LL_USART_OVERSAMPLING(__VALUE__) (((__VALUE__) == LL_USART_OVERSAMPLING_16) \
AnnaBridge 167:e84263d55307 93 || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
AnnaBridge 167:e84263d55307 94
AnnaBridge 167:e84263d55307 95 #define IS_LL_USART_LASTBITCLKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_LASTCLKPULSE_NO_OUTPUT) \
AnnaBridge 167:e84263d55307 96 || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
AnnaBridge 167:e84263d55307 97
AnnaBridge 167:e84263d55307 98 #define IS_LL_USART_CLOCKPHASE(__VALUE__) (((__VALUE__) == LL_USART_PHASE_1EDGE) \
AnnaBridge 167:e84263d55307 99 || ((__VALUE__) == LL_USART_PHASE_2EDGE))
AnnaBridge 167:e84263d55307 100
AnnaBridge 167:e84263d55307 101 #define IS_LL_USART_CLOCKPOLARITY(__VALUE__) (((__VALUE__) == LL_USART_POLARITY_LOW) \
AnnaBridge 167:e84263d55307 102 || ((__VALUE__) == LL_USART_POLARITY_HIGH))
AnnaBridge 167:e84263d55307 103
AnnaBridge 167:e84263d55307 104 #define IS_LL_USART_CLOCKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_CLOCK_DISABLE) \
AnnaBridge 167:e84263d55307 105 || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
AnnaBridge 167:e84263d55307 106
AnnaBridge 167:e84263d55307 107 #define IS_LL_USART_STOPBITS(__VALUE__) (((__VALUE__) == LL_USART_STOPBITS_0_5) \
AnnaBridge 167:e84263d55307 108 || ((__VALUE__) == LL_USART_STOPBITS_1) \
AnnaBridge 167:e84263d55307 109 || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
AnnaBridge 167:e84263d55307 110 || ((__VALUE__) == LL_USART_STOPBITS_2))
AnnaBridge 167:e84263d55307 111
AnnaBridge 167:e84263d55307 112 #define IS_LL_USART_HWCONTROL(__VALUE__) (((__VALUE__) == LL_USART_HWCONTROL_NONE) \
AnnaBridge 167:e84263d55307 113 || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
AnnaBridge 167:e84263d55307 114 || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
AnnaBridge 167:e84263d55307 115 || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
AnnaBridge 167:e84263d55307 116
AnnaBridge 167:e84263d55307 117 /**
AnnaBridge 167:e84263d55307 118 * @}
AnnaBridge 167:e84263d55307 119 */
AnnaBridge 167:e84263d55307 120
AnnaBridge 167:e84263d55307 121 /* Private function prototypes -----------------------------------------------*/
AnnaBridge 167:e84263d55307 122
AnnaBridge 167:e84263d55307 123 /* Exported functions --------------------------------------------------------*/
AnnaBridge 167:e84263d55307 124 /** @addtogroup USART_LL_Exported_Functions
AnnaBridge 167:e84263d55307 125 * @{
AnnaBridge 167:e84263d55307 126 */
AnnaBridge 167:e84263d55307 127
AnnaBridge 167:e84263d55307 128 /** @addtogroup USART_LL_EF_Init
AnnaBridge 167:e84263d55307 129 * @{
AnnaBridge 167:e84263d55307 130 */
AnnaBridge 167:e84263d55307 131
AnnaBridge 167:e84263d55307 132 /**
AnnaBridge 167:e84263d55307 133 * @brief De-initialize USART registers (Registers restored to their default values).
AnnaBridge 167:e84263d55307 134 * @param USARTx USART Instance
AnnaBridge 167:e84263d55307 135 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 136 * - SUCCESS: USART registers are de-initialized
AnnaBridge 167:e84263d55307 137 * - ERROR: USART registers are not de-initialized
AnnaBridge 167:e84263d55307 138 */
AnnaBridge 167:e84263d55307 139 ErrorStatus LL_USART_DeInit(USART_TypeDef *USARTx)
AnnaBridge 167:e84263d55307 140 {
AnnaBridge 167:e84263d55307 141 ErrorStatus status = SUCCESS;
AnnaBridge 167:e84263d55307 142
AnnaBridge 167:e84263d55307 143 /* Check the parameters */
AnnaBridge 167:e84263d55307 144 assert_param(IS_UART_INSTANCE(USARTx));
AnnaBridge 167:e84263d55307 145
AnnaBridge 167:e84263d55307 146 if (USARTx == USART1)
AnnaBridge 167:e84263d55307 147 {
AnnaBridge 167:e84263d55307 148 /* Force reset of USART clock */
AnnaBridge 167:e84263d55307 149 LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_USART1);
AnnaBridge 167:e84263d55307 150
AnnaBridge 167:e84263d55307 151 /* Release reset of USART clock */
AnnaBridge 167:e84263d55307 152 LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_USART1);
AnnaBridge 167:e84263d55307 153 }
AnnaBridge 167:e84263d55307 154 else if (USARTx == USART2)
AnnaBridge 167:e84263d55307 155 {
AnnaBridge 167:e84263d55307 156 /* Force reset of USART clock */
AnnaBridge 167:e84263d55307 157 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_USART2);
AnnaBridge 167:e84263d55307 158
AnnaBridge 167:e84263d55307 159 /* Release reset of USART clock */
AnnaBridge 167:e84263d55307 160 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_USART2);
AnnaBridge 167:e84263d55307 161 }
AnnaBridge 167:e84263d55307 162 else if (USARTx == USART3)
AnnaBridge 167:e84263d55307 163 {
AnnaBridge 167:e84263d55307 164 /* Force reset of USART clock */
AnnaBridge 167:e84263d55307 165 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_USART3);
AnnaBridge 167:e84263d55307 166
AnnaBridge 167:e84263d55307 167 /* Release reset of USART clock */
AnnaBridge 167:e84263d55307 168 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_USART3);
AnnaBridge 167:e84263d55307 169 }
AnnaBridge 167:e84263d55307 170 else if (USARTx == USART6)
AnnaBridge 167:e84263d55307 171 {
AnnaBridge 167:e84263d55307 172 /* Force reset of USART clock */
AnnaBridge 167:e84263d55307 173 LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_USART6);
AnnaBridge 167:e84263d55307 174
AnnaBridge 167:e84263d55307 175 /* Release reset of USART clock */
AnnaBridge 167:e84263d55307 176 LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_USART6);
AnnaBridge 167:e84263d55307 177 }
AnnaBridge 167:e84263d55307 178 else if (USARTx == UART4)
AnnaBridge 167:e84263d55307 179 {
AnnaBridge 167:e84263d55307 180 /* Force reset of UART clock */
AnnaBridge 167:e84263d55307 181 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_UART4);
AnnaBridge 167:e84263d55307 182
AnnaBridge 167:e84263d55307 183 /* Release reset of UART clock */
AnnaBridge 167:e84263d55307 184 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_UART4);
AnnaBridge 167:e84263d55307 185 }
AnnaBridge 167:e84263d55307 186 else if (USARTx == UART5)
AnnaBridge 167:e84263d55307 187 {
AnnaBridge 167:e84263d55307 188 /* Force reset of UART clock */
AnnaBridge 167:e84263d55307 189 LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_UART5);
AnnaBridge 167:e84263d55307 190
AnnaBridge 167:e84263d55307 191 /* Release reset of UART clock */
AnnaBridge 167:e84263d55307 192 LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_UART5);
AnnaBridge 167:e84263d55307 193 }
AnnaBridge 167:e84263d55307 194 else
AnnaBridge 167:e84263d55307 195 {
AnnaBridge 167:e84263d55307 196 status = ERROR;
AnnaBridge 167:e84263d55307 197 }
AnnaBridge 167:e84263d55307 198
AnnaBridge 167:e84263d55307 199 return (status);
AnnaBridge 167:e84263d55307 200 }
AnnaBridge 167:e84263d55307 201
AnnaBridge 167:e84263d55307 202 /**
AnnaBridge 167:e84263d55307 203 * @brief Initialize USART registers according to the specified
AnnaBridge 167:e84263d55307 204 * parameters in USART_InitStruct.
AnnaBridge 167:e84263d55307 205 * @note As some bits in USART configuration registers can only be written when the USART is disabled (USART_CR1_UE bit =0),
AnnaBridge 167:e84263d55307 206 * USART IP should be in disabled state prior calling this function. Otherwise, ERROR result will be returned.
AnnaBridge 167:e84263d55307 207 * @note Baud rate value stored in USART_InitStruct BaudRate field, should be valid (different from 0).
AnnaBridge 167:e84263d55307 208 * @param USARTx USART Instance
AnnaBridge 167:e84263d55307 209 * @param USART_InitStruct: pointer to a LL_USART_InitTypeDef structure
AnnaBridge 167:e84263d55307 210 * that contains the configuration information for the specified USART peripheral.
AnnaBridge 167:e84263d55307 211 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 212 * - SUCCESS: USART registers are initialized according to USART_InitStruct content
AnnaBridge 167:e84263d55307 213 * - ERROR: Problem occurred during USART Registers initialization
AnnaBridge 167:e84263d55307 214 */
AnnaBridge 167:e84263d55307 215 ErrorStatus LL_USART_Init(USART_TypeDef *USARTx, LL_USART_InitTypeDef *USART_InitStruct)
AnnaBridge 167:e84263d55307 216 {
AnnaBridge 167:e84263d55307 217 ErrorStatus status = ERROR;
AnnaBridge 167:e84263d55307 218 uint32_t periphclk = LL_RCC_PERIPH_FREQUENCY_NO;
AnnaBridge 167:e84263d55307 219 LL_RCC_ClocksTypeDef rcc_clocks;
AnnaBridge 167:e84263d55307 220
AnnaBridge 167:e84263d55307 221 /* Check the parameters */
AnnaBridge 167:e84263d55307 222 assert_param(IS_UART_INSTANCE(USARTx));
AnnaBridge 167:e84263d55307 223 assert_param(IS_LL_USART_BAUDRATE(USART_InitStruct->BaudRate));
AnnaBridge 167:e84263d55307 224 assert_param(IS_LL_USART_DATAWIDTH(USART_InitStruct->DataWidth));
AnnaBridge 167:e84263d55307 225 assert_param(IS_LL_USART_STOPBITS(USART_InitStruct->StopBits));
AnnaBridge 167:e84263d55307 226 assert_param(IS_LL_USART_PARITY(USART_InitStruct->Parity));
AnnaBridge 167:e84263d55307 227 assert_param(IS_LL_USART_DIRECTION(USART_InitStruct->TransferDirection));
AnnaBridge 167:e84263d55307 228 assert_param(IS_LL_USART_HWCONTROL(USART_InitStruct->HardwareFlowControl));
AnnaBridge 167:e84263d55307 229 assert_param(IS_LL_USART_OVERSAMPLING(USART_InitStruct->OverSampling));
AnnaBridge 167:e84263d55307 230
AnnaBridge 167:e84263d55307 231 /* USART needs to be in disabled state, in order to be able to configure some bits in
AnnaBridge 167:e84263d55307 232 CRx registers */
AnnaBridge 167:e84263d55307 233 if (LL_USART_IsEnabled(USARTx) == 0U)
AnnaBridge 167:e84263d55307 234 {
AnnaBridge 167:e84263d55307 235 /*---------------------------- USART CR1 Configuration -----------------------
AnnaBridge 167:e84263d55307 236 * Configure USARTx CR1 (USART Word Length, Parity, Mode and Oversampling bits) with parameters:
AnnaBridge 167:e84263d55307 237 * - DataWidth: USART_CR1_M bits according to USART_InitStruct->DataWidth value
AnnaBridge 167:e84263d55307 238 * - Parity: USART_CR1_PCE, USART_CR1_PS bits according to USART_InitStruct->Parity value
AnnaBridge 167:e84263d55307 239 * - TransferDirection: USART_CR1_TE, USART_CR1_RE bits according to USART_InitStruct->TransferDirection value
AnnaBridge 167:e84263d55307 240 * - Oversampling: USART_CR1_OVER8 bit according to USART_InitStruct->OverSampling value.
AnnaBridge 167:e84263d55307 241 */
AnnaBridge 167:e84263d55307 242 MODIFY_REG(USARTx->CR1,
AnnaBridge 167:e84263d55307 243 (USART_CR1_M | USART_CR1_PCE | USART_CR1_PS |
AnnaBridge 167:e84263d55307 244 USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8),
AnnaBridge 167:e84263d55307 245 (USART_InitStruct->DataWidth | USART_InitStruct->Parity |
AnnaBridge 167:e84263d55307 246 USART_InitStruct->TransferDirection | USART_InitStruct->OverSampling));
AnnaBridge 167:e84263d55307 247
AnnaBridge 167:e84263d55307 248 /*---------------------------- USART CR2 Configuration -----------------------
AnnaBridge 167:e84263d55307 249 * Configure USARTx CR2 (Stop bits) with parameters:
AnnaBridge 167:e84263d55307 250 * - Stop Bits: USART_CR2_STOP bits according to USART_InitStruct->StopBits value.
AnnaBridge 167:e84263d55307 251 * - CLKEN, CPOL, CPHA and LBCL bits are to be configured using LL_USART_ClockInit().
AnnaBridge 167:e84263d55307 252 */
AnnaBridge 167:e84263d55307 253 LL_USART_SetStopBitsLength(USARTx, USART_InitStruct->StopBits);
AnnaBridge 167:e84263d55307 254
AnnaBridge 167:e84263d55307 255 /*---------------------------- USART CR3 Configuration -----------------------
AnnaBridge 167:e84263d55307 256 * Configure USARTx CR3 (Hardware Flow Control) with parameters:
AnnaBridge 167:e84263d55307 257 * - HardwareFlowControl: USART_CR3_RTSE, USART_CR3_CTSE bits according to USART_InitStruct->HardwareFlowControl value.
AnnaBridge 167:e84263d55307 258 */
AnnaBridge 167:e84263d55307 259 LL_USART_SetHWFlowCtrl(USARTx, USART_InitStruct->HardwareFlowControl);
AnnaBridge 167:e84263d55307 260
AnnaBridge 167:e84263d55307 261 /*---------------------------- USART BRR Configuration -----------------------
AnnaBridge 167:e84263d55307 262 * Retrieve Clock frequency used for USART Peripheral
AnnaBridge 167:e84263d55307 263 */
AnnaBridge 167:e84263d55307 264 LL_RCC_GetSystemClocksFreq(&rcc_clocks);
AnnaBridge 167:e84263d55307 265 if (USARTx == USART1)
AnnaBridge 167:e84263d55307 266 {
AnnaBridge 167:e84263d55307 267 periphclk = rcc_clocks.PCLK2_Frequency;
AnnaBridge 167:e84263d55307 268 }
AnnaBridge 167:e84263d55307 269 else if (USARTx == USART2)
AnnaBridge 167:e84263d55307 270 {
AnnaBridge 167:e84263d55307 271 periphclk = rcc_clocks.PCLK1_Frequency;
AnnaBridge 167:e84263d55307 272 }
AnnaBridge 167:e84263d55307 273 else if (USARTx == USART3)
AnnaBridge 167:e84263d55307 274 {
AnnaBridge 167:e84263d55307 275 periphclk = rcc_clocks.PCLK1_Frequency;
AnnaBridge 167:e84263d55307 276 }
AnnaBridge 167:e84263d55307 277 else if (USARTx == USART6)
AnnaBridge 167:e84263d55307 278 {
AnnaBridge 167:e84263d55307 279 periphclk = rcc_clocks.PCLK2_Frequency;
AnnaBridge 167:e84263d55307 280 }
AnnaBridge 167:e84263d55307 281 else if (USARTx == UART4)
AnnaBridge 167:e84263d55307 282 {
AnnaBridge 167:e84263d55307 283 periphclk = rcc_clocks.PCLK1_Frequency;
AnnaBridge 167:e84263d55307 284 }
AnnaBridge 167:e84263d55307 285 else if (USARTx == UART5)
AnnaBridge 167:e84263d55307 286 {
AnnaBridge 167:e84263d55307 287 periphclk = rcc_clocks.PCLK1_Frequency;
AnnaBridge 167:e84263d55307 288 }
AnnaBridge 167:e84263d55307 289 else
AnnaBridge 167:e84263d55307 290 {
AnnaBridge 167:e84263d55307 291 /* Nothing to do, as error code is already assigned to ERROR value */
AnnaBridge 167:e84263d55307 292 }
AnnaBridge 167:e84263d55307 293
AnnaBridge 167:e84263d55307 294 /* Configure the USART Baud Rate :
AnnaBridge 167:e84263d55307 295 - valid baud rate value (different from 0) is required
AnnaBridge 167:e84263d55307 296 - Peripheral clock as returned by RCC service, should be valid (different from 0).
AnnaBridge 167:e84263d55307 297 */
AnnaBridge 167:e84263d55307 298 if ((periphclk != LL_RCC_PERIPH_FREQUENCY_NO)
AnnaBridge 167:e84263d55307 299 && (USART_InitStruct->BaudRate != 0U))
AnnaBridge 167:e84263d55307 300 {
AnnaBridge 167:e84263d55307 301 status = SUCCESS;
AnnaBridge 167:e84263d55307 302 LL_USART_SetBaudRate(USARTx,
AnnaBridge 167:e84263d55307 303 periphclk,
AnnaBridge 167:e84263d55307 304 USART_InitStruct->OverSampling,
AnnaBridge 167:e84263d55307 305 USART_InitStruct->BaudRate);
AnnaBridge 167:e84263d55307 306 }
AnnaBridge 167:e84263d55307 307 }
AnnaBridge 167:e84263d55307 308 /* Endif (=> USART not in Disabled state => return ERROR) */
AnnaBridge 167:e84263d55307 309
AnnaBridge 167:e84263d55307 310 return (status);
AnnaBridge 167:e84263d55307 311 }
AnnaBridge 167:e84263d55307 312
AnnaBridge 167:e84263d55307 313 /**
AnnaBridge 167:e84263d55307 314 * @brief Set each @ref LL_USART_InitTypeDef field to default value.
AnnaBridge 167:e84263d55307 315 * @param USART_InitStruct: pointer to a @ref LL_USART_InitTypeDef structure
AnnaBridge 167:e84263d55307 316 * whose fields will be set to default values.
AnnaBridge 167:e84263d55307 317 * @retval None
AnnaBridge 167:e84263d55307 318 */
AnnaBridge 167:e84263d55307 319
AnnaBridge 167:e84263d55307 320 void LL_USART_StructInit(LL_USART_InitTypeDef *USART_InitStruct)
AnnaBridge 167:e84263d55307 321 {
AnnaBridge 167:e84263d55307 322 /* Set USART_InitStruct fields to default values */
AnnaBridge 167:e84263d55307 323 USART_InitStruct->BaudRate = 9600U;
AnnaBridge 167:e84263d55307 324 USART_InitStruct->DataWidth = LL_USART_DATAWIDTH_8B;
AnnaBridge 167:e84263d55307 325 USART_InitStruct->StopBits = LL_USART_STOPBITS_1;
AnnaBridge 167:e84263d55307 326 USART_InitStruct->Parity = LL_USART_PARITY_NONE ;
AnnaBridge 167:e84263d55307 327 USART_InitStruct->TransferDirection = LL_USART_DIRECTION_TX_RX;
AnnaBridge 167:e84263d55307 328 USART_InitStruct->HardwareFlowControl = LL_USART_HWCONTROL_NONE;
AnnaBridge 167:e84263d55307 329 USART_InitStruct->OverSampling = LL_USART_OVERSAMPLING_16;
AnnaBridge 167:e84263d55307 330 }
AnnaBridge 167:e84263d55307 331
AnnaBridge 167:e84263d55307 332 /**
AnnaBridge 167:e84263d55307 333 * @brief Initialize USART Clock related settings according to the
AnnaBridge 167:e84263d55307 334 * specified parameters in the USART_ClockInitStruct.
AnnaBridge 167:e84263d55307 335 * @note As some bits in USART configuration registers can only be written when the USART is disabled (USART_CR1_UE bit =0),
AnnaBridge 167:e84263d55307 336 * USART IP should be in disabled state prior calling this function. Otherwise, ERROR result will be returned.
AnnaBridge 167:e84263d55307 337 * @param USARTx USART Instance
AnnaBridge 167:e84263d55307 338 * @param USART_ClockInitStruct: pointer to a @ref LL_USART_ClockInitTypeDef structure
AnnaBridge 167:e84263d55307 339 * that contains the Clock configuration information for the specified USART peripheral.
AnnaBridge 167:e84263d55307 340 * @retval An ErrorStatus enumeration value:
AnnaBridge 167:e84263d55307 341 * - SUCCESS: USART registers related to Clock settings are initialized according to USART_ClockInitStruct content
AnnaBridge 167:e84263d55307 342 * - ERROR: Problem occurred during USART Registers initialization
AnnaBridge 167:e84263d55307 343 */
AnnaBridge 167:e84263d55307 344 ErrorStatus LL_USART_ClockInit(USART_TypeDef *USARTx, LL_USART_ClockInitTypeDef *USART_ClockInitStruct)
AnnaBridge 167:e84263d55307 345 {
AnnaBridge 167:e84263d55307 346 ErrorStatus status = SUCCESS;
AnnaBridge 167:e84263d55307 347
AnnaBridge 167:e84263d55307 348 /* Check USART Instance and Clock signal output parameters */
AnnaBridge 167:e84263d55307 349 assert_param(IS_UART_INSTANCE(USARTx));
AnnaBridge 167:e84263d55307 350 assert_param(IS_LL_USART_CLOCKOUTPUT(USART_ClockInitStruct->ClockOutput));
AnnaBridge 167:e84263d55307 351
AnnaBridge 167:e84263d55307 352 /* USART needs to be in disabled state, in order to be able to configure some bits in
AnnaBridge 167:e84263d55307 353 CRx registers */
AnnaBridge 167:e84263d55307 354 if (LL_USART_IsEnabled(USARTx) == 0U)
AnnaBridge 167:e84263d55307 355 {
AnnaBridge 167:e84263d55307 356 /*---------------------------- USART CR2 Configuration -----------------------*/
AnnaBridge 167:e84263d55307 357 /* If Clock signal has to be output */
AnnaBridge 167:e84263d55307 358 if (USART_ClockInitStruct->ClockOutput == LL_USART_CLOCK_DISABLE)
AnnaBridge 167:e84263d55307 359 {
AnnaBridge 167:e84263d55307 360 /* Deactivate Clock signal delivery :
AnnaBridge 167:e84263d55307 361 * - Disable Clock Output: USART_CR2_CLKEN cleared
AnnaBridge 167:e84263d55307 362 */
AnnaBridge 167:e84263d55307 363 LL_USART_DisableSCLKOutput(USARTx);
AnnaBridge 167:e84263d55307 364 }
AnnaBridge 167:e84263d55307 365 else
AnnaBridge 167:e84263d55307 366 {
AnnaBridge 167:e84263d55307 367 /* Ensure USART instance is USART capable */
AnnaBridge 167:e84263d55307 368 assert_param(IS_USART_INSTANCE(USARTx));
AnnaBridge 167:e84263d55307 369
AnnaBridge 167:e84263d55307 370 /* Check clock related parameters */
AnnaBridge 167:e84263d55307 371 assert_param(IS_LL_USART_CLOCKPOLARITY(USART_ClockInitStruct->ClockPolarity));
AnnaBridge 167:e84263d55307 372 assert_param(IS_LL_USART_CLOCKPHASE(USART_ClockInitStruct->ClockPhase));
AnnaBridge 167:e84263d55307 373 assert_param(IS_LL_USART_LASTBITCLKOUTPUT(USART_ClockInitStruct->LastBitClockPulse));
AnnaBridge 167:e84263d55307 374
AnnaBridge 167:e84263d55307 375 /*---------------------------- USART CR2 Configuration -----------------------
AnnaBridge 167:e84263d55307 376 * Configure USARTx CR2 (Clock signal related bits) with parameters:
AnnaBridge 167:e84263d55307 377 * - Enable Clock Output: USART_CR2_CLKEN set
AnnaBridge 167:e84263d55307 378 * - Clock Polarity: USART_CR2_CPOL bit according to USART_ClockInitStruct->ClockPolarity value
AnnaBridge 167:e84263d55307 379 * - Clock Phase: USART_CR2_CPHA bit according to USART_ClockInitStruct->ClockPhase value
AnnaBridge 167:e84263d55307 380 * - Last Bit Clock Pulse Output: USART_CR2_LBCL bit according to USART_ClockInitStruct->LastBitClockPulse value.
AnnaBridge 167:e84263d55307 381 */
AnnaBridge 167:e84263d55307 382 MODIFY_REG(USARTx->CR2,
AnnaBridge 167:e84263d55307 383 USART_CR2_CLKEN | USART_CR2_CPHA | USART_CR2_CPOL | USART_CR2_LBCL,
AnnaBridge 167:e84263d55307 384 USART_CR2_CLKEN | USART_ClockInitStruct->ClockPolarity |
AnnaBridge 167:e84263d55307 385 USART_ClockInitStruct->ClockPhase | USART_ClockInitStruct->LastBitClockPulse);
AnnaBridge 167:e84263d55307 386 }
AnnaBridge 167:e84263d55307 387 }
AnnaBridge 167:e84263d55307 388 /* Else (USART not in Disabled state => return ERROR */
AnnaBridge 167:e84263d55307 389 else
AnnaBridge 167:e84263d55307 390 {
AnnaBridge 167:e84263d55307 391 status = ERROR;
AnnaBridge 167:e84263d55307 392 }
AnnaBridge 167:e84263d55307 393
AnnaBridge 167:e84263d55307 394 return (status);
AnnaBridge 167:e84263d55307 395 }
AnnaBridge 167:e84263d55307 396
AnnaBridge 167:e84263d55307 397 /**
AnnaBridge 167:e84263d55307 398 * @brief Set each field of a @ref LL_USART_ClockInitTypeDef type structure to default value.
AnnaBridge 167:e84263d55307 399 * @param USART_ClockInitStruct: pointer to a @ref LL_USART_ClockInitTypeDef structure
AnnaBridge 167:e84263d55307 400 * whose fields will be set to default values.
AnnaBridge 167:e84263d55307 401 * @retval None
AnnaBridge 167:e84263d55307 402 */
AnnaBridge 167:e84263d55307 403 void LL_USART_ClockStructInit(LL_USART_ClockInitTypeDef *USART_ClockInitStruct)
AnnaBridge 167:e84263d55307 404 {
AnnaBridge 167:e84263d55307 405 /* Set LL_USART_ClockInitStruct fields with default values */
AnnaBridge 167:e84263d55307 406 USART_ClockInitStruct->ClockOutput = LL_USART_CLOCK_DISABLE;
AnnaBridge 167:e84263d55307 407 USART_ClockInitStruct->ClockPolarity = LL_USART_POLARITY_LOW; /* Not relevant when ClockOutput = LL_USART_CLOCK_DISABLE */
AnnaBridge 167:e84263d55307 408 USART_ClockInitStruct->ClockPhase = LL_USART_PHASE_1EDGE; /* Not relevant when ClockOutput = LL_USART_CLOCK_DISABLE */
AnnaBridge 167:e84263d55307 409 USART_ClockInitStruct->LastBitClockPulse = LL_USART_LASTCLKPULSE_NO_OUTPUT; /* Not relevant when ClockOutput = LL_USART_CLOCK_DISABLE */
AnnaBridge 167:e84263d55307 410 }
AnnaBridge 167:e84263d55307 411
AnnaBridge 167:e84263d55307 412 /**
AnnaBridge 167:e84263d55307 413 * @}
AnnaBridge 167:e84263d55307 414 */
AnnaBridge 167:e84263d55307 415
AnnaBridge 167:e84263d55307 416 /**
AnnaBridge 167:e84263d55307 417 * @}
AnnaBridge 167:e84263d55307 418 */
AnnaBridge 167:e84263d55307 419
AnnaBridge 167:e84263d55307 420 /**
AnnaBridge 167:e84263d55307 421 * @}
AnnaBridge 167:e84263d55307 422 */
AnnaBridge 167:e84263d55307 423
AnnaBridge 167:e84263d55307 424 #endif /* USART1 || USART2 || USART3 || USART6 || UART4 || UART5 */
AnnaBridge 167:e84263d55307 425
AnnaBridge 167:e84263d55307 426 /**
AnnaBridge 167:e84263d55307 427 * @}
AnnaBridge 167:e84263d55307 428 */
AnnaBridge 167:e84263d55307 429
AnnaBridge 167:e84263d55307 430 #endif /* USE_FULL_LL_DRIVER */
AnnaBridge 167:e84263d55307 431
AnnaBridge 167:e84263d55307 432 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
AnnaBridge 167:e84263d55307 433