mbed library sources. Supersedes mbed-src.

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

Committer:
<>
Date:
Fri Oct 28 11:17:30 2016 +0100
Revision:
149:156823d33999
Parent:
targets/cmsis/TARGET_STM/TARGET_STM32L0/stm32l0xx_hal_uart_ex.c@144:ef7eb2e8f9f7
Child:
151:5eaa88a5bcc7
This updates the lib to the mbed lib v128

NOTE: This release includes a restructuring of the file and directory locations and thus some
include paths in your code may need updating accordingly.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /**
<> 144:ef7eb2e8f9f7 2 ******************************************************************************
<> 144:ef7eb2e8f9f7 3 * @file stm32l0xx_hal_uart_ex.c
<> 144:ef7eb2e8f9f7 4 * @author MCD Application Team
<> 144:ef7eb2e8f9f7 5 * @version V1.5.0
<> 144:ef7eb2e8f9f7 6 * @date 8-January-2016
<> 144:ef7eb2e8f9f7 7 * @brief Extended UART HAL module driver.
<> 144:ef7eb2e8f9f7 8 *
<> 144:ef7eb2e8f9f7 9 * This file provides firmware functions to manage the following
<> 144:ef7eb2e8f9f7 10 * functionalities of the Inter Integrated Circuit (UART) peripheral:
<> 144:ef7eb2e8f9f7 11 * + Extended Control methods
<> 144:ef7eb2e8f9f7 12 *
<> 144:ef7eb2e8f9f7 13 @verbatim
<> 144:ef7eb2e8f9f7 14 ==============================================================================
<> 144:ef7eb2e8f9f7 15 ##### UART peripheral extended features #####
<> 144:ef7eb2e8f9f7 16 ==============================================================================
<> 144:ef7eb2e8f9f7 17
<> 144:ef7eb2e8f9f7 18 [..] Comparing to other previous devices, the UART interface for STM32L0XX
<> 144:ef7eb2e8f9f7 19 devices contains the following additional features
<> 144:ef7eb2e8f9f7 20
<> 144:ef7eb2e8f9f7 21 (+) Possibility to disable or enable Analog Noise Filter
<> 144:ef7eb2e8f9f7 22 (+) Use of a configured Digital Noise Filter
<> 144:ef7eb2e8f9f7 23 (+) Disable or enable wakeup from Stop mode
<> 144:ef7eb2e8f9f7 24
<> 144:ef7eb2e8f9f7 25 ##### How to use this driver #####
<> 144:ef7eb2e8f9f7 26 ==============================================================================
<> 144:ef7eb2e8f9f7 27 [..] This driver provides functions to configure Noise Filter
<> 144:ef7eb2e8f9f7 28
<> 144:ef7eb2e8f9f7 29 @endverbatim
<> 144:ef7eb2e8f9f7 30 ******************************************************************************
<> 144:ef7eb2e8f9f7 31 * @attention
<> 144:ef7eb2e8f9f7 32 *
<> 144:ef7eb2e8f9f7 33 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
<> 144:ef7eb2e8f9f7 34 *
<> 144:ef7eb2e8f9f7 35 * Redistribution and use in source and binary forms, with or without modification,
<> 144:ef7eb2e8f9f7 36 * are permitted provided that the following conditions are met:
<> 144:ef7eb2e8f9f7 37 * 1. Redistributions of source code must retain the above copyright notice,
<> 144:ef7eb2e8f9f7 38 * this list of conditions and the following disclaimer.
<> 144:ef7eb2e8f9f7 39 * 2. Redistributions in binary form must reproduce the above copyright notice,
<> 144:ef7eb2e8f9f7 40 * this list of conditions and the following disclaimer in the documentation
<> 144:ef7eb2e8f9f7 41 * and/or other materials provided with the distribution.
<> 144:ef7eb2e8f9f7 42 * 3. Neither the name of STMicroelectronics nor the names of its contributors
<> 144:ef7eb2e8f9f7 43 * may be used to endorse or promote products derived from this software
<> 144:ef7eb2e8f9f7 44 * without specific prior written permission.
<> 144:ef7eb2e8f9f7 45 *
<> 144:ef7eb2e8f9f7 46 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
<> 144:ef7eb2e8f9f7 47 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
<> 144:ef7eb2e8f9f7 48 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
<> 144:ef7eb2e8f9f7 49 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
<> 144:ef7eb2e8f9f7 50 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
<> 144:ef7eb2e8f9f7 51 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
<> 144:ef7eb2e8f9f7 52 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
<> 144:ef7eb2e8f9f7 53 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
<> 144:ef7eb2e8f9f7 54 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
<> 144:ef7eb2e8f9f7 55 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<> 144:ef7eb2e8f9f7 56 *
<> 144:ef7eb2e8f9f7 57 ******************************************************************************
<> 144:ef7eb2e8f9f7 58 */
<> 144:ef7eb2e8f9f7 59
<> 144:ef7eb2e8f9f7 60 /* Includes ------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 61 #include "stm32l0xx_hal.h"
<> 144:ef7eb2e8f9f7 62
<> 144:ef7eb2e8f9f7 63 /** @addtogroup STM32L0xx_HAL_Driver
<> 144:ef7eb2e8f9f7 64 * @{
<> 144:ef7eb2e8f9f7 65 */
<> 144:ef7eb2e8f9f7 66
<> 144:ef7eb2e8f9f7 67 #ifdef HAL_UART_MODULE_ENABLED
<> 144:ef7eb2e8f9f7 68
<> 144:ef7eb2e8f9f7 69 /** @addtogroup UARTEx
<> 144:ef7eb2e8f9f7 70 * @brief UARTEx module driver
<> 144:ef7eb2e8f9f7 71 * @{
<> 144:ef7eb2e8f9f7 72 */
<> 144:ef7eb2e8f9f7 73
<> 144:ef7eb2e8f9f7 74 /** @addtogroup UARTEx_Private
<> 144:ef7eb2e8f9f7 75 * @{
<> 144:ef7eb2e8f9f7 76 */
<> 144:ef7eb2e8f9f7 77 /* Private typedef -----------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 78 /* Private define ------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 79 #define UART_REACK_TIMEOUT ((uint32_t) 1000)
<> 144:ef7eb2e8f9f7 80 /* Private macro -------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 81 /* Private variables ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 82 /* Private function prototypes -----------------------------------------------*/
<> 144:ef7eb2e8f9f7 83 static void UART_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
<> 144:ef7eb2e8f9f7 84 /* Private functions ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 85
<> 144:ef7eb2e8f9f7 86 /**
<> 144:ef7eb2e8f9f7 87 * @}
<> 144:ef7eb2e8f9f7 88 */
<> 144:ef7eb2e8f9f7 89
<> 144:ef7eb2e8f9f7 90 /** @addtogroup UARTEx_Exported_Functions
<> 144:ef7eb2e8f9f7 91 * @{
<> 144:ef7eb2e8f9f7 92 */
<> 144:ef7eb2e8f9f7 93
<> 144:ef7eb2e8f9f7 94 /** @addtogroup UARTEx_Exported_Functions_Group1
<> 144:ef7eb2e8f9f7 95 * @brief Extended Initialization and Configuration Functions
<> 144:ef7eb2e8f9f7 96
<> 144:ef7eb2e8f9f7 97 *
<> 144:ef7eb2e8f9f7 98 @verbatim
<> 144:ef7eb2e8f9f7 99 ===============================================================================
<> 144:ef7eb2e8f9f7 100 ##### Initialization and Configuration functions #####
<> 144:ef7eb2e8f9f7 101 ===============================================================================
<> 144:ef7eb2e8f9f7 102 [..]
<> 144:ef7eb2e8f9f7 103 The HAL_RS485Ex_Init() API follows respectively the UART RS485 mode
<> 144:ef7eb2e8f9f7 104 configuration procedures (details for the procedures are available in reference manual).
<> 144:ef7eb2e8f9f7 105
<> 144:ef7eb2e8f9f7 106 @endverbatim
<> 144:ef7eb2e8f9f7 107 * @{
<> 144:ef7eb2e8f9f7 108 */
<> 144:ef7eb2e8f9f7 109
<> 144:ef7eb2e8f9f7 110 /**
<> 144:ef7eb2e8f9f7 111 * @brief Initializes the RS485 Driver enable feature according to the specified
<> 144:ef7eb2e8f9f7 112 * parameters in the UART_InitTypeDef and creates the associated handle .
<> 144:ef7eb2e8f9f7 113 * @param huart: uart handle
<> 144:ef7eb2e8f9f7 114 * @param Polarity: select the driver enable polarity
<> 144:ef7eb2e8f9f7 115 * This parameter can be one of the following values:
<> 144:ef7eb2e8f9f7 116 * @arg UART_DE_POLARITY_HIGH: DE signal is active high
<> 144:ef7eb2e8f9f7 117 * @arg UART_DE_POLARITY_LOW: DE signal is active low
<> 144:ef7eb2e8f9f7 118 * @param AssertionTime: Driver Enable assertion time
<> 144:ef7eb2e8f9f7 119 * 5-bit value defining the time between the activation of the DE (Driver Enable)
<> 144:ef7eb2e8f9f7 120 * signal and the beginning of the start bit. It is expressed in sample time
<> 144:ef7eb2e8f9f7 121 * units (1/8 or 1/16 bit time, depending on the oversampling rate)
<> 144:ef7eb2e8f9f7 122 * @param DeassertionTime: Driver Enable deassertion time
<> 144:ef7eb2e8f9f7 123 * 5-bit value defining the time between the end of the last stop bit, in a
<> 144:ef7eb2e8f9f7 124 * transmitted message, and the de-activation of the DE (Driver Enable) signal.
<> 144:ef7eb2e8f9f7 125 * It is expressed in sample time units (1/8 or 1/16 bit time, depending on the
<> 144:ef7eb2e8f9f7 126 * oversampling rate).
<> 144:ef7eb2e8f9f7 127 * @retval HAL status
<> 144:ef7eb2e8f9f7 128 */
<> 144:ef7eb2e8f9f7 129 HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime)
<> 144:ef7eb2e8f9f7 130 {
<> 144:ef7eb2e8f9f7 131 uint32_t temp = 0x0;
<> 144:ef7eb2e8f9f7 132
<> 144:ef7eb2e8f9f7 133 /* Check the UART handle allocation */
<> 144:ef7eb2e8f9f7 134 if(huart == NULL)
<> 144:ef7eb2e8f9f7 135 {
<> 144:ef7eb2e8f9f7 136 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 137 }
<> 144:ef7eb2e8f9f7 138
<> 144:ef7eb2e8f9f7 139 /* Check the Driver Enable polarity */
<> 144:ef7eb2e8f9f7 140 assert_param(IS_UART_DE_POLARITY(Polarity));
<> 144:ef7eb2e8f9f7 141
<> 144:ef7eb2e8f9f7 142 /* Check the Driver Enable assertion time */
<> 144:ef7eb2e8f9f7 143 assert_param(IS_UART_ASSERTIONTIME(AssertionTime));
<> 144:ef7eb2e8f9f7 144
<> 144:ef7eb2e8f9f7 145 /* Check the Driver Enable deassertion time */
<> 144:ef7eb2e8f9f7 146 assert_param(IS_UART_DEASSERTIONTIME(DeassertionTime));
<> 144:ef7eb2e8f9f7 147
<> 144:ef7eb2e8f9f7 148 if(huart->State == HAL_UART_STATE_RESET)
<> 144:ef7eb2e8f9f7 149 {
<> 144:ef7eb2e8f9f7 150 /* Init the low level hardware : GPIO, CLOCK, CORTEX */
<> 144:ef7eb2e8f9f7 151 HAL_UART_MspInit(huart);
<> 144:ef7eb2e8f9f7 152 }
<> 144:ef7eb2e8f9f7 153
<> 144:ef7eb2e8f9f7 154 huart->State = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 155
<> 144:ef7eb2e8f9f7 156 /* Disable the Peripheral */
<> 144:ef7eb2e8f9f7 157 __HAL_UART_DISABLE(huart);
<> 144:ef7eb2e8f9f7 158
<> 144:ef7eb2e8f9f7 159 /* Set the UART Communication parameters */
<> 144:ef7eb2e8f9f7 160 UART_SetConfig(huart);
<> 144:ef7eb2e8f9f7 161
<> 144:ef7eb2e8f9f7 162 if(huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
<> 144:ef7eb2e8f9f7 163 {
<> 144:ef7eb2e8f9f7 164 UART_AdvFeatureConfig(huart);
<> 144:ef7eb2e8f9f7 165 }
<> 144:ef7eb2e8f9f7 166
<> 144:ef7eb2e8f9f7 167 /* Enable the Driver Enable mode by setting the DEM bit in the CR3 register */
<> 144:ef7eb2e8f9f7 168 huart->Instance->CR3 |= USART_CR3_DEM;
<> 144:ef7eb2e8f9f7 169
<> 144:ef7eb2e8f9f7 170 /* Set the Driver Enable polarity */
<> 144:ef7eb2e8f9f7 171 MODIFY_REG(huart->Instance->CR3, USART_CR3_DEP, Polarity);
<> 144:ef7eb2e8f9f7 172
<> 144:ef7eb2e8f9f7 173 /* Set the Driver Enable assertion and deassertion times */
<> 144:ef7eb2e8f9f7 174 temp = (AssertionTime << UART_CR1_DEAT_ADDRESS_LSB_POS);
<> 144:ef7eb2e8f9f7 175 temp |= (DeassertionTime << UART_CR1_DEDT_ADDRESS_LSB_POS);
<> 144:ef7eb2e8f9f7 176 MODIFY_REG(huart->Instance->CR1, (USART_CR1_DEDT|USART_CR1_DEAT), temp);
<> 144:ef7eb2e8f9f7 177
<> 144:ef7eb2e8f9f7 178 /* Enable the Peripheral */
<> 144:ef7eb2e8f9f7 179 __HAL_UART_ENABLE(huart);
<> 144:ef7eb2e8f9f7 180
<> 144:ef7eb2e8f9f7 181 /* TEACK and/or REACK to check before moving huart->State to Ready */
<> 144:ef7eb2e8f9f7 182 return (UART_CheckIdleState(huart));
<> 144:ef7eb2e8f9f7 183 }
<> 144:ef7eb2e8f9f7 184
<> 144:ef7eb2e8f9f7 185
<> 144:ef7eb2e8f9f7 186 /**
<> 144:ef7eb2e8f9f7 187 * @}
<> 144:ef7eb2e8f9f7 188 */
<> 144:ef7eb2e8f9f7 189
<> 144:ef7eb2e8f9f7 190 /** @addtogroup UARTEx_Exported_Functions_Group2
<> 144:ef7eb2e8f9f7 191 * @brief management functions
<> 144:ef7eb2e8f9f7 192 *
<> 144:ef7eb2e8f9f7 193 @verbatim
<> 144:ef7eb2e8f9f7 194 ===============================================================================
<> 144:ef7eb2e8f9f7 195 ##### Peripheral Control funtions #####
<> 144:ef7eb2e8f9f7 196 ===============================================================================
<> 144:ef7eb2e8f9f7 197 [..] This section provides functions allowing to:
<> 144:ef7eb2e8f9f7 198 (+) UART_AdvFeatureConfig() API optionally configures the UART advanced features
<> 144:ef7eb2e8f9f7 199 (+) HAL_MultiProcessorEx_AddressLength_Set() API optionally sets the UART node address
<> 144:ef7eb2e8f9f7 200 detection length to more than 4 bits for multiprocessor address mark wake up.
<> 144:ef7eb2e8f9f7 201 (+) HAL_UARTEx_EnableStopMode() API enables the UART to wake up the MCU from stop mode
<> 144:ef7eb2e8f9f7 202 (+) HAL_UARTEx_DisableStopMode() API disables the above functionality
<> 144:ef7eb2e8f9f7 203 (+) HAL_UARTEx_EnableClockStopMode() API enables the UART HSI clock during stop mode
<> 144:ef7eb2e8f9f7 204 (+) HAL_UARTEx_DisableClockStopMode() API disables the above functionality
<> 144:ef7eb2e8f9f7 205 (+) UART_Wakeup_AddressConfig() API configures the wake-up from stop mode parameters
<> 144:ef7eb2e8f9f7 206
<> 144:ef7eb2e8f9f7 207 @endverbatim
<> 144:ef7eb2e8f9f7 208 * @{
<> 144:ef7eb2e8f9f7 209 */
<> 144:ef7eb2e8f9f7 210
<> 144:ef7eb2e8f9f7 211 /**
<> 144:ef7eb2e8f9f7 212 * @brief Enable UART Stop Mode
<> 144:ef7eb2e8f9f7 213 * The UART is able to wake up the MCU from Stop mode as long as UART clock is HSI or LSE
<> 144:ef7eb2e8f9f7 214 * @param huart: uart handle
<> 144:ef7eb2e8f9f7 215 * @retval HAL status
<> 144:ef7eb2e8f9f7 216 */
<> 144:ef7eb2e8f9f7 217 HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 218 {
<> 144:ef7eb2e8f9f7 219 /* Process Locked */
<> 144:ef7eb2e8f9f7 220 __HAL_LOCK(huart);
<> 144:ef7eb2e8f9f7 221
<> 144:ef7eb2e8f9f7 222 huart->State = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 223
<> 144:ef7eb2e8f9f7 224 /* Set the USART UESM bit */
<> 144:ef7eb2e8f9f7 225 huart->Instance->CR1 |= USART_CR1_UESM;
<> 144:ef7eb2e8f9f7 226
<> 144:ef7eb2e8f9f7 227 huart->State = HAL_UART_STATE_READY;
<> 144:ef7eb2e8f9f7 228
<> 144:ef7eb2e8f9f7 229 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 230 __HAL_UNLOCK(huart);
<> 144:ef7eb2e8f9f7 231
<> 144:ef7eb2e8f9f7 232 return HAL_OK;
<> 144:ef7eb2e8f9f7 233 }
<> 144:ef7eb2e8f9f7 234
<> 144:ef7eb2e8f9f7 235 /**
<> 144:ef7eb2e8f9f7 236 * @brief Enable UART Clock in Stop Mode
<> 144:ef7eb2e8f9f7 237 * The UART keeps the Clock ON during Stop mode
<> 144:ef7eb2e8f9f7 238 * @param huart: uart handle
<> 144:ef7eb2e8f9f7 239 * @retval HAL status
<> 144:ef7eb2e8f9f7 240 */
<> 144:ef7eb2e8f9f7 241 HAL_StatusTypeDef HAL_UARTEx_EnableClockStopMode(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 242 {
<> 144:ef7eb2e8f9f7 243 /* Process Locked */
<> 144:ef7eb2e8f9f7 244 __HAL_LOCK(huart);
<> 144:ef7eb2e8f9f7 245
<> 144:ef7eb2e8f9f7 246 huart->State = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 247
<> 144:ef7eb2e8f9f7 248 /* Set the USART UESM bit */
<> 144:ef7eb2e8f9f7 249 huart->Instance->CR3 |= USART_CR3_UCESM;
<> 144:ef7eb2e8f9f7 250
<> 144:ef7eb2e8f9f7 251 huart->State = HAL_UART_STATE_READY;
<> 144:ef7eb2e8f9f7 252
<> 144:ef7eb2e8f9f7 253 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 254 __HAL_UNLOCK(huart);
<> 144:ef7eb2e8f9f7 255
<> 144:ef7eb2e8f9f7 256 return HAL_OK;
<> 144:ef7eb2e8f9f7 257 }
<> 144:ef7eb2e8f9f7 258
<> 144:ef7eb2e8f9f7 259 /**
<> 144:ef7eb2e8f9f7 260 * @brief Disable UART Stop Mode
<> 144:ef7eb2e8f9f7 261 * @param huart: uart handle
<> 144:ef7eb2e8f9f7 262 * @retval HAL status
<> 144:ef7eb2e8f9f7 263 */
<> 144:ef7eb2e8f9f7 264 HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 265 {
<> 144:ef7eb2e8f9f7 266 /* Process Locked */
<> 144:ef7eb2e8f9f7 267 __HAL_LOCK(huart);
<> 144:ef7eb2e8f9f7 268
<> 144:ef7eb2e8f9f7 269 huart->State = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 270
<> 144:ef7eb2e8f9f7 271 /* Clear USART UESM bit */
<> 144:ef7eb2e8f9f7 272 huart->Instance->CR1 &= ~(USART_CR1_UESM);
<> 144:ef7eb2e8f9f7 273
<> 144:ef7eb2e8f9f7 274 huart->State = HAL_UART_STATE_READY;
<> 144:ef7eb2e8f9f7 275
<> 144:ef7eb2e8f9f7 276 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 277 __HAL_UNLOCK(huart);
<> 144:ef7eb2e8f9f7 278
<> 144:ef7eb2e8f9f7 279 return HAL_OK;
<> 144:ef7eb2e8f9f7 280 }
<> 144:ef7eb2e8f9f7 281
<> 144:ef7eb2e8f9f7 282 /**
<> 144:ef7eb2e8f9f7 283 * @brief Disable UART Clock in Stop Mode
<> 144:ef7eb2e8f9f7 284 * @param huart: uart handle
<> 144:ef7eb2e8f9f7 285 * @retval HAL status
<> 144:ef7eb2e8f9f7 286 */
<> 144:ef7eb2e8f9f7 287 HAL_StatusTypeDef HAL_UARTEx_DisableClockStopMode(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 288 {
<> 144:ef7eb2e8f9f7 289 /* Process Locked */
<> 144:ef7eb2e8f9f7 290 __HAL_LOCK(huart);
<> 144:ef7eb2e8f9f7 291
<> 144:ef7eb2e8f9f7 292 huart->State = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 293
<> 144:ef7eb2e8f9f7 294 /* Clear USART UESM bit */
<> 144:ef7eb2e8f9f7 295 huart->Instance->CR3 &= ~(USART_CR3_UCESM);
<> 144:ef7eb2e8f9f7 296
<> 144:ef7eb2e8f9f7 297 huart->State = HAL_UART_STATE_READY;
<> 144:ef7eb2e8f9f7 298
<> 144:ef7eb2e8f9f7 299 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 300 __HAL_UNLOCK(huart);
<> 144:ef7eb2e8f9f7 301
<> 144:ef7eb2e8f9f7 302 return HAL_OK;
<> 144:ef7eb2e8f9f7 303 }
<> 144:ef7eb2e8f9f7 304
<> 144:ef7eb2e8f9f7 305 /**
<> 144:ef7eb2e8f9f7 306 * @brief Set Wakeup from Stop mode interrupt flag selection
<> 144:ef7eb2e8f9f7 307 * @param huart: uart handle,
<> 144:ef7eb2e8f9f7 308 * @param WakeUpSelection: address match, Start Bit detection or RXNE bit status.
<> 144:ef7eb2e8f9f7 309 * This parameter can be one of the following values:
<> 144:ef7eb2e8f9f7 310 * @arg UART_WAKEUP_ON_ADDRESS
<> 144:ef7eb2e8f9f7 311 * @arg UART_WAKEUP_ON_STARTBIT
<> 144:ef7eb2e8f9f7 312 * @arg UART_WAKEUP_ON_READDATA_NONEMPTY
<> 144:ef7eb2e8f9f7 313 * @retval HAL status
<> 144:ef7eb2e8f9f7 314 */
<> 144:ef7eb2e8f9f7 315 HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
<> 144:ef7eb2e8f9f7 316 {
<> 144:ef7eb2e8f9f7 317
<> 144:ef7eb2e8f9f7 318 /* check the wake-up from stop mode UART instance */
<> 144:ef7eb2e8f9f7 319 assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance));
<> 144:ef7eb2e8f9f7 320 /* Check the wake-up selection parameter */
<> 144:ef7eb2e8f9f7 321 assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent));
<> 144:ef7eb2e8f9f7 322
<> 144:ef7eb2e8f9f7 323 /* Process Locked */
<> 144:ef7eb2e8f9f7 324 __HAL_LOCK(huart);
<> 144:ef7eb2e8f9f7 325
<> 144:ef7eb2e8f9f7 326 huart->State = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 327
<> 144:ef7eb2e8f9f7 328 /* Disable the Peripheral */
<> 144:ef7eb2e8f9f7 329 __HAL_UART_DISABLE(huart);
<> 144:ef7eb2e8f9f7 330
<> 144:ef7eb2e8f9f7 331 /* Set the wake-up selection scheme */
<> 144:ef7eb2e8f9f7 332 MODIFY_REG(huart->Instance->CR3, USART_CR3_WUS, WakeUpSelection.WakeUpEvent);
<> 144:ef7eb2e8f9f7 333
<> 144:ef7eb2e8f9f7 334 if(WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS)
<> 144:ef7eb2e8f9f7 335 {
<> 144:ef7eb2e8f9f7 336 UART_Wakeup_AddressConfig(huart, WakeUpSelection);
<> 144:ef7eb2e8f9f7 337 }
<> 144:ef7eb2e8f9f7 338
<> 144:ef7eb2e8f9f7 339 /* Enable the Peripheral */
<> 144:ef7eb2e8f9f7 340 __HAL_UART_ENABLE(huart);
<> 144:ef7eb2e8f9f7 341
<> 144:ef7eb2e8f9f7 342 /* Wait until REACK flag is set before moving huart->State to Ready */
<> 144:ef7eb2e8f9f7 343 if(UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, UART_REACK_TIMEOUT) != HAL_OK)
<> 144:ef7eb2e8f9f7 344 {
<> 144:ef7eb2e8f9f7 345 return HAL_TIMEOUT;
<> 144:ef7eb2e8f9f7 346 }
<> 144:ef7eb2e8f9f7 347
<> 144:ef7eb2e8f9f7 348 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 349 __HAL_UNLOCK(huart);
<> 144:ef7eb2e8f9f7 350
<> 144:ef7eb2e8f9f7 351 /* Initialize the UART state*/
<> 144:ef7eb2e8f9f7 352 huart->ErrorCode = HAL_UART_ERROR_NONE;
<> 144:ef7eb2e8f9f7 353 huart->State= HAL_UART_STATE_READY;
<> 144:ef7eb2e8f9f7 354
<> 144:ef7eb2e8f9f7 355 return HAL_OK;
<> 144:ef7eb2e8f9f7 356 }
<> 144:ef7eb2e8f9f7 357 /**
<> 144:ef7eb2e8f9f7 358 * @brief By default in multiprocessor mode, when the wake up method is set
<> 144:ef7eb2e8f9f7 359 * to address mark, the UART handles only 4-bit long addresses detection.
<> 144:ef7eb2e8f9f7 360 * This API allows to enable longer addresses detection (6-, 7- or 8-bit
<> 144:ef7eb2e8f9f7 361 * long):
<> 144:ef7eb2e8f9f7 362 * - 6-bit address detection in 7-bit data mode
<> 144:ef7eb2e8f9f7 363 * - 7-bit address detection in 8-bit data mode
<> 144:ef7eb2e8f9f7 364 * - 8-bit address detection in 9-bit data mode
<> 144:ef7eb2e8f9f7 365 * @param huart: UART handle
<> 144:ef7eb2e8f9f7 366 * @param AddressLength: this parameter can be one of the following values:
<> 144:ef7eb2e8f9f7 367 * @arg UART_ADDRESS_DETECT_4B: 4-bit long address
<> 144:ef7eb2e8f9f7 368 * @arg UART_ADDRESS_DETECT_7B: 6-, 7- or 8-bit long address
<> 144:ef7eb2e8f9f7 369 * @retval HAL status
<> 144:ef7eb2e8f9f7 370 */
<> 144:ef7eb2e8f9f7 371 HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength)
<> 144:ef7eb2e8f9f7 372 {
<> 144:ef7eb2e8f9f7 373 /* Check the UART handle allocation */
<> 144:ef7eb2e8f9f7 374 if(huart == NULL)
<> 144:ef7eb2e8f9f7 375 {
<> 144:ef7eb2e8f9f7 376 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 377 }
<> 144:ef7eb2e8f9f7 378
<> 144:ef7eb2e8f9f7 379 /* Check the address length parameter */
<> 144:ef7eb2e8f9f7 380 assert_param(IS_UART_ADDRESSLENGTH_DETECT(AddressLength));
<> 144:ef7eb2e8f9f7 381
<> 144:ef7eb2e8f9f7 382 huart->State = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 383
<> 144:ef7eb2e8f9f7 384 /* Disable the Peripheral */
<> 144:ef7eb2e8f9f7 385 __HAL_UART_DISABLE(huart);
<> 144:ef7eb2e8f9f7 386
<> 144:ef7eb2e8f9f7 387 /* Set the address length */
<> 144:ef7eb2e8f9f7 388 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, AddressLength);
<> 144:ef7eb2e8f9f7 389
<> 144:ef7eb2e8f9f7 390 /* Enable the Peripheral */
<> 144:ef7eb2e8f9f7 391 __HAL_UART_ENABLE(huart);
<> 144:ef7eb2e8f9f7 392
<> 144:ef7eb2e8f9f7 393 /* TEACK and/or REACK to check before moving huart->State to Ready */
<> 144:ef7eb2e8f9f7 394 return (UART_CheckIdleState(huart));
<> 144:ef7eb2e8f9f7 395 }
<> 144:ef7eb2e8f9f7 396
<> 144:ef7eb2e8f9f7 397 /**
<> 144:ef7eb2e8f9f7 398 * @brief UART wakeup from Stop mode callback
<> 144:ef7eb2e8f9f7 399 * @param huart: uart handle
<> 144:ef7eb2e8f9f7 400 * @retval None
<> 144:ef7eb2e8f9f7 401 */
<> 144:ef7eb2e8f9f7 402 __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 403 {
<> 144:ef7eb2e8f9f7 404 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 405 UNUSED(huart);
<> 144:ef7eb2e8f9f7 406
<> 144:ef7eb2e8f9f7 407 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 408 the HAL_UART_WakeupCallback can be implemented in the user file
<> 144:ef7eb2e8f9f7 409 */
<> 144:ef7eb2e8f9f7 410 }
<> 144:ef7eb2e8f9f7 411
<> 144:ef7eb2e8f9f7 412 /**
<> 144:ef7eb2e8f9f7 413 * @}
<> 144:ef7eb2e8f9f7 414 */
<> 144:ef7eb2e8f9f7 415
<> 144:ef7eb2e8f9f7 416 /**
<> 144:ef7eb2e8f9f7 417 * @}
<> 144:ef7eb2e8f9f7 418 */
<> 144:ef7eb2e8f9f7 419
<> 144:ef7eb2e8f9f7 420 /** @addtogroup UARTEx_Private
<> 144:ef7eb2e8f9f7 421 * @{
<> 144:ef7eb2e8f9f7 422 */
<> 144:ef7eb2e8f9f7 423 /**
<> 144:ef7eb2e8f9f7 424 * @brief Initializes the UART wake-up from stop mode parameters when triggered by address detection.
<> 144:ef7eb2e8f9f7 425 * @param huart: uart handle
<> 144:ef7eb2e8f9f7 426 * @param WakeUpSelection: UART wake up from stop mode parameters
<> 144:ef7eb2e8f9f7 427 * @retval HAL status
<> 144:ef7eb2e8f9f7 428 */
<> 144:ef7eb2e8f9f7 429 static void UART_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
<> 144:ef7eb2e8f9f7 430 {
<> 144:ef7eb2e8f9f7 431 assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength));
<> 144:ef7eb2e8f9f7 432 if(WakeUpSelection.AddressLength == UART_ADDRESS_DETECT_4B)
<> 144:ef7eb2e8f9f7 433 {
<> 144:ef7eb2e8f9f7 434 assert_param(IS_UART_4B_ADDRESS(WakeUpSelection.Address));
<> 144:ef7eb2e8f9f7 435 }
<> 144:ef7eb2e8f9f7 436 else
<> 144:ef7eb2e8f9f7 437 {
<> 144:ef7eb2e8f9f7 438 assert_param(IS_UART_7B_ADDRESS(WakeUpSelection.Address));
<> 144:ef7eb2e8f9f7 439 }
<> 144:ef7eb2e8f9f7 440
<> 144:ef7eb2e8f9f7 441 /* Set the USART address length */
<> 144:ef7eb2e8f9f7 442 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength);
<> 144:ef7eb2e8f9f7 443
<> 144:ef7eb2e8f9f7 444 /* Set the USART address node */
<> 144:ef7eb2e8f9f7 445 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS));
<> 144:ef7eb2e8f9f7 446 }
<> 144:ef7eb2e8f9f7 447
<> 144:ef7eb2e8f9f7 448
<> 144:ef7eb2e8f9f7 449 /**
<> 144:ef7eb2e8f9f7 450 * @}
<> 144:ef7eb2e8f9f7 451 */
<> 144:ef7eb2e8f9f7 452
<> 144:ef7eb2e8f9f7 453 /**
<> 144:ef7eb2e8f9f7 454 * @}
<> 144:ef7eb2e8f9f7 455 */
<> 144:ef7eb2e8f9f7 456
<> 144:ef7eb2e8f9f7 457 #endif /* HAL_UART_MODULE_ENABLED */
<> 144:ef7eb2e8f9f7 458
<> 144:ef7eb2e8f9f7 459 /**
<> 144:ef7eb2e8f9f7 460 * @}
<> 144:ef7eb2e8f9f7 461 */
<> 144:ef7eb2e8f9f7 462
<> 144:ef7eb2e8f9f7 463 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
<> 144:ef7eb2e8f9f7 464