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:
Wed Jul 01 09:45:11 2015 +0100
Revision:
579:53297373a894
Parent:
489:119543c9f674
Synchronized with git revision d5b4d2ab9c47edb4dc5776e7177b0c2263459081

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

Initial version of drivers for SAMR21

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 489:119543c9f674 5 * @version V1.2.0
mbed_official 489:119543c9f674 6 * @date 06-February-2015
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 489:119543c9f674 33 * <h2><center>&copy; COPYRIGHT(c) 2015 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 489:119543c9f674 67 /** @addtogroup 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 489:119543c9f674 83 /** @addtogroup UARTEx_Exported_Functions
mbed_official 376:cb4d9db17537 84 * @{
mbed_official 376:cb4d9db17537 85 */
mbed_official 376:cb4d9db17537 86
mbed_official 489:119543c9f674 87 /** @addtogroup UARTEx_Exported_Functions_Group1
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 489:119543c9f674 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 /**
mbed_official 376:cb4d9db17537 180 * @}
mbed_official 376:cb4d9db17537 181 */
mbed_official 376:cb4d9db17537 182
mbed_official 489:119543c9f674 183 /** @addtogroup UARTEx_Exported_Functions_Group2
mbed_official 376:cb4d9db17537 184 * @brief management functions
mbed_official 376:cb4d9db17537 185 *
mbed_official 376:cb4d9db17537 186 @verbatim
mbed_official 376:cb4d9db17537 187 ===============================================================================
mbed_official 376:cb4d9db17537 188 ##### Peripheral Control funtions #####
mbed_official 376:cb4d9db17537 189 ===============================================================================
mbed_official 376:cb4d9db17537 190 [..] This section provides functions allowing to:
mbed_official 376:cb4d9db17537 191 (+) UART_AdvFeatureConfig() API optionally configures the UART advanced features
mbed_official 376:cb4d9db17537 192 (+) HAL_MultiProcessorEx_AddressLength_Set() API optionally sets the UART node address
mbed_official 376:cb4d9db17537 193 detection length to more than 4 bits for multiprocessor address mark wake up.
mbed_official 376:cb4d9db17537 194 (+) HAL_UARTEx_EnableStopMode() API enables the UART to wake up the MCU from stop mode
mbed_official 376:cb4d9db17537 195 (+) HAL_UARTEx_DisableStopMode() API disables the above functionality
mbed_official 376:cb4d9db17537 196 (+) HAL_UARTEx_EnableClockStopMode() API enables the UART HSI clock during stop mode
mbed_official 376:cb4d9db17537 197 (+) HAL_UARTEx_DisableClockStopMode() API disables the above functionality
mbed_official 376:cb4d9db17537 198 (+) UART_Wakeup_AddressConfig() API configures the wake-up from stop mode parameters
mbed_official 376:cb4d9db17537 199
mbed_official 376:cb4d9db17537 200 @endverbatim
mbed_official 376:cb4d9db17537 201 * @{
mbed_official 376:cb4d9db17537 202 */
mbed_official 376:cb4d9db17537 203
mbed_official 376:cb4d9db17537 204 /**
mbed_official 376:cb4d9db17537 205 * @brief Enable UART Stop Mode
mbed_official 376:cb4d9db17537 206 * 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 207 * @param huart: uart handle
mbed_official 376:cb4d9db17537 208 * @retval HAL status
mbed_official 376:cb4d9db17537 209 */
mbed_official 376:cb4d9db17537 210 HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart)
mbed_official 376:cb4d9db17537 211 {
mbed_official 376:cb4d9db17537 212 /* Process Locked */
mbed_official 376:cb4d9db17537 213 __HAL_LOCK(huart);
mbed_official 376:cb4d9db17537 214
mbed_official 376:cb4d9db17537 215 huart->State = HAL_UART_STATE_BUSY;
mbed_official 376:cb4d9db17537 216
mbed_official 376:cb4d9db17537 217 /* Set the USART UESM bit */
mbed_official 376:cb4d9db17537 218 huart->Instance->CR1 |= USART_CR1_UESM;
mbed_official 376:cb4d9db17537 219
mbed_official 376:cb4d9db17537 220 huart->State = HAL_UART_STATE_READY;
mbed_official 376:cb4d9db17537 221
mbed_official 376:cb4d9db17537 222 /* Process Unlocked */
mbed_official 376:cb4d9db17537 223 __HAL_UNLOCK(huart);
mbed_official 376:cb4d9db17537 224
mbed_official 376:cb4d9db17537 225 return HAL_OK;
mbed_official 376:cb4d9db17537 226 }
mbed_official 376:cb4d9db17537 227
mbed_official 376:cb4d9db17537 228 /**
mbed_official 376:cb4d9db17537 229 * @brief Enable UART Clock in Stop Mode
mbed_official 376:cb4d9db17537 230 * The UART keeps the Clock ON during Stop mode
mbed_official 376:cb4d9db17537 231 * @param huart: uart handle
mbed_official 376:cb4d9db17537 232 * @retval HAL status
mbed_official 376:cb4d9db17537 233 */
mbed_official 376:cb4d9db17537 234 HAL_StatusTypeDef HAL_UARTEx_EnableClockStopMode(UART_HandleTypeDef *huart)
mbed_official 376:cb4d9db17537 235 {
mbed_official 376:cb4d9db17537 236 /* Process Locked */
mbed_official 376:cb4d9db17537 237 __HAL_LOCK(huart);
mbed_official 376:cb4d9db17537 238
mbed_official 376:cb4d9db17537 239 huart->State = HAL_UART_STATE_BUSY;
mbed_official 376:cb4d9db17537 240
mbed_official 376:cb4d9db17537 241 /* Set the USART UESM bit */
mbed_official 376:cb4d9db17537 242 huart->Instance->CR3 |= USART_CR3_UCESM;
mbed_official 376:cb4d9db17537 243
mbed_official 376:cb4d9db17537 244 huart->State = HAL_UART_STATE_READY;
mbed_official 376:cb4d9db17537 245
mbed_official 376:cb4d9db17537 246 /* Process Unlocked */
mbed_official 376:cb4d9db17537 247 __HAL_UNLOCK(huart);
mbed_official 376:cb4d9db17537 248
mbed_official 376:cb4d9db17537 249 return HAL_OK;
mbed_official 376:cb4d9db17537 250 }
mbed_official 376:cb4d9db17537 251
mbed_official 376:cb4d9db17537 252 /**
mbed_official 376:cb4d9db17537 253 * @brief Disable UART Stop Mode
mbed_official 376:cb4d9db17537 254 * @param huart: uart handle
mbed_official 376:cb4d9db17537 255 * @retval HAL status
mbed_official 376:cb4d9db17537 256 */
mbed_official 376:cb4d9db17537 257 HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart)
mbed_official 376:cb4d9db17537 258 {
mbed_official 376:cb4d9db17537 259 /* Process Locked */
mbed_official 376:cb4d9db17537 260 __HAL_LOCK(huart);
mbed_official 376:cb4d9db17537 261
mbed_official 376:cb4d9db17537 262 huart->State = HAL_UART_STATE_BUSY;
mbed_official 376:cb4d9db17537 263
mbed_official 376:cb4d9db17537 264 /* Clear USART UESM bit */
mbed_official 376:cb4d9db17537 265 huart->Instance->CR1 &= ~(USART_CR1_UESM);
mbed_official 376:cb4d9db17537 266
mbed_official 376:cb4d9db17537 267 huart->State = HAL_UART_STATE_READY;
mbed_official 376:cb4d9db17537 268
mbed_official 376:cb4d9db17537 269 /* Process Unlocked */
mbed_official 376:cb4d9db17537 270 __HAL_UNLOCK(huart);
mbed_official 376:cb4d9db17537 271
mbed_official 376:cb4d9db17537 272 return HAL_OK;
mbed_official 376:cb4d9db17537 273 }
mbed_official 376:cb4d9db17537 274
mbed_official 376:cb4d9db17537 275 /**
mbed_official 376:cb4d9db17537 276 * @brief Disable UART Clock in Stop Mode
mbed_official 376:cb4d9db17537 277 * @param huart: uart handle
mbed_official 376:cb4d9db17537 278 * @retval HAL status
mbed_official 376:cb4d9db17537 279 */
mbed_official 376:cb4d9db17537 280 HAL_StatusTypeDef HAL_UARTEx_DisableClockStopMode(UART_HandleTypeDef *huart)
mbed_official 376:cb4d9db17537 281 {
mbed_official 376:cb4d9db17537 282 /* Process Locked */
mbed_official 376:cb4d9db17537 283 __HAL_LOCK(huart);
mbed_official 376:cb4d9db17537 284
mbed_official 376:cb4d9db17537 285 huart->State = HAL_UART_STATE_BUSY;
mbed_official 376:cb4d9db17537 286
mbed_official 376:cb4d9db17537 287 /* Clear USART UESM bit */
mbed_official 376:cb4d9db17537 288 huart->Instance->CR3 &= ~(USART_CR3_UCESM);
mbed_official 376:cb4d9db17537 289
mbed_official 376:cb4d9db17537 290 huart->State = HAL_UART_STATE_READY;
mbed_official 376:cb4d9db17537 291
mbed_official 376:cb4d9db17537 292 /* Process Unlocked */
mbed_official 376:cb4d9db17537 293 __HAL_UNLOCK(huart);
mbed_official 376:cb4d9db17537 294
mbed_official 376:cb4d9db17537 295 return HAL_OK;
mbed_official 376:cb4d9db17537 296 }
mbed_official 376:cb4d9db17537 297
mbed_official 376:cb4d9db17537 298 /**
mbed_official 376:cb4d9db17537 299 * @brief Set Wakeup from Stop mode interrupt flag selection
mbed_official 376:cb4d9db17537 300 * @param huart: uart handle,
mbed_official 376:cb4d9db17537 301 * @param WakeUpSelection: address match, Start Bit detection or RXNE bit status.
mbed_official 376:cb4d9db17537 302 * This parameter can be one of the following values:
mbed_official 376:cb4d9db17537 303 * @arg UART_WAKEUP_ON_ADDRESS
mbed_official 376:cb4d9db17537 304 * @arg UART_WAKEUP_ON_STARTBIT
mbed_official 376:cb4d9db17537 305 * @arg UART_WAKEUP_ON_READDATA_NONEMPTY
mbed_official 376:cb4d9db17537 306 * @retval HAL status
mbed_official 376:cb4d9db17537 307 */
mbed_official 376:cb4d9db17537 308 HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
mbed_official 376:cb4d9db17537 309 {
mbed_official 489:119543c9f674 310
mbed_official 489:119543c9f674 311 /* check the wake-up from stop mode UART instance */
mbed_official 489:119543c9f674 312 assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance));
mbed_official 376:cb4d9db17537 313 /* Check the wake-up selection parameter */
mbed_official 376:cb4d9db17537 314 assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent));
mbed_official 376:cb4d9db17537 315
mbed_official 376:cb4d9db17537 316 /* Process Locked */
mbed_official 376:cb4d9db17537 317 __HAL_LOCK(huart);
mbed_official 376:cb4d9db17537 318
mbed_official 376:cb4d9db17537 319 huart->State = HAL_UART_STATE_BUSY;
mbed_official 376:cb4d9db17537 320
mbed_official 376:cb4d9db17537 321 /* Disable the Peripheral */
mbed_official 376:cb4d9db17537 322 __HAL_UART_DISABLE(huart);
mbed_official 376:cb4d9db17537 323
mbed_official 376:cb4d9db17537 324 /* Set the wake-up selection scheme */
mbed_official 376:cb4d9db17537 325 MODIFY_REG(huart->Instance->CR3, USART_CR3_WUS, WakeUpSelection.WakeUpEvent);
mbed_official 376:cb4d9db17537 326
mbed_official 376:cb4d9db17537 327 if(WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS)
mbed_official 376:cb4d9db17537 328 {
mbed_official 376:cb4d9db17537 329 UART_Wakeup_AddressConfig(huart, WakeUpSelection);
mbed_official 376:cb4d9db17537 330 }
mbed_official 376:cb4d9db17537 331
mbed_official 376:cb4d9db17537 332 /* Enable the Peripheral */
mbed_official 376:cb4d9db17537 333 __HAL_UART_ENABLE(huart);
mbed_official 376:cb4d9db17537 334
mbed_official 376:cb4d9db17537 335 /* Wait until REACK flag is set before moving huart->State to Ready */
mbed_official 376:cb4d9db17537 336 if(UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, UART_REACK_TIMEOUT) != HAL_OK)
mbed_official 376:cb4d9db17537 337 {
mbed_official 376:cb4d9db17537 338 return HAL_TIMEOUT;
mbed_official 376:cb4d9db17537 339 }
mbed_official 376:cb4d9db17537 340
mbed_official 376:cb4d9db17537 341 /* Process Unlocked */
mbed_official 376:cb4d9db17537 342 __HAL_UNLOCK(huart);
mbed_official 376:cb4d9db17537 343
mbed_official 376:cb4d9db17537 344 /* Initialize the UART state*/
mbed_official 376:cb4d9db17537 345 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 376:cb4d9db17537 346 huart->State= HAL_UART_STATE_READY;
mbed_official 376:cb4d9db17537 347
mbed_official 376:cb4d9db17537 348 return HAL_OK;
mbed_official 376:cb4d9db17537 349 }
mbed_official 376:cb4d9db17537 350 /**
mbed_official 376:cb4d9db17537 351 * @brief By default in multiprocessor mode, when the wake up method is set
mbed_official 376:cb4d9db17537 352 * to address mark, the UART handles only 4-bit long addresses detection.
mbed_official 376:cb4d9db17537 353 * This API allows to enable longer addresses detection (6-, 7- or 8-bit
mbed_official 376:cb4d9db17537 354 * long):
mbed_official 376:cb4d9db17537 355 * - 6-bit address detection in 7-bit data mode
mbed_official 376:cb4d9db17537 356 * - 7-bit address detection in 8-bit data mode
mbed_official 376:cb4d9db17537 357 * - 8-bit address detection in 9-bit data mode
mbed_official 376:cb4d9db17537 358 * @param huart: UART handle
mbed_official 376:cb4d9db17537 359 * @param AddressLength: this parameter can be one of the following values:
mbed_official 376:cb4d9db17537 360 * @arg UART_ADDRESS_DETECT_4B: 4-bit long address
mbed_official 376:cb4d9db17537 361 * @arg UART_ADDRESS_DETECT_7B: 6-, 7- or 8-bit long address
mbed_official 376:cb4d9db17537 362 * @retval HAL status
mbed_official 376:cb4d9db17537 363 */
mbed_official 376:cb4d9db17537 364 HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength)
mbed_official 376:cb4d9db17537 365 {
mbed_official 376:cb4d9db17537 366 /* Check the UART handle allocation */
mbed_official 489:119543c9f674 367 if(huart == NULL)
mbed_official 376:cb4d9db17537 368 {
mbed_official 376:cb4d9db17537 369 return HAL_ERROR;
mbed_official 376:cb4d9db17537 370 }
mbed_official 376:cb4d9db17537 371
mbed_official 376:cb4d9db17537 372 /* Check the address length parameter */
mbed_official 376:cb4d9db17537 373 assert_param(IS_UART_ADDRESSLENGTH_DETECT(AddressLength));
mbed_official 376:cb4d9db17537 374
mbed_official 376:cb4d9db17537 375 huart->State = HAL_UART_STATE_BUSY;
mbed_official 376:cb4d9db17537 376
mbed_official 376:cb4d9db17537 377 /* Disable the Peripheral */
mbed_official 376:cb4d9db17537 378 __HAL_UART_DISABLE(huart);
mbed_official 376:cb4d9db17537 379
mbed_official 376:cb4d9db17537 380 /* Set the address length */
mbed_official 376:cb4d9db17537 381 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, AddressLength);
mbed_official 376:cb4d9db17537 382
mbed_official 376:cb4d9db17537 383 /* Enable the Peripheral */
mbed_official 376:cb4d9db17537 384 __HAL_UART_ENABLE(huart);
mbed_official 376:cb4d9db17537 385
mbed_official 376:cb4d9db17537 386 /* TEACK and/or REACK to check before moving huart->State to Ready */
mbed_official 376:cb4d9db17537 387 return (UART_CheckIdleState(huart));
mbed_official 376:cb4d9db17537 388 }
mbed_official 376:cb4d9db17537 389
mbed_official 376:cb4d9db17537 390 /**
mbed_official 376:cb4d9db17537 391 * @}
mbed_official 376:cb4d9db17537 392 */
mbed_official 376:cb4d9db17537 393
mbed_official 376:cb4d9db17537 394 /**
mbed_official 376:cb4d9db17537 395 * @brief Initializes the UART wake-up from stop mode parameters when triggered by address detection.
mbed_official 376:cb4d9db17537 396 * @param huart: uart handle
mbed_official 376:cb4d9db17537 397 * @param WakeUpSelection: UART wake up from stop mode parameters
mbed_official 376:cb4d9db17537 398 * @retval HAL status
mbed_official 376:cb4d9db17537 399 */
mbed_official 376:cb4d9db17537 400 static void UART_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
mbed_official 376:cb4d9db17537 401 {
mbed_official 376:cb4d9db17537 402 assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength));
mbed_official 376:cb4d9db17537 403 if(WakeUpSelection.AddressLength == UART_ADDRESS_DETECT_4B)
mbed_official 376:cb4d9db17537 404 {
mbed_official 376:cb4d9db17537 405 assert_param(IS_UART_4B_ADDRESS(WakeUpSelection.Address));
mbed_official 376:cb4d9db17537 406 }
mbed_official 376:cb4d9db17537 407 else
mbed_official 376:cb4d9db17537 408 {
mbed_official 376:cb4d9db17537 409 assert_param(IS_UART_7B_ADDRESS(WakeUpSelection.Address));
mbed_official 376:cb4d9db17537 410 }
mbed_official 376:cb4d9db17537 411
mbed_official 376:cb4d9db17537 412 /* Set the USART address length */
mbed_official 376:cb4d9db17537 413 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength);
mbed_official 376:cb4d9db17537 414
mbed_official 376:cb4d9db17537 415 /* Set the USART address node */
mbed_official 376:cb4d9db17537 416 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS));
mbed_official 376:cb4d9db17537 417 }
mbed_official 376:cb4d9db17537 418
mbed_official 376:cb4d9db17537 419 /**
mbed_official 489:119543c9f674 420 * @brief UART wakeup from Stop mode callback
mbed_official 489:119543c9f674 421 * @param huart: uart handle
mbed_official 489:119543c9f674 422 * @retval None
mbed_official 489:119543c9f674 423 */
mbed_official 489:119543c9f674 424 __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
mbed_official 489:119543c9f674 425 {
mbed_official 489:119543c9f674 426 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 489:119543c9f674 427 the HAL_UART_WakeupCallback can be implemented in the user file
mbed_official 489:119543c9f674 428 */
mbed_official 489:119543c9f674 429 }
mbed_official 489:119543c9f674 430
mbed_official 489:119543c9f674 431 /**
mbed_official 376:cb4d9db17537 432 * @}
mbed_official 376:cb4d9db17537 433 */
mbed_official 376:cb4d9db17537 434
mbed_official 376:cb4d9db17537 435 #endif /* HAL_UART_MODULE_ENABLED */
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 /**
mbed_official 376:cb4d9db17537 441 * @}
mbed_official 376:cb4d9db17537 442 */
mbed_official 376:cb4d9db17537 443
mbed_official 376:cb4d9db17537 444 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
mbed_official 489:119543c9f674 445