mbed library sources. Supersedes mbed-src.

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

Committer:
Anna Bridge
Date:
Wed Jan 17 15:23:54 2018 +0000
Revision:
180:96ed750bd169
Parent:
156:95d6b41a828b
mbed-dev libray. Release version 158

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /**
<> 144:ef7eb2e8f9f7 2 ******************************************************************************
<> 144:ef7eb2e8f9f7 3 * @file stm32f0xx_hal_uart_ex.c
<> 144:ef7eb2e8f9f7 4 * @author MCD Application Team
<> 144:ef7eb2e8f9f7 5 * @brief Extended UART HAL module driver.
<> 144:ef7eb2e8f9f7 6 * This file provides firmware functions to manage the following extended
<> 144:ef7eb2e8f9f7 7 * functionalities of the Universal Asynchronous Receiver Transmitter Peripheral (UART).
<> 144:ef7eb2e8f9f7 8 * + Initialization and de-initialization functions
<> 144:ef7eb2e8f9f7 9 * + Peripheral Control functions
<> 144:ef7eb2e8f9f7 10 *
<> 144:ef7eb2e8f9f7 11 *
<> 144:ef7eb2e8f9f7 12 @verbatim
<> 144:ef7eb2e8f9f7 13 ==============================================================================
<> 144:ef7eb2e8f9f7 14 ##### UART peripheral extended features #####
<> 144:ef7eb2e8f9f7 15 ==============================================================================
<> 144:ef7eb2e8f9f7 16
<> 144:ef7eb2e8f9f7 17 (#) Declare a UART_HandleTypeDef handle structure.
<> 144:ef7eb2e8f9f7 18
<> 144:ef7eb2e8f9f7 19 (#) For the UART RS485 Driver Enable mode, initialize the UART registers
<> 144:ef7eb2e8f9f7 20 by calling the HAL_RS485Ex_Init() API.
<> 144:ef7eb2e8f9f7 21
<> 144:ef7eb2e8f9f7 22
<> 144:ef7eb2e8f9f7 23 @endverbatim
<> 144:ef7eb2e8f9f7 24 ******************************************************************************
<> 144:ef7eb2e8f9f7 25 * @attention
<> 144:ef7eb2e8f9f7 26 *
<> 144:ef7eb2e8f9f7 27 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
<> 144:ef7eb2e8f9f7 28 *
<> 144:ef7eb2e8f9f7 29 * Redistribution and use in source and binary forms, with or without modification,
<> 144:ef7eb2e8f9f7 30 * are permitted provided that the following conditions are met:
<> 144:ef7eb2e8f9f7 31 * 1. Redistributions of source code must retain the above copyright notice,
<> 144:ef7eb2e8f9f7 32 * this list of conditions and the following disclaimer.
<> 144:ef7eb2e8f9f7 33 * 2. Redistributions in binary form must reproduce the above copyright notice,
<> 144:ef7eb2e8f9f7 34 * this list of conditions and the following disclaimer in the documentation
<> 144:ef7eb2e8f9f7 35 * and/or other materials provided with the distribution.
<> 144:ef7eb2e8f9f7 36 * 3. Neither the name of STMicroelectronics nor the names of its contributors
<> 144:ef7eb2e8f9f7 37 * may be used to endorse or promote products derived from this software
<> 144:ef7eb2e8f9f7 38 * without specific prior written permission.
<> 144:ef7eb2e8f9f7 39 *
<> 144:ef7eb2e8f9f7 40 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
<> 144:ef7eb2e8f9f7 41 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
<> 144:ef7eb2e8f9f7 42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
<> 144:ef7eb2e8f9f7 43 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
<> 144:ef7eb2e8f9f7 44 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
<> 144:ef7eb2e8f9f7 45 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
<> 144:ef7eb2e8f9f7 46 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
<> 144:ef7eb2e8f9f7 47 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
<> 144:ef7eb2e8f9f7 48 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
<> 144:ef7eb2e8f9f7 49 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<> 144:ef7eb2e8f9f7 50 *
<> 144:ef7eb2e8f9f7 51 ******************************************************************************
<> 144:ef7eb2e8f9f7 52 */
<> 144:ef7eb2e8f9f7 53
<> 144:ef7eb2e8f9f7 54 /* Includes ------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 55 #include "stm32f0xx_hal.h"
<> 144:ef7eb2e8f9f7 56
<> 144:ef7eb2e8f9f7 57 /** @addtogroup STM32F0xx_HAL_Driver
<> 144:ef7eb2e8f9f7 58 * @{
<> 144:ef7eb2e8f9f7 59 */
<> 144:ef7eb2e8f9f7 60
<> 144:ef7eb2e8f9f7 61 /** @defgroup UARTEx UARTEx
<> 144:ef7eb2e8f9f7 62 * @brief UART Extended HAL module driver
<> 144:ef7eb2e8f9f7 63 * @{
<> 144:ef7eb2e8f9f7 64 */
<> 144:ef7eb2e8f9f7 65
<> 144:ef7eb2e8f9f7 66 #ifdef HAL_UART_MODULE_ENABLED
<> 144:ef7eb2e8f9f7 67
<> 144:ef7eb2e8f9f7 68 /* Private typedef -----------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 69 /* Private define ------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 70 /* Private macros ------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 71 /* Private variables ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 72 /* Private function prototypes -----------------------------------------------*/
<> 144:ef7eb2e8f9f7 73 /** @defgroup UARTEx_Private_Functions UARTEx Private Functions
<> 144:ef7eb2e8f9f7 74 * @{
<> 144:ef7eb2e8f9f7 75 */
<> 144:ef7eb2e8f9f7 76 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
<> 144:ef7eb2e8f9f7 77 static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
<> 144:ef7eb2e8f9f7 78 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
<> 144:ef7eb2e8f9f7 79
<> 144:ef7eb2e8f9f7 80 /**
<> 144:ef7eb2e8f9f7 81 * @}
<> 144:ef7eb2e8f9f7 82 */
<> 144:ef7eb2e8f9f7 83
<> 144:ef7eb2e8f9f7 84 /* Exported functions ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 85
<> 144:ef7eb2e8f9f7 86 /** @defgroup UARTEx_Exported_Functions UARTEx Exported Functions
<> 144:ef7eb2e8f9f7 87 * @{
<> 144:ef7eb2e8f9f7 88 */
<> 144:ef7eb2e8f9f7 89
<> 144:ef7eb2e8f9f7 90 /** @defgroup UARTEx_Exported_Functions_Group1 Extended Initialization and de-initialization functions
<> 144:ef7eb2e8f9f7 91 * @brief Extended Initialization and Configuration Functions
<> 144:ef7eb2e8f9f7 92 *
<> 144:ef7eb2e8f9f7 93 @verbatim
<> 144:ef7eb2e8f9f7 94 ===============================================================================
<> 144:ef7eb2e8f9f7 95 ##### Initialization and Configuration functions #####
<> 144:ef7eb2e8f9f7 96 ==============================================================================
<> 144:ef7eb2e8f9f7 97 [..]
<> 144:ef7eb2e8f9f7 98 This subsection provides a set of functions allowing to initialize the USARTx or the UARTy
<> 144:ef7eb2e8f9f7 99 in asynchronous mode.
<> 144:ef7eb2e8f9f7 100 (+) For the asynchronous mode the parameters below can be configured:
<> 144:ef7eb2e8f9f7 101 (++) Baud Rate
<> 144:ef7eb2e8f9f7 102 (++) Word Length (Fixed to 8-bits only for LIN mode)
<> 144:ef7eb2e8f9f7 103 (++) Stop Bit
<> 144:ef7eb2e8f9f7 104 (++) Parity
<> 144:ef7eb2e8f9f7 105 (++) Hardware flow control
<> 144:ef7eb2e8f9f7 106 (++) Receiver/transmitter modes
<> 144:ef7eb2e8f9f7 107 (++) Over Sampling Method
<> 144:ef7eb2e8f9f7 108 (++) One-Bit Sampling Method
<> 144:ef7eb2e8f9f7 109 (+) For the asynchronous mode, the following advanced features can be configured as well:
<> 144:ef7eb2e8f9f7 110 (++) TX and/or RX pin level inversion
<> 144:ef7eb2e8f9f7 111 (++) data logical level inversion
<> 144:ef7eb2e8f9f7 112 (++) RX and TX pins swap
<> 144:ef7eb2e8f9f7 113 (++) RX overrun detection disabling
<> 144:ef7eb2e8f9f7 114 (++) DMA disabling on RX error
<> 144:ef7eb2e8f9f7 115 (++) MSB first on communication line
<> 144:ef7eb2e8f9f7 116 (++) auto Baud rate detection
<> 144:ef7eb2e8f9f7 117 [..]
<> 144:ef7eb2e8f9f7 118 The HAL_LIN_Init() and HAL_RS485Ex_Init() APIs follows respectively the LIN and
<> 144:ef7eb2e8f9f7 119 the UART RS485 mode configuration procedures (details for the procedures are
<> 144:ef7eb2e8f9f7 120 available in reference manual).
<> 144:ef7eb2e8f9f7 121
<> 144:ef7eb2e8f9f7 122 @endverbatim
<> 144:ef7eb2e8f9f7 123 * @{
<> 144:ef7eb2e8f9f7 124 */
<> 144:ef7eb2e8f9f7 125
<> 144:ef7eb2e8f9f7 126 /*
<> 144:ef7eb2e8f9f7 127 Additional Table: If the parity is enabled, then the MSB bit of the data written
<> 144:ef7eb2e8f9f7 128 in the data register is transmitted but is changed by the parity bit.
<> 144:ef7eb2e8f9f7 129 According to device capability (support or not of 7-bit word length),
<> 144:ef7eb2e8f9f7 130 frame length is either defined by the M bit (8-bits or 9-bits)
<> 144:ef7eb2e8f9f7 131 or by the M1 and M0 bits (7-bit, 8-bit or 9-bit).
<> 144:ef7eb2e8f9f7 132 Possible UART frame formats are as listed in the following table:
<> 144:ef7eb2e8f9f7 133
<> 144:ef7eb2e8f9f7 134 Table 1. UART frame format.
<> 144:ef7eb2e8f9f7 135 +-----------------------------------------------------------------------+
<> 144:ef7eb2e8f9f7 136 | M bit | PCE bit | UART frame |
<> 144:ef7eb2e8f9f7 137 |-------------------|-----------|---------------------------------------|
<> 144:ef7eb2e8f9f7 138 | 0 | 0 | | SB | 8-bit data | STB | |
<> 144:ef7eb2e8f9f7 139 |-------------------|-----------|---------------------------------------|
<> 144:ef7eb2e8f9f7 140 | 0 | 1 | | SB | 7-bit data | PB | STB | |
<> 144:ef7eb2e8f9f7 141 |-------------------|-----------|---------------------------------------|
<> 144:ef7eb2e8f9f7 142 | 1 | 0 | | SB | 9-bit data | STB | |
<> 144:ef7eb2e8f9f7 143 |-------------------|-----------|---------------------------------------|
<> 144:ef7eb2e8f9f7 144 | 1 | 1 | | SB | 8-bit data | PB | STB | |
<> 144:ef7eb2e8f9f7 145 +-----------------------------------------------------------------------+
<> 144:ef7eb2e8f9f7 146 | M1 bit | M0 bit | PCE bit | UART frame |
<> 144:ef7eb2e8f9f7 147 |---------|---------|-----------|---------------------------------------|
<> 144:ef7eb2e8f9f7 148 | 0 | 0 | 0 | | SB | 8 bit data | STB | |
<> 144:ef7eb2e8f9f7 149 |---------|---------|-----------|---------------------------------------|
<> 144:ef7eb2e8f9f7 150 | 0 | 0 | 1 | | SB | 7 bit data | PB | STB | |
<> 144:ef7eb2e8f9f7 151 |---------|---------|-----------|---------------------------------------|
<> 144:ef7eb2e8f9f7 152 | 0 | 1 | 0 | | SB | 9 bit data | STB | |
<> 144:ef7eb2e8f9f7 153 |---------|---------|-----------|---------------------------------------|
<> 144:ef7eb2e8f9f7 154 | 0 | 1 | 1 | | SB | 8 bit data | PB | STB | |
<> 144:ef7eb2e8f9f7 155 |---------|---------|-----------|---------------------------------------|
<> 144:ef7eb2e8f9f7 156 | 1 | 0 | 0 | | SB | 7 bit data | STB | |
<> 144:ef7eb2e8f9f7 157 |---------|---------|-----------|---------------------------------------|
<> 144:ef7eb2e8f9f7 158 | 1 | 0 | 1 | | SB | 6 bit data | PB | STB | |
<> 144:ef7eb2e8f9f7 159 +-----------------------------------------------------------------------+
<> 144:ef7eb2e8f9f7 160
<> 144:ef7eb2e8f9f7 161 */
<> 144:ef7eb2e8f9f7 162
<> 144:ef7eb2e8f9f7 163 /**
<> 144:ef7eb2e8f9f7 164 * @brief Initialize the RS485 Driver enable feature according to the specified
<> 144:ef7eb2e8f9f7 165 * parameters in the UART_InitTypeDef and creates the associated handle.
Anna Bridge 180:96ed750bd169 166 * @param huart UART handle.
Anna Bridge 180:96ed750bd169 167 * @param Polarity select the driver enable polarity.
<> 144:ef7eb2e8f9f7 168 * This parameter can be one of the following values:
<> 156:95d6b41a828b 169 * @arg @ref UART_DE_POLARITY_HIGH DE signal is active high
<> 156:95d6b41a828b 170 * @arg @ref UART_DE_POLARITY_LOW DE signal is active low
Anna Bridge 180:96ed750bd169 171 * @param AssertionTime Driver Enable assertion time:
<> 144:ef7eb2e8f9f7 172 * 5-bit value defining the time between the activation of the DE (Driver Enable)
<> 144:ef7eb2e8f9f7 173 * signal and the beginning of the start bit. It is expressed in sample time
<> 144:ef7eb2e8f9f7 174 * units (1/8 or 1/16 bit time, depending on the oversampling rate)
Anna Bridge 180:96ed750bd169 175 * @param DeassertionTime Driver Enable deassertion time:
<> 144:ef7eb2e8f9f7 176 * 5-bit value defining the time between the end of the last stop bit, in a
<> 144:ef7eb2e8f9f7 177 * transmitted message, and the de-activation of the DE (Driver Enable) signal.
<> 144:ef7eb2e8f9f7 178 * It is expressed in sample time units (1/8 or 1/16 bit time, depending on the
<> 144:ef7eb2e8f9f7 179 * oversampling rate).
<> 144:ef7eb2e8f9f7 180 * @retval HAL status
<> 144:ef7eb2e8f9f7 181 */
<> 144:ef7eb2e8f9f7 182 HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime)
<> 144:ef7eb2e8f9f7 183 {
<> 156:95d6b41a828b 184 uint32_t temp = 0x0U;
<> 144:ef7eb2e8f9f7 185
<> 144:ef7eb2e8f9f7 186 /* Check the UART handle allocation */
<> 144:ef7eb2e8f9f7 187 if(huart == NULL)
<> 144:ef7eb2e8f9f7 188 {
<> 144:ef7eb2e8f9f7 189 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 190 }
<> 144:ef7eb2e8f9f7 191 /* Check the Driver Enable UART instance */
<> 144:ef7eb2e8f9f7 192 assert_param(IS_UART_DRIVER_ENABLE_INSTANCE(huart->Instance));
<> 144:ef7eb2e8f9f7 193
<> 144:ef7eb2e8f9f7 194 /* Check the Driver Enable polarity */
<> 144:ef7eb2e8f9f7 195 assert_param(IS_UART_DE_POLARITY(Polarity));
<> 144:ef7eb2e8f9f7 196
<> 144:ef7eb2e8f9f7 197 /* Check the Driver Enable assertion time */
<> 144:ef7eb2e8f9f7 198 assert_param(IS_UART_ASSERTIONTIME(AssertionTime));
<> 144:ef7eb2e8f9f7 199
<> 144:ef7eb2e8f9f7 200 /* Check the Driver Enable deassertion time */
<> 144:ef7eb2e8f9f7 201 assert_param(IS_UART_DEASSERTIONTIME(DeassertionTime));
<> 144:ef7eb2e8f9f7 202
<> 144:ef7eb2e8f9f7 203 if(huart->gState == HAL_UART_STATE_RESET)
<> 144:ef7eb2e8f9f7 204 {
<> 144:ef7eb2e8f9f7 205 /* Allocate lock resource and initialize it */
<> 144:ef7eb2e8f9f7 206 huart->Lock = HAL_UNLOCKED;
<> 144:ef7eb2e8f9f7 207
<> 144:ef7eb2e8f9f7 208 /* Init the low level hardware : GPIO, CLOCK, CORTEX */
<> 144:ef7eb2e8f9f7 209 HAL_UART_MspInit(huart);
<> 144:ef7eb2e8f9f7 210 }
<> 144:ef7eb2e8f9f7 211
<> 144:ef7eb2e8f9f7 212 huart->gState = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 213
<> 144:ef7eb2e8f9f7 214 /* Disable the Peripheral */
<> 144:ef7eb2e8f9f7 215 __HAL_UART_DISABLE(huart);
<> 144:ef7eb2e8f9f7 216
<> 144:ef7eb2e8f9f7 217 /* Set the UART Communication parameters */
<> 144:ef7eb2e8f9f7 218 if (UART_SetConfig(huart) == HAL_ERROR)
<> 144:ef7eb2e8f9f7 219 {
<> 144:ef7eb2e8f9f7 220 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 221 }
<> 144:ef7eb2e8f9f7 222
<> 144:ef7eb2e8f9f7 223 if(huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
<> 144:ef7eb2e8f9f7 224 {
<> 144:ef7eb2e8f9f7 225 UART_AdvFeatureConfig(huart);
<> 144:ef7eb2e8f9f7 226 }
<> 144:ef7eb2e8f9f7 227
<> 144:ef7eb2e8f9f7 228 /* Enable the Driver Enable mode by setting the DEM bit in the CR3 register */
<> 144:ef7eb2e8f9f7 229 SET_BIT(huart->Instance->CR3, USART_CR3_DEM);
<> 144:ef7eb2e8f9f7 230
<> 144:ef7eb2e8f9f7 231 /* Set the Driver Enable polarity */
<> 144:ef7eb2e8f9f7 232 MODIFY_REG(huart->Instance->CR3, USART_CR3_DEP, Polarity);
<> 144:ef7eb2e8f9f7 233
<> 144:ef7eb2e8f9f7 234 /* Set the Driver Enable assertion and deassertion times */
<> 144:ef7eb2e8f9f7 235 temp = (AssertionTime << UART_CR1_DEAT_ADDRESS_LSB_POS);
<> 144:ef7eb2e8f9f7 236 temp |= (DeassertionTime << UART_CR1_DEDT_ADDRESS_LSB_POS);
<> 144:ef7eb2e8f9f7 237 MODIFY_REG(huart->Instance->CR1, (USART_CR1_DEDT|USART_CR1_DEAT), temp);
<> 144:ef7eb2e8f9f7 238
<> 144:ef7eb2e8f9f7 239 /* Enable the Peripheral */
<> 144:ef7eb2e8f9f7 240 __HAL_UART_ENABLE(huart);
<> 144:ef7eb2e8f9f7 241
<> 144:ef7eb2e8f9f7 242 /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
<> 144:ef7eb2e8f9f7 243 return (UART_CheckIdleState(huart));
<> 144:ef7eb2e8f9f7 244 }
<> 144:ef7eb2e8f9f7 245
<> 144:ef7eb2e8f9f7 246 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
<> 144:ef7eb2e8f9f7 247 /**
<> 144:ef7eb2e8f9f7 248 * @brief Initialize the LIN mode according to the specified
<> 156:95d6b41a828b 249 * parameters in the UART_InitTypeDef and creates the associated handle .
Anna Bridge 180:96ed750bd169 250 * @param huart UART handle.
Anna Bridge 180:96ed750bd169 251 * @param BreakDetectLength specifies the LIN break detection length.
<> 144:ef7eb2e8f9f7 252 * This parameter can be one of the following values:
<> 156:95d6b41a828b 253 * @arg @ref UART_LINBREAKDETECTLENGTH_10B 10-bit break detection
<> 156:95d6b41a828b 254 * @arg @ref UART_LINBREAKDETECTLENGTH_11B 11-bit break detection
<> 144:ef7eb2e8f9f7 255 * @retval HAL status
<> 144:ef7eb2e8f9f7 256 */
<> 144:ef7eb2e8f9f7 257 HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength)
<> 144:ef7eb2e8f9f7 258 {
<> 144:ef7eb2e8f9f7 259 /* Check the UART handle allocation */
<> 144:ef7eb2e8f9f7 260 if(huart == NULL)
<> 144:ef7eb2e8f9f7 261 {
<> 144:ef7eb2e8f9f7 262 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 263 }
<> 144:ef7eb2e8f9f7 264
<> 144:ef7eb2e8f9f7 265 /* Check the LIN UART instance */
<> 144:ef7eb2e8f9f7 266 assert_param(IS_UART_LIN_INSTANCE(huart->Instance));
<> 144:ef7eb2e8f9f7 267 /* Check the Break detection length parameter */
<> 144:ef7eb2e8f9f7 268 assert_param(IS_UART_LIN_BREAK_DETECT_LENGTH(BreakDetectLength));
<> 144:ef7eb2e8f9f7 269
<> 144:ef7eb2e8f9f7 270 /* LIN mode limited to 16-bit oversampling only */
<> 144:ef7eb2e8f9f7 271 if(huart->Init.OverSampling == UART_OVERSAMPLING_8)
<> 144:ef7eb2e8f9f7 272 {
<> 144:ef7eb2e8f9f7 273 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 274 }
<> 144:ef7eb2e8f9f7 275 /* LIN mode limited to 8-bit data length */
<> 144:ef7eb2e8f9f7 276 if(huart->Init.WordLength != UART_WORDLENGTH_8B)
<> 144:ef7eb2e8f9f7 277 {
<> 144:ef7eb2e8f9f7 278 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 279 }
<> 144:ef7eb2e8f9f7 280
<> 144:ef7eb2e8f9f7 281 if(huart->gState == HAL_UART_STATE_RESET)
<> 144:ef7eb2e8f9f7 282 {
<> 144:ef7eb2e8f9f7 283 /* Allocate lock resource and initialize it */
<> 144:ef7eb2e8f9f7 284 huart->Lock = HAL_UNLOCKED;
<> 144:ef7eb2e8f9f7 285
<> 144:ef7eb2e8f9f7 286 /* Init the low level hardware : GPIO, CLOCK */
<> 144:ef7eb2e8f9f7 287 HAL_UART_MspInit(huart);
<> 144:ef7eb2e8f9f7 288 }
<> 144:ef7eb2e8f9f7 289
<> 144:ef7eb2e8f9f7 290 huart->gState = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 291
<> 144:ef7eb2e8f9f7 292 /* Disable the Peripheral */
<> 144:ef7eb2e8f9f7 293 __HAL_UART_DISABLE(huart);
<> 144:ef7eb2e8f9f7 294
<> 144:ef7eb2e8f9f7 295 /* Set the UART Communication parameters */
<> 144:ef7eb2e8f9f7 296 if (UART_SetConfig(huart) == HAL_ERROR)
<> 144:ef7eb2e8f9f7 297 {
<> 144:ef7eb2e8f9f7 298 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 299 }
<> 144:ef7eb2e8f9f7 300
<> 144:ef7eb2e8f9f7 301 if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
<> 144:ef7eb2e8f9f7 302 {
<> 144:ef7eb2e8f9f7 303 UART_AdvFeatureConfig(huart);
<> 144:ef7eb2e8f9f7 304 }
<> 144:ef7eb2e8f9f7 305
<> 144:ef7eb2e8f9f7 306 /* In LIN mode, the following bits must be kept cleared:
<> 144:ef7eb2e8f9f7 307 - LINEN and CLKEN bits in the USART_CR2 register,
<> 144:ef7eb2e8f9f7 308 - SCEN and IREN bits in the USART_CR3 register.*/
<> 156:95d6b41a828b 309 CLEAR_BIT(huart->Instance->CR2, USART_CR2_CLKEN);
<> 156:95d6b41a828b 310 CLEAR_BIT(huart->Instance->CR3, (USART_CR3_HDSEL | USART_CR3_IREN | USART_CR3_SCEN));
<> 144:ef7eb2e8f9f7 311
<> 144:ef7eb2e8f9f7 312 /* Enable the LIN mode by setting the LINEN bit in the CR2 register */
<> 156:95d6b41a828b 313 SET_BIT(huart->Instance->CR2, USART_CR2_LINEN);
<> 144:ef7eb2e8f9f7 314
<> 144:ef7eb2e8f9f7 315 /* Set the USART LIN Break detection length. */
<> 144:ef7eb2e8f9f7 316 MODIFY_REG(huart->Instance->CR2, USART_CR2_LBDL, BreakDetectLength);
<> 144:ef7eb2e8f9f7 317
<> 156:95d6b41a828b 318 /* Enable the Peripheral */
<> 144:ef7eb2e8f9f7 319 __HAL_UART_ENABLE(huart);
<> 144:ef7eb2e8f9f7 320
<> 144:ef7eb2e8f9f7 321 /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
<> 144:ef7eb2e8f9f7 322 return (UART_CheckIdleState(huart));
<> 144:ef7eb2e8f9f7 323 }
<> 144:ef7eb2e8f9f7 324 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
<> 144:ef7eb2e8f9f7 325
<> 144:ef7eb2e8f9f7 326 /**
<> 144:ef7eb2e8f9f7 327 * @}
<> 144:ef7eb2e8f9f7 328 */
<> 144:ef7eb2e8f9f7 329
<> 144:ef7eb2e8f9f7 330 /** @defgroup UARTEx_Exported_Functions_Group2 Extended IO operation function
<> 144:ef7eb2e8f9f7 331 * @brief Extended UART Interrupt handling function
<> 144:ef7eb2e8f9f7 332 *
<> 144:ef7eb2e8f9f7 333 @verbatim
<> 144:ef7eb2e8f9f7 334 ===============================================================================
<> 144:ef7eb2e8f9f7 335 ##### IO operation function #####
<> 144:ef7eb2e8f9f7 336 ===============================================================================
<> 144:ef7eb2e8f9f7 337 [..]
<> 144:ef7eb2e8f9f7 338 This subsection provides function to handle Wake up interrupt call-back.
<> 156:95d6b41a828b 339
<> 144:ef7eb2e8f9f7 340 (#) Callback provided in No_Blocking mode:
<> 144:ef7eb2e8f9f7 341 (++) HAL_UARTEx_WakeupCallback()
<> 144:ef7eb2e8f9f7 342
<> 144:ef7eb2e8f9f7 343 @endverbatim
<> 144:ef7eb2e8f9f7 344 * @{
<> 144:ef7eb2e8f9f7 345 */
<> 144:ef7eb2e8f9f7 346
<> 144:ef7eb2e8f9f7 347 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
<> 144:ef7eb2e8f9f7 348 /**
<> 156:95d6b41a828b 349 * @brief UART wakeup from Stop mode callback.
Anna Bridge 180:96ed750bd169 350 * @param huart UART handle.
<> 144:ef7eb2e8f9f7 351 * @retval None
<> 144:ef7eb2e8f9f7 352 */
<> 156:95d6b41a828b 353 __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 354 {
<> 144:ef7eb2e8f9f7 355 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 356 UNUSED(huart);
<> 144:ef7eb2e8f9f7 357
<> 144:ef7eb2e8f9f7 358 /* NOTE : This function should not be modified, when the callback is needed,
<> 156:95d6b41a828b 359 the HAL_UARTEx_WakeupCallback can be implemented in the user file.
<> 156:95d6b41a828b 360 */
<> 144:ef7eb2e8f9f7 361 }
<> 144:ef7eb2e8f9f7 362 #endif /*!defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)*/
<> 144:ef7eb2e8f9f7 363
<> 144:ef7eb2e8f9f7 364 /**
<> 144:ef7eb2e8f9f7 365 * @}
<> 144:ef7eb2e8f9f7 366 */
<> 144:ef7eb2e8f9f7 367
<> 144:ef7eb2e8f9f7 368
<> 144:ef7eb2e8f9f7 369 /** @defgroup UARTEx_Exported_Functions_Group3 Extended Peripheral Control functions
<> 144:ef7eb2e8f9f7 370 * @brief Extended Peripheral Control functions
<> 144:ef7eb2e8f9f7 371 *
<> 156:95d6b41a828b 372 @verbatim
<> 144:ef7eb2e8f9f7 373 ===============================================================================
<> 156:95d6b41a828b 374 ##### Peripheral Control functions #####
<> 156:95d6b41a828b 375 ===============================================================================
<> 144:ef7eb2e8f9f7 376 [..]
<> 144:ef7eb2e8f9f7 377 This subsection provides extended functions allowing to control the UART.
<> 144:ef7eb2e8f9f7 378 (+) HAL_UARTEx_StopModeWakeUpSourceConfig() API sets Wakeup from Stop mode interrupt flag selection
<> 144:ef7eb2e8f9f7 379 (+) HAL_UARTEx_EnableStopMode() API allows the UART to wake up the MCU from Stop mode as
<> 144:ef7eb2e8f9f7 380 long as UART clock is HSI or LSE
<> 144:ef7eb2e8f9f7 381 (+) HAL_UARTEx_DisableStopMode() API disables the above feature
<> 144:ef7eb2e8f9f7 382 (+) HAL_MultiProcessorEx_AddressLength_Set() API optionally sets the UART node address
<> 144:ef7eb2e8f9f7 383 detection length to more than 4 bits for multiprocessor address mark wake up.
<> 156:95d6b41a828b 384 (+) HAL_LIN_SendBreak() API transmits the break characters
<> 156:95d6b41a828b 385
<> 156:95d6b41a828b 386
<> 144:ef7eb2e8f9f7 387 @endverbatim
<> 144:ef7eb2e8f9f7 388 * @{
<> 144:ef7eb2e8f9f7 389 */
<> 144:ef7eb2e8f9f7 390
<> 144:ef7eb2e8f9f7 391 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
<> 144:ef7eb2e8f9f7 392 /**
<> 144:ef7eb2e8f9f7 393 * @brief Set Wakeup from Stop mode interrupt flag selection.
Anna Bridge 180:96ed750bd169 394 * @param huart UART handle.
Anna Bridge 180:96ed750bd169 395 * @param WakeUpSelection address match, Start Bit detection or RXNE bit status.
<> 144:ef7eb2e8f9f7 396 * This parameter can be one of the following values:
<> 156:95d6b41a828b 397 * @arg @ref UART_WAKEUP_ON_ADDRESS
<> 156:95d6b41a828b 398 * @arg @ref UART_WAKEUP_ON_STARTBIT
<> 156:95d6b41a828b 399 * @arg @ref UART_WAKEUP_ON_READDATA_NONEMPTY
<> 144:ef7eb2e8f9f7 400 * @retval HAL status
<> 144:ef7eb2e8f9f7 401 */
<> 144:ef7eb2e8f9f7 402 HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
<> 144:ef7eb2e8f9f7 403 {
<> 144:ef7eb2e8f9f7 404 HAL_StatusTypeDef status = HAL_OK;
<> 156:95d6b41a828b 405 uint32_t tickstart = 0U;
<> 144:ef7eb2e8f9f7 406
<> 144:ef7eb2e8f9f7 407 /* check the wake-up from stop mode UART instance */
<> 144:ef7eb2e8f9f7 408 assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance));
<> 144:ef7eb2e8f9f7 409 /* check the wake-up selection parameter */
<> 144:ef7eb2e8f9f7 410 assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent));
<> 144:ef7eb2e8f9f7 411
<> 144:ef7eb2e8f9f7 412 /* Process Locked */
<> 144:ef7eb2e8f9f7 413 __HAL_LOCK(huart);
<> 144:ef7eb2e8f9f7 414
<> 144:ef7eb2e8f9f7 415 huart->gState = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 416
<> 144:ef7eb2e8f9f7 417 /* Disable the Peripheral */
<> 144:ef7eb2e8f9f7 418 __HAL_UART_DISABLE(huart);
<> 144:ef7eb2e8f9f7 419
<> 144:ef7eb2e8f9f7 420 /* Set the wake-up selection scheme */
<> 144:ef7eb2e8f9f7 421 MODIFY_REG(huart->Instance->CR3, USART_CR3_WUS, WakeUpSelection.WakeUpEvent);
<> 144:ef7eb2e8f9f7 422
<> 144:ef7eb2e8f9f7 423 if (WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS)
<> 144:ef7eb2e8f9f7 424 {
<> 144:ef7eb2e8f9f7 425 UARTEx_Wakeup_AddressConfig(huart, WakeUpSelection);
<> 144:ef7eb2e8f9f7 426 }
<> 144:ef7eb2e8f9f7 427
<> 144:ef7eb2e8f9f7 428 /* Enable the Peripheral */
<> 144:ef7eb2e8f9f7 429 __HAL_UART_ENABLE(huart);
<> 144:ef7eb2e8f9f7 430
<> 156:95d6b41a828b 431 /* Init tickstart for timeout managment*/
<> 156:95d6b41a828b 432 tickstart = HAL_GetTick();
<> 156:95d6b41a828b 433
<> 144:ef7eb2e8f9f7 434 /* Wait until REACK flag is set */
<> 156:95d6b41a828b 435 if(UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
<> 144:ef7eb2e8f9f7 436 {
<> 144:ef7eb2e8f9f7 437 status = HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 438 }
<> 144:ef7eb2e8f9f7 439 else
<> 144:ef7eb2e8f9f7 440 {
<> 144:ef7eb2e8f9f7 441 /* Initialize the UART State */
<> 144:ef7eb2e8f9f7 442 huart->gState = HAL_UART_STATE_READY;
<> 144:ef7eb2e8f9f7 443 }
<> 144:ef7eb2e8f9f7 444
<> 144:ef7eb2e8f9f7 445 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 446 __HAL_UNLOCK(huart);
<> 144:ef7eb2e8f9f7 447
<> 144:ef7eb2e8f9f7 448 return status;
<> 144:ef7eb2e8f9f7 449 }
<> 144:ef7eb2e8f9f7 450
<> 144:ef7eb2e8f9f7 451
<> 144:ef7eb2e8f9f7 452 /**
<> 144:ef7eb2e8f9f7 453 * @brief Enable UART Stop Mode.
<> 156:95d6b41a828b 454 * @note The UART is able to wake up the MCU from Stop 1 mode as long as UART clock is HSI or LSE.
Anna Bridge 180:96ed750bd169 455 * @param huart UART handle.
<> 144:ef7eb2e8f9f7 456 * @retval HAL status
<> 144:ef7eb2e8f9f7 457 */
<> 144:ef7eb2e8f9f7 458 HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 459 {
<> 144:ef7eb2e8f9f7 460 /* Check parameter */
<> 144:ef7eb2e8f9f7 461 assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance));
<> 144:ef7eb2e8f9f7 462
<> 144:ef7eb2e8f9f7 463 /* Process Locked */
<> 144:ef7eb2e8f9f7 464 __HAL_LOCK(huart);
<> 144:ef7eb2e8f9f7 465
<> 144:ef7eb2e8f9f7 466 huart->gState = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 467
<> 144:ef7eb2e8f9f7 468 /* Set UESM bit */
<> 144:ef7eb2e8f9f7 469 SET_BIT(huart->Instance->CR1, USART_CR1_UESM);
<> 144:ef7eb2e8f9f7 470
<> 144:ef7eb2e8f9f7 471 huart->gState = HAL_UART_STATE_READY;
<> 144:ef7eb2e8f9f7 472
<> 144:ef7eb2e8f9f7 473 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 474 __HAL_UNLOCK(huart);
<> 144:ef7eb2e8f9f7 475
<> 144:ef7eb2e8f9f7 476 return HAL_OK;
<> 144:ef7eb2e8f9f7 477 }
<> 144:ef7eb2e8f9f7 478
<> 144:ef7eb2e8f9f7 479 /**
<> 144:ef7eb2e8f9f7 480 * @brief Disable UART Stop Mode.
Anna Bridge 180:96ed750bd169 481 * @param huart UART handle.
<> 144:ef7eb2e8f9f7 482 * @retval HAL status
<> 144:ef7eb2e8f9f7 483 */
<> 144:ef7eb2e8f9f7 484 HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 485 {
<> 144:ef7eb2e8f9f7 486 /* Check parameter */
<> 144:ef7eb2e8f9f7 487 assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance));
<> 144:ef7eb2e8f9f7 488
<> 144:ef7eb2e8f9f7 489 /* Process Locked */
<> 144:ef7eb2e8f9f7 490 __HAL_LOCK(huart);
<> 144:ef7eb2e8f9f7 491
<> 144:ef7eb2e8f9f7 492 huart->gState = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 493
<> 144:ef7eb2e8f9f7 494 /* Clear UESM bit */
<> 144:ef7eb2e8f9f7 495 CLEAR_BIT(huart->Instance->CR1, USART_CR1_UESM);
<> 144:ef7eb2e8f9f7 496
<> 144:ef7eb2e8f9f7 497 huart->gState = HAL_UART_STATE_READY;
<> 144:ef7eb2e8f9f7 498
<> 144:ef7eb2e8f9f7 499 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 500 __HAL_UNLOCK(huart);
<> 144:ef7eb2e8f9f7 501
<> 144:ef7eb2e8f9f7 502 return HAL_OK;
<> 144:ef7eb2e8f9f7 503 }
<> 144:ef7eb2e8f9f7 504 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
<> 144:ef7eb2e8f9f7 505
<> 144:ef7eb2e8f9f7 506 /**
<> 144:ef7eb2e8f9f7 507 * @brief By default in multiprocessor mode, when the wake up method is set
<> 144:ef7eb2e8f9f7 508 * to address mark, the UART handles only 4-bit long addresses detection;
<> 144:ef7eb2e8f9f7 509 * this API allows to enable longer addresses detection (6-, 7- or 8-bit
<> 144:ef7eb2e8f9f7 510 * long).
<> 144:ef7eb2e8f9f7 511 * @note Addresses detection lengths are: 6-bit address detection in 7-bit data mode,
<> 144:ef7eb2e8f9f7 512 * 7-bit address detection in 8-bit data mode, 8-bit address detection in 9-bit data mode.
Anna Bridge 180:96ed750bd169 513 * @param huart UART handle.
Anna Bridge 180:96ed750bd169 514 * @param AddressLength this parameter can be one of the following values:
<> 156:95d6b41a828b 515 * @arg @ref UART_ADDRESS_DETECT_4B 4-bit long address
<> 156:95d6b41a828b 516 * @arg @ref UART_ADDRESS_DETECT_7B 6-, 7- or 8-bit long address
<> 144:ef7eb2e8f9f7 517 * @retval HAL status
<> 144:ef7eb2e8f9f7 518 */
<> 144:ef7eb2e8f9f7 519 HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength)
<> 144:ef7eb2e8f9f7 520 {
<> 144:ef7eb2e8f9f7 521 /* Check the UART handle allocation */
<> 144:ef7eb2e8f9f7 522 if(huart == NULL)
<> 144:ef7eb2e8f9f7 523 {
<> 144:ef7eb2e8f9f7 524 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 525 }
<> 144:ef7eb2e8f9f7 526
<> 144:ef7eb2e8f9f7 527 /* Check the address length parameter */
<> 144:ef7eb2e8f9f7 528 assert_param(IS_UART_ADDRESSLENGTH_DETECT(AddressLength));
<> 144:ef7eb2e8f9f7 529
<> 144:ef7eb2e8f9f7 530 huart->gState = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 531
<> 144:ef7eb2e8f9f7 532 /* Disable the Peripheral */
<> 144:ef7eb2e8f9f7 533 __HAL_UART_DISABLE(huart);
<> 144:ef7eb2e8f9f7 534
<> 144:ef7eb2e8f9f7 535 /* Set the address length */
<> 144:ef7eb2e8f9f7 536 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, AddressLength);
<> 144:ef7eb2e8f9f7 537
<> 144:ef7eb2e8f9f7 538 /* Enable the Peripheral */
<> 144:ef7eb2e8f9f7 539 __HAL_UART_ENABLE(huart);
<> 144:ef7eb2e8f9f7 540
<> 144:ef7eb2e8f9f7 541 /* TEACK and/or REACK to check before moving huart->gState to Ready */
<> 144:ef7eb2e8f9f7 542 return (UART_CheckIdleState(huart));
<> 144:ef7eb2e8f9f7 543 }
<> 144:ef7eb2e8f9f7 544
<> 144:ef7eb2e8f9f7 545
<> 144:ef7eb2e8f9f7 546 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
<> 144:ef7eb2e8f9f7 547 /**
<> 144:ef7eb2e8f9f7 548 * @brief Transmit break characters.
Anna Bridge 180:96ed750bd169 549 * @param huart UART handle.
<> 144:ef7eb2e8f9f7 550 * @retval HAL status
<> 144:ef7eb2e8f9f7 551 */
<> 144:ef7eb2e8f9f7 552 HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 553 {
<> 144:ef7eb2e8f9f7 554 /* Check the parameters */
<> 144:ef7eb2e8f9f7 555 assert_param(IS_UART_LIN_INSTANCE(huart->Instance));
<> 144:ef7eb2e8f9f7 556
<> 144:ef7eb2e8f9f7 557 /* Process Locked */
<> 144:ef7eb2e8f9f7 558 __HAL_LOCK(huart);
<> 144:ef7eb2e8f9f7 559
<> 144:ef7eb2e8f9f7 560 huart->gState = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 561
<> 144:ef7eb2e8f9f7 562 /* Send break characters */
<> 144:ef7eb2e8f9f7 563 huart->Instance->RQR |= UART_SENDBREAK_REQUEST;
<> 144:ef7eb2e8f9f7 564
<> 144:ef7eb2e8f9f7 565 huart->gState = HAL_UART_STATE_READY;
<> 144:ef7eb2e8f9f7 566
<> 144:ef7eb2e8f9f7 567 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 568 __HAL_UNLOCK(huart);
<> 144:ef7eb2e8f9f7 569
<> 144:ef7eb2e8f9f7 570 return HAL_OK;
<> 144:ef7eb2e8f9f7 571 }
<> 144:ef7eb2e8f9f7 572 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
<> 144:ef7eb2e8f9f7 573
<> 144:ef7eb2e8f9f7 574 /**
<> 144:ef7eb2e8f9f7 575 * @}
<> 144:ef7eb2e8f9f7 576 */
<> 144:ef7eb2e8f9f7 577
<> 144:ef7eb2e8f9f7 578 /**
<> 144:ef7eb2e8f9f7 579 * @}
<> 144:ef7eb2e8f9f7 580 */
<> 144:ef7eb2e8f9f7 581
<> 144:ef7eb2e8f9f7 582 /** @addtogroup UARTEx_Private_Functions
<> 144:ef7eb2e8f9f7 583 * @{
<> 144:ef7eb2e8f9f7 584 */
<> 144:ef7eb2e8f9f7 585
<> 144:ef7eb2e8f9f7 586 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
<> 144:ef7eb2e8f9f7 587 /**
<> 144:ef7eb2e8f9f7 588 * @brief Initialize the UART wake-up from stop mode parameters when triggered by address detection.
Anna Bridge 180:96ed750bd169 589 * @param huart UART handle.
Anna Bridge 180:96ed750bd169 590 * @param WakeUpSelection UART wake up from stop mode parameters.
<> 144:ef7eb2e8f9f7 591 * @retval None
<> 144:ef7eb2e8f9f7 592 */
<> 144:ef7eb2e8f9f7 593 static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
<> 144:ef7eb2e8f9f7 594 {
<> 144:ef7eb2e8f9f7 595 /* Check parmeters */
<> 144:ef7eb2e8f9f7 596 assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance));
<> 144:ef7eb2e8f9f7 597 assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength));
<> 144:ef7eb2e8f9f7 598
<> 144:ef7eb2e8f9f7 599 /* Set the USART address length */
<> 144:ef7eb2e8f9f7 600 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength);
<> 144:ef7eb2e8f9f7 601
<> 144:ef7eb2e8f9f7 602 /* Set the USART address node */
<> 144:ef7eb2e8f9f7 603 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS));
<> 144:ef7eb2e8f9f7 604 }
<> 144:ef7eb2e8f9f7 605 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
<> 144:ef7eb2e8f9f7 606
<> 144:ef7eb2e8f9f7 607 /**
<> 144:ef7eb2e8f9f7 608 * @}
<> 144:ef7eb2e8f9f7 609 */
<> 144:ef7eb2e8f9f7 610
<> 144:ef7eb2e8f9f7 611 #endif /* HAL_UART_MODULE_ENABLED */
<> 144:ef7eb2e8f9f7 612
<> 144:ef7eb2e8f9f7 613 /**
<> 144:ef7eb2e8f9f7 614 * @}
<> 144:ef7eb2e8f9f7 615 */
<> 144:ef7eb2e8f9f7 616
<> 144:ef7eb2e8f9f7 617 /**
<> 144:ef7eb2e8f9f7 618 * @}
<> 144:ef7eb2e8f9f7 619 */
<> 144:ef7eb2e8f9f7 620
<> 144:ef7eb2e8f9f7 621 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/