mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Mon Nov 03 10:45:07 2014 +0000
Revision:
382:ee426a420dbb
Parent:
targets/cmsis/TARGET_STM/TARGET_DISCO_L053C8/stm32l0xx_hal_uart_ex.c@376:cb4d9db17537
Child:
387:643a59b3dbac
Synchronized with git revision d54467eb07f62efd9ccdf44f1ede7fe1c1b0cf83

Full URL: https://github.com/mbedmicro/mbed/commit/d54467eb07f62efd9ccdf44f1ede7fe1c1b0cf83/

Who changed what in which revision?

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