mbed library sources. Supersedes mbed-src.

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

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

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 * @brief Extended UART HAL module driver.
Anna Bridge 186:707f6e361f3e 6 * This file provides firmware functions to manage the following extended
Anna Bridge 186:707f6e361f3e 7 * functionalities of the Universal Asynchronous Receiver Transmitter Peripheral (UART).
Anna Bridge 186:707f6e361f3e 8 * + Initialization and de-initialization functions
Anna Bridge 186:707f6e361f3e 9 * + Peripheral Control functions
Anna Bridge 186:707f6e361f3e 10 *
Anna Bridge 186:707f6e361f3e 11 *
<> 144:ef7eb2e8f9f7 12 @verbatim
<> 144:ef7eb2e8f9f7 13 ==============================================================================
<> 144:ef7eb2e8f9f7 14 ##### UART peripheral extended features #####
<> 144:ef7eb2e8f9f7 15 ==============================================================================
Anna Bridge 186:707f6e361f3e 16
Anna Bridge 186:707f6e361f3e 17 (#) Declare a UART_HandleTypeDef handle structure.
Anna Bridge 186:707f6e361f3e 18
Anna Bridge 186:707f6e361f3e 19 (#) For the UART RS485 Driver Enable mode, initialize the UART registers
Anna Bridge 186:707f6e361f3e 20 by calling the HAL_RS485Ex_Init() API.
Anna Bridge 186:707f6e361f3e 21
Anna Bridge 186:707f6e361f3e 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 *
Anna Bridge 186:707f6e361f3e 51 ******************************************************************************
Anna Bridge 186:707f6e361f3e 52 */
<> 144:ef7eb2e8f9f7 53
<> 144:ef7eb2e8f9f7 54 /* Includes ------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 55 #include "stm32l0xx_hal.h"
<> 144:ef7eb2e8f9f7 56
<> 144:ef7eb2e8f9f7 57 /** @addtogroup STM32L0xx_HAL_Driver
<> 144:ef7eb2e8f9f7 58 * @{
<> 144:ef7eb2e8f9f7 59 */
<> 144:ef7eb2e8f9f7 60
Anna Bridge 186:707f6e361f3e 61 /** @defgroup UARTEx UARTEx
Anna Bridge 186:707f6e361f3e 62 * @brief UART Extended HAL module driver
<> 144:ef7eb2e8f9f7 63 * @{
<> 144:ef7eb2e8f9f7 64 */
<> 144:ef7eb2e8f9f7 65
Anna Bridge 186:707f6e361f3e 66 #ifdef HAL_UART_MODULE_ENABLED
Anna Bridge 186:707f6e361f3e 67
<> 144:ef7eb2e8f9f7 68 /* Private typedef -----------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 69 /* Private define ------------------------------------------------------------*/
Anna Bridge 186:707f6e361f3e 70 /* Private macros ------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 71 /* Private variables ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 72 /* Private function prototypes -----------------------------------------------*/
Anna Bridge 186:707f6e361f3e 73 /** @defgroup UARTEx_Private_Functions UARTEx Private Functions
Anna Bridge 186:707f6e361f3e 74 * @{
Anna Bridge 186:707f6e361f3e 75 */
Anna Bridge 186:707f6e361f3e 76 static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
<> 144:ef7eb2e8f9f7 77 /**
<> 144:ef7eb2e8f9f7 78 * @}
<> 144:ef7eb2e8f9f7 79 */
<> 144:ef7eb2e8f9f7 80
Anna Bridge 186:707f6e361f3e 81 /* Exported functions --------------------------------------------------------*/
Anna Bridge 186:707f6e361f3e 82
Anna Bridge 186:707f6e361f3e 83 /** @defgroup UARTEx_Exported_Functions UARTEx Exported Functions
<> 144:ef7eb2e8f9f7 84 * @{
<> 144:ef7eb2e8f9f7 85 */
<> 144:ef7eb2e8f9f7 86
Anna Bridge 186:707f6e361f3e 87 /** @defgroup UARTEx_Exported_Functions_Group1 Initialization and de-initialization functions
<> 144:ef7eb2e8f9f7 88 * @brief Extended Initialization and Configuration Functions
<> 144:ef7eb2e8f9f7 89 *
Anna Bridge 186:707f6e361f3e 90 @verbatim
<> 144:ef7eb2e8f9f7 91 ===============================================================================
<> 144:ef7eb2e8f9f7 92 ##### Initialization and Configuration functions #####
Anna Bridge 186:707f6e361f3e 93 ===============================================================================
<> 144:ef7eb2e8f9f7 94 [..]
Anna Bridge 186:707f6e361f3e 95 This subsection provides a set of functions allowing to initialize the USARTx or the UARTy
Anna Bridge 186:707f6e361f3e 96 in asynchronous mode.
Anna Bridge 186:707f6e361f3e 97 (+) For the asynchronous mode the parameters below can be configured:
Anna Bridge 186:707f6e361f3e 98 (++) Baud Rate
Anna Bridge 186:707f6e361f3e 99 (++) Word Length
Anna Bridge 186:707f6e361f3e 100 (++) Stop Bit
Anna Bridge 186:707f6e361f3e 101 (++) Parity: If the parity is enabled, then the MSB bit of the data written
Anna Bridge 186:707f6e361f3e 102 in the data register is transmitted but is changed by the parity bit.
Anna Bridge 186:707f6e361f3e 103 (++) Hardware flow control
Anna Bridge 186:707f6e361f3e 104 (++) Receiver/transmitter modes
Anna Bridge 186:707f6e361f3e 105 (++) Over Sampling Method
Anna Bridge 186:707f6e361f3e 106 (++) One-Bit Sampling Method
Anna Bridge 186:707f6e361f3e 107 (+) For the asynchronous mode, the following advanced features can be configured as well:
Anna Bridge 186:707f6e361f3e 108 (++) TX and/or RX pin level inversion
Anna Bridge 186:707f6e361f3e 109 (++) data logical level inversion
Anna Bridge 186:707f6e361f3e 110 (++) RX and TX pins swap
Anna Bridge 186:707f6e361f3e 111 (++) RX overrun detection disabling
Anna Bridge 186:707f6e361f3e 112 (++) DMA disabling on RX error
Anna Bridge 186:707f6e361f3e 113 (++) MSB first on communication line
Anna Bridge 186:707f6e361f3e 114 (++) auto Baud rate detection
Anna Bridge 186:707f6e361f3e 115 [..]
Anna Bridge 186:707f6e361f3e 116 The HAL_RS485Ex_Init() API follows the UART RS485 mode configuration
Anna Bridge 186:707f6e361f3e 117 procedures (details for the procedures are available in reference manual).
<> 144:ef7eb2e8f9f7 118
<> 144:ef7eb2e8f9f7 119 @endverbatim
Anna Bridge 186:707f6e361f3e 120
Anna Bridge 186:707f6e361f3e 121 Depending on the frame length defined by the M1 and M0 bits (7-bit,
Anna Bridge 186:707f6e361f3e 122 8-bit or 9-bit), the possible UART formats are listed in the
Anna Bridge 186:707f6e361f3e 123 following table.
Anna Bridge 186:707f6e361f3e 124
Anna Bridge 186:707f6e361f3e 125 Table 1. UART frame format.
Anna Bridge 186:707f6e361f3e 126 +-----------------------------------------------------------------------+
Anna Bridge 186:707f6e361f3e 127 | M1 bit | M0 bit | PCE bit | UART frame |
Anna Bridge 186:707f6e361f3e 128 |---------|---------|-----------|---------------------------------------|
Anna Bridge 186:707f6e361f3e 129 | 0 | 0 | 0 | | SB | 8 bit data | STB | |
Anna Bridge 186:707f6e361f3e 130 |---------|---------|-----------|---------------------------------------|
Anna Bridge 186:707f6e361f3e 131 | 0 | 0 | 1 | | SB | 7 bit data | PB | STB | |
Anna Bridge 186:707f6e361f3e 132 |---------|---------|-----------|---------------------------------------|
Anna Bridge 186:707f6e361f3e 133 | 0 | 1 | 0 | | SB | 9 bit data | STB | |
Anna Bridge 186:707f6e361f3e 134 |---------|---------|-----------|---------------------------------------|
Anna Bridge 186:707f6e361f3e 135 | 0 | 1 | 1 | | SB | 8 bit data | PB | STB | |
Anna Bridge 186:707f6e361f3e 136 |---------|---------|-----------|---------------------------------------|
Anna Bridge 186:707f6e361f3e 137 | 1 | 0 | 0 | | SB | 7 bit data | STB | |
Anna Bridge 186:707f6e361f3e 138 |---------|---------|-----------|---------------------------------------|
Anna Bridge 186:707f6e361f3e 139 | 1 | 0 | 1 | | SB | 6 bit data | PB | STB | |
Anna Bridge 186:707f6e361f3e 140 +-----------------------------------------------------------------------+
Anna Bridge 186:707f6e361f3e 141
<> 144:ef7eb2e8f9f7 142 * @{
<> 144:ef7eb2e8f9f7 143 */
<> 144:ef7eb2e8f9f7 144
<> 144:ef7eb2e8f9f7 145 /**
Anna Bridge 186:707f6e361f3e 146 * @brief Initialize the RS485 Driver enable feature according to the specified
Anna Bridge 186:707f6e361f3e 147 * parameters in the UART_InitTypeDef and creates the associated handle.
Anna Bridge 186:707f6e361f3e 148 * @param huart: UART handle.
Anna Bridge 186:707f6e361f3e 149 * @param Polarity: select the driver enable polarity.
<> 144:ef7eb2e8f9f7 150 * This parameter can be one of the following values:
Anna Bridge 186:707f6e361f3e 151 * @arg @ref UART_DE_POLARITY_HIGH DE signal is active high
Anna Bridge 186:707f6e361f3e 152 * @arg @ref UART_DE_POLARITY_LOW DE signal is active low
Anna Bridge 186:707f6e361f3e 153 * @param AssertionTime: Driver Enable assertion time:
<> 144:ef7eb2e8f9f7 154 * 5-bit value defining the time between the activation of the DE (Driver Enable)
<> 144:ef7eb2e8f9f7 155 * signal and the beginning of the start bit. It is expressed in sample time
Anna Bridge 186:707f6e361f3e 156 * units (1/8 or 1/16 bit time, depending on the oversampling rate)
Anna Bridge 186:707f6e361f3e 157 * @param DeassertionTime: Driver Enable deassertion time:
<> 144:ef7eb2e8f9f7 158 * 5-bit value defining the time between the end of the last stop bit, in a
<> 144:ef7eb2e8f9f7 159 * transmitted message, and the de-activation of the DE (Driver Enable) signal.
<> 144:ef7eb2e8f9f7 160 * It is expressed in sample time units (1/8 or 1/16 bit time, depending on the
<> 144:ef7eb2e8f9f7 161 * oversampling rate).
<> 144:ef7eb2e8f9f7 162 * @retval HAL status
<> 144:ef7eb2e8f9f7 163 */
<> 144:ef7eb2e8f9f7 164 HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime)
<> 144:ef7eb2e8f9f7 165 {
<> 151:5eaa88a5bcc7 166 uint32_t temp = 0x0U;
Anna Bridge 186:707f6e361f3e 167
<> 144:ef7eb2e8f9f7 168 /* Check the UART handle allocation */
<> 144:ef7eb2e8f9f7 169 if(huart == NULL)
<> 144:ef7eb2e8f9f7 170 {
<> 144:ef7eb2e8f9f7 171 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 172 }
<> 144:ef7eb2e8f9f7 173
<> 144:ef7eb2e8f9f7 174 /* Check the Driver Enable polarity */
<> 144:ef7eb2e8f9f7 175 assert_param(IS_UART_DE_POLARITY(Polarity));
Anna Bridge 186:707f6e361f3e 176
<> 144:ef7eb2e8f9f7 177 /* Check the Driver Enable assertion time */
<> 144:ef7eb2e8f9f7 178 assert_param(IS_UART_ASSERTIONTIME(AssertionTime));
Anna Bridge 186:707f6e361f3e 179
<> 144:ef7eb2e8f9f7 180 /* Check the Driver Enable deassertion time */
<> 144:ef7eb2e8f9f7 181 assert_param(IS_UART_DEASSERTIONTIME(DeassertionTime));
Anna Bridge 186:707f6e361f3e 182
<> 151:5eaa88a5bcc7 183 if(huart->gState == HAL_UART_STATE_RESET)
Anna Bridge 186:707f6e361f3e 184 {
Anna Bridge 186:707f6e361f3e 185 /* Allocate lock resource and initialize it */
Anna Bridge 186:707f6e361f3e 186 huart->Lock = HAL_UNLOCKED;
Anna Bridge 186:707f6e361f3e 187
<> 144:ef7eb2e8f9f7 188 /* Init the low level hardware : GPIO, CLOCK, CORTEX */
<> 144:ef7eb2e8f9f7 189 HAL_UART_MspInit(huart);
<> 144:ef7eb2e8f9f7 190 }
<> 144:ef7eb2e8f9f7 191
<> 151:5eaa88a5bcc7 192 huart->gState = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 193
<> 144:ef7eb2e8f9f7 194 /* Disable the Peripheral */
<> 144:ef7eb2e8f9f7 195 __HAL_UART_DISABLE(huart);
Anna Bridge 186:707f6e361f3e 196
<> 144:ef7eb2e8f9f7 197 /* Set the UART Communication parameters */
<> 144:ef7eb2e8f9f7 198 if(huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
<> 144:ef7eb2e8f9f7 199 {
<> 144:ef7eb2e8f9f7 200 UART_AdvFeatureConfig(huart);
<> 144:ef7eb2e8f9f7 201 }
Anna Bridge 186:707f6e361f3e 202
Anna Bridge 186:707f6e361f3e 203 if (UART_SetConfig(huart) == HAL_ERROR)
Anna Bridge 186:707f6e361f3e 204 {
Anna Bridge 186:707f6e361f3e 205 return HAL_ERROR;
Anna Bridge 186:707f6e361f3e 206 }
Anna Bridge 186:707f6e361f3e 207
<> 144:ef7eb2e8f9f7 208 /* Enable the Driver Enable mode by setting the DEM bit in the CR3 register */
Anna Bridge 186:707f6e361f3e 209 SET_BIT(huart->Instance->CR3, USART_CR3_DEM);
Anna Bridge 186:707f6e361f3e 210
<> 144:ef7eb2e8f9f7 211 /* Set the Driver Enable polarity */
<> 144:ef7eb2e8f9f7 212 MODIFY_REG(huart->Instance->CR3, USART_CR3_DEP, Polarity);
Anna Bridge 186:707f6e361f3e 213
<> 144:ef7eb2e8f9f7 214 /* Set the Driver Enable assertion and deassertion times */
<> 144:ef7eb2e8f9f7 215 temp = (AssertionTime << UART_CR1_DEAT_ADDRESS_LSB_POS);
<> 144:ef7eb2e8f9f7 216 temp |= (DeassertionTime << UART_CR1_DEDT_ADDRESS_LSB_POS);
<> 144:ef7eb2e8f9f7 217 MODIFY_REG(huart->Instance->CR1, (USART_CR1_DEDT|USART_CR1_DEAT), temp);
Anna Bridge 186:707f6e361f3e 218
<> 144:ef7eb2e8f9f7 219 /* Enable the Peripheral */
<> 144:ef7eb2e8f9f7 220 __HAL_UART_ENABLE(huart);
Anna Bridge 186:707f6e361f3e 221
Anna Bridge 186:707f6e361f3e 222 /* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
<> 144:ef7eb2e8f9f7 223 return (UART_CheckIdleState(huart));
<> 144:ef7eb2e8f9f7 224 }
<> 144:ef7eb2e8f9f7 225
<> 144:ef7eb2e8f9f7 226
<> 144:ef7eb2e8f9f7 227 /**
<> 144:ef7eb2e8f9f7 228 * @}
<> 144:ef7eb2e8f9f7 229 */
Anna Bridge 186:707f6e361f3e 230
Anna Bridge 186:707f6e361f3e 231 /** @defgroup UARTEx_Exported_Functions_Group3 Peripheral Control functions
Anna Bridge 186:707f6e361f3e 232 * @brief Extended Peripheral Control functions
<> 144:ef7eb2e8f9f7 233 *
Anna Bridge 186:707f6e361f3e 234 @verbatim
Anna Bridge 186:707f6e361f3e 235 ===============================================================================
Anna Bridge 186:707f6e361f3e 236 ##### Peripheral Control functions #####
<> 144:ef7eb2e8f9f7 237 ===============================================================================
Anna Bridge 186:707f6e361f3e 238 [..] This section provides the following functions:
Anna Bridge 186:707f6e361f3e 239 (+) HAL_UARTEx_EnableClockStopMode() API enables the UART clock (HSI or LSE only) during stop mode
Anna Bridge 186:707f6e361f3e 240 (+) HAL_UARTEx_DisableClockStopMode() API disables the above functionality
<> 144:ef7eb2e8f9f7 241 (+) HAL_MultiProcessorEx_AddressLength_Set() API optionally sets the UART node address
<> 144:ef7eb2e8f9f7 242 detection length to more than 4 bits for multiprocessor address mark wake up.
Anna Bridge 186:707f6e361f3e 243 (+) HAL_UARTEx_StopModeWakeUpSourceConfig() API defines the wake-up from stop mode
Anna Bridge 186:707f6e361f3e 244 trigger: address match, Start Bit detection or RXNE bit status.
Anna Bridge 186:707f6e361f3e 245 (+) HAL_UARTEx_EnableStopMode() API enables the UART to wake up the MCU from stop mode
<> 144:ef7eb2e8f9f7 246 (+) HAL_UARTEx_DisableStopMode() API disables the above functionality
<> 144:ef7eb2e8f9f7 247 (+) HAL_UARTEx_EnableClockStopMode() API enables the UART HSI clock during stop mode
<> 144:ef7eb2e8f9f7 248 (+) HAL_UARTEx_DisableClockStopMode() API disables the above functionality
Anna Bridge 186:707f6e361f3e 249 (+) HAL_UARTEx_WakeupCallback() called upon UART wakeup interrupt
Anna Bridge 186:707f6e361f3e 250
<> 144:ef7eb2e8f9f7 251
<> 144:ef7eb2e8f9f7 252 @endverbatim
<> 144:ef7eb2e8f9f7 253 * @{
<> 144:ef7eb2e8f9f7 254 */
Anna Bridge 186:707f6e361f3e 255
Anna Bridge 186:707f6e361f3e 256
Anna Bridge 186:707f6e361f3e 257
Anna Bridge 186:707f6e361f3e 258
Anna Bridge 186:707f6e361f3e 259 /**
Anna Bridge 186:707f6e361f3e 260 * @brief By default in multiprocessor mode, when the wake up method is set
Anna Bridge 186:707f6e361f3e 261 * to address mark, the UART handles only 4-bit long addresses detection;
Anna Bridge 186:707f6e361f3e 262 * this API allows to enable longer addresses detection (6-, 7- or 8-bit
Anna Bridge 186:707f6e361f3e 263 * long).
Anna Bridge 186:707f6e361f3e 264 * @note Addresses detection lengths are: 6-bit address detection in 7-bit data mode,
Anna Bridge 186:707f6e361f3e 265 * 7-bit address detection in 8-bit data mode, 8-bit address detection in 9-bit data mode.
Anna Bridge 186:707f6e361f3e 266 * @param huart: UART handle.
Anna Bridge 186:707f6e361f3e 267 * @param AddressLength: this parameter can be one of the following values:
Anna Bridge 186:707f6e361f3e 268 * @arg @ref UART_ADDRESS_DETECT_4B 4-bit long address
Anna Bridge 186:707f6e361f3e 269 * @arg @ref UART_ADDRESS_DETECT_7B 6-, 7- or 8-bit long address
Anna Bridge 186:707f6e361f3e 270 * @retval HAL status
Anna Bridge 186:707f6e361f3e 271 */
Anna Bridge 186:707f6e361f3e 272 HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength)
Anna Bridge 186:707f6e361f3e 273 {
Anna Bridge 186:707f6e361f3e 274 /* Check the UART handle allocation */
Anna Bridge 186:707f6e361f3e 275 if(huart == NULL)
Anna Bridge 186:707f6e361f3e 276 {
Anna Bridge 186:707f6e361f3e 277 return HAL_ERROR;
Anna Bridge 186:707f6e361f3e 278 }
Anna Bridge 186:707f6e361f3e 279
Anna Bridge 186:707f6e361f3e 280 /* Check the address length parameter */
Anna Bridge 186:707f6e361f3e 281 assert_param(IS_UART_ADDRESSLENGTH_DETECT(AddressLength));
Anna Bridge 186:707f6e361f3e 282
Anna Bridge 186:707f6e361f3e 283 huart->gState = HAL_UART_STATE_BUSY;
Anna Bridge 186:707f6e361f3e 284
Anna Bridge 186:707f6e361f3e 285 /* Disable the Peripheral */
Anna Bridge 186:707f6e361f3e 286 __HAL_UART_DISABLE(huart);
Anna Bridge 186:707f6e361f3e 287
Anna Bridge 186:707f6e361f3e 288 /* Set the address length */
Anna Bridge 186:707f6e361f3e 289 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, AddressLength);
Anna Bridge 186:707f6e361f3e 290
Anna Bridge 186:707f6e361f3e 291 /* Enable the Peripheral */
Anna Bridge 186:707f6e361f3e 292 __HAL_UART_ENABLE(huart);
Anna Bridge 186:707f6e361f3e 293
Anna Bridge 186:707f6e361f3e 294 /* TEACK and/or REACK to check before moving huart->gState and/or huart->RxState to Ready */
Anna Bridge 186:707f6e361f3e 295 return (UART_CheckIdleState(huart));
Anna Bridge 186:707f6e361f3e 296 }
Anna Bridge 186:707f6e361f3e 297
Anna Bridge 186:707f6e361f3e 298
<> 144:ef7eb2e8f9f7 299 /**
Anna Bridge 186:707f6e361f3e 300 * @brief Set Wakeup from Stop mode interrupt flag selection.
Anna Bridge 186:707f6e361f3e 301 * @param huart: UART handle.
Anna Bridge 186:707f6e361f3e 302 * @param WakeUpSelection: address match, Start Bit detection or RXNE bit status.
Anna Bridge 186:707f6e361f3e 303 * This parameter can be one of the following values:
Anna Bridge 186:707f6e361f3e 304 * @arg @ref UART_WAKEUP_ON_ADDRESS
Anna Bridge 186:707f6e361f3e 305 * @arg @ref UART_WAKEUP_ON_STARTBIT
Anna Bridge 186:707f6e361f3e 306 * @arg @ref UART_WAKEUP_ON_READDATA_NONEMPTY
Anna Bridge 186:707f6e361f3e 307 * @retval HAL status
Anna Bridge 186:707f6e361f3e 308 */
Anna Bridge 186:707f6e361f3e 309 HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
Anna Bridge 186:707f6e361f3e 310 {
Anna Bridge 186:707f6e361f3e 311 HAL_StatusTypeDef status = HAL_OK;
Anna Bridge 186:707f6e361f3e 312 uint32_t tickstart = 0;
Anna Bridge 186:707f6e361f3e 313
Anna Bridge 186:707f6e361f3e 314 /* check the wake-up from stop mode UART instance */
Anna Bridge 186:707f6e361f3e 315 assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance));
Anna Bridge 186:707f6e361f3e 316 /* check the wake-up selection parameter */
Anna Bridge 186:707f6e361f3e 317 assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent));
Anna Bridge 186:707f6e361f3e 318
Anna Bridge 186:707f6e361f3e 319 /* Process Locked */
Anna Bridge 186:707f6e361f3e 320 __HAL_LOCK(huart);
Anna Bridge 186:707f6e361f3e 321
Anna Bridge 186:707f6e361f3e 322 huart->gState = HAL_UART_STATE_BUSY;
Anna Bridge 186:707f6e361f3e 323
Anna Bridge 186:707f6e361f3e 324 /* Disable the Peripheral */
Anna Bridge 186:707f6e361f3e 325 __HAL_UART_DISABLE(huart);
Anna Bridge 186:707f6e361f3e 326
Anna Bridge 186:707f6e361f3e 327 /* Set the wake-up selection scheme */
Anna Bridge 186:707f6e361f3e 328 MODIFY_REG(huart->Instance->CR3, USART_CR3_WUS, WakeUpSelection.WakeUpEvent);
Anna Bridge 186:707f6e361f3e 329
Anna Bridge 186:707f6e361f3e 330 if (WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS)
Anna Bridge 186:707f6e361f3e 331 {
Anna Bridge 186:707f6e361f3e 332 UARTEx_Wakeup_AddressConfig(huart, WakeUpSelection);
Anna Bridge 186:707f6e361f3e 333 }
Anna Bridge 186:707f6e361f3e 334
Anna Bridge 186:707f6e361f3e 335 /* Enable the Peripheral */
Anna Bridge 186:707f6e361f3e 336 __HAL_UART_ENABLE(huart);
Anna Bridge 186:707f6e361f3e 337
Anna Bridge 186:707f6e361f3e 338 /* Init tickstart for timeout managment*/
Anna Bridge 186:707f6e361f3e 339 tickstart = HAL_GetTick();
Anna Bridge 186:707f6e361f3e 340
Anna Bridge 186:707f6e361f3e 341 /* Wait until REACK flag is set */
Anna Bridge 186:707f6e361f3e 342 if(UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
Anna Bridge 186:707f6e361f3e 343 {
Anna Bridge 186:707f6e361f3e 344 status = HAL_TIMEOUT;
Anna Bridge 186:707f6e361f3e 345 }
Anna Bridge 186:707f6e361f3e 346 else
Anna Bridge 186:707f6e361f3e 347 {
Anna Bridge 186:707f6e361f3e 348 /* Initialize the UART State */
Anna Bridge 186:707f6e361f3e 349 huart->gState = HAL_UART_STATE_READY;
Anna Bridge 186:707f6e361f3e 350 }
Anna Bridge 186:707f6e361f3e 351
Anna Bridge 186:707f6e361f3e 352 /* Process Unlocked */
Anna Bridge 186:707f6e361f3e 353 __HAL_UNLOCK(huart);
Anna Bridge 186:707f6e361f3e 354
Anna Bridge 186:707f6e361f3e 355 return status;
Anna Bridge 186:707f6e361f3e 356 }
Anna Bridge 186:707f6e361f3e 357
Anna Bridge 186:707f6e361f3e 358
Anna Bridge 186:707f6e361f3e 359 /**
Anna Bridge 186:707f6e361f3e 360 * @brief Enable UART Stop Mode.
Anna Bridge 186:707f6e361f3e 361 * @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 186:707f6e361f3e 362 * @param huart: UART handle.
<> 144:ef7eb2e8f9f7 363 * @retval HAL status
<> 144:ef7eb2e8f9f7 364 */
<> 144:ef7eb2e8f9f7 365 HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 366 {
<> 144:ef7eb2e8f9f7 367 /* Process Locked */
<> 144:ef7eb2e8f9f7 368 __HAL_LOCK(huart);
Anna Bridge 186:707f6e361f3e 369
<> 151:5eaa88a5bcc7 370 huart->gState = HAL_UART_STATE_BUSY;
Anna Bridge 186:707f6e361f3e 371
Anna Bridge 186:707f6e361f3e 372 /* Set UESM bit */
Anna Bridge 186:707f6e361f3e 373 SET_BIT(huart->Instance->CR1, USART_CR1_UESM);
Anna Bridge 186:707f6e361f3e 374
<> 151:5eaa88a5bcc7 375 huart->gState = HAL_UART_STATE_READY;
Anna Bridge 186:707f6e361f3e 376
<> 144:ef7eb2e8f9f7 377 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 378 __HAL_UNLOCK(huart);
Anna Bridge 186:707f6e361f3e 379
Anna Bridge 186:707f6e361f3e 380 return HAL_OK;
Anna Bridge 186:707f6e361f3e 381 }
Anna Bridge 186:707f6e361f3e 382
Anna Bridge 186:707f6e361f3e 383 /**
Anna Bridge 186:707f6e361f3e 384 * @brief Disable UART Stop Mode.
Anna Bridge 186:707f6e361f3e 385 * @param huart: UART handle.
Anna Bridge 186:707f6e361f3e 386 * @retval HAL status
Anna Bridge 186:707f6e361f3e 387 */
Anna Bridge 186:707f6e361f3e 388 HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart)
Anna Bridge 186:707f6e361f3e 389 {
Anna Bridge 186:707f6e361f3e 390 /* Process Locked */
Anna Bridge 186:707f6e361f3e 391 __HAL_LOCK(huart);
Anna Bridge 186:707f6e361f3e 392
Anna Bridge 186:707f6e361f3e 393 huart->gState = HAL_UART_STATE_BUSY;
Anna Bridge 186:707f6e361f3e 394
Anna Bridge 186:707f6e361f3e 395 /* Clear UESM bit */
Anna Bridge 186:707f6e361f3e 396 CLEAR_BIT(huart->Instance->CR1, USART_CR1_UESM);
Anna Bridge 186:707f6e361f3e 397
Anna Bridge 186:707f6e361f3e 398 huart->gState = HAL_UART_STATE_READY;
Anna Bridge 186:707f6e361f3e 399
Anna Bridge 186:707f6e361f3e 400 /* Process Unlocked */
Anna Bridge 186:707f6e361f3e 401 __HAL_UNLOCK(huart);
Anna Bridge 186:707f6e361f3e 402
Anna Bridge 186:707f6e361f3e 403 return HAL_OK;
<> 144:ef7eb2e8f9f7 404 }
<> 144:ef7eb2e8f9f7 405
<> 144:ef7eb2e8f9f7 406 /**
<> 144:ef7eb2e8f9f7 407 * @brief Enable UART Clock in Stop Mode
<> 144:ef7eb2e8f9f7 408 * The UART keeps the Clock ON during Stop mode
<> 144:ef7eb2e8f9f7 409 * @param huart: uart handle
<> 144:ef7eb2e8f9f7 410 * @retval HAL status
<> 144:ef7eb2e8f9f7 411 */
<> 144:ef7eb2e8f9f7 412 HAL_StatusTypeDef HAL_UARTEx_EnableClockStopMode(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 413 {
<> 144:ef7eb2e8f9f7 414 /* Process Locked */
<> 144:ef7eb2e8f9f7 415 __HAL_LOCK(huart);
<> 144:ef7eb2e8f9f7 416
<> 151:5eaa88a5bcc7 417 huart->gState = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 418
Anna Bridge 186:707f6e361f3e 419 /* Set UCESM bit */
Anna Bridge 186:707f6e361f3e 420 SET_BIT(huart->Instance->CR3, USART_CR3_UCESM);
<> 144:ef7eb2e8f9f7 421
<> 151:5eaa88a5bcc7 422 huart->gState = HAL_UART_STATE_READY;
<> 144:ef7eb2e8f9f7 423
<> 144:ef7eb2e8f9f7 424 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 425 __HAL_UNLOCK(huart);
<> 144:ef7eb2e8f9f7 426
<> 144:ef7eb2e8f9f7 427 return HAL_OK;
<> 144:ef7eb2e8f9f7 428 }
<> 144:ef7eb2e8f9f7 429
<> 144:ef7eb2e8f9f7 430 /**
<> 144:ef7eb2e8f9f7 431 * @brief Disable UART Clock in Stop Mode
<> 144:ef7eb2e8f9f7 432 * @param huart: uart handle
<> 144:ef7eb2e8f9f7 433 * @retval HAL status
<> 144:ef7eb2e8f9f7 434 */
<> 144:ef7eb2e8f9f7 435 HAL_StatusTypeDef HAL_UARTEx_DisableClockStopMode(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 436 {
<> 144:ef7eb2e8f9f7 437 /* Process Locked */
<> 144:ef7eb2e8f9f7 438 __HAL_LOCK(huart);
<> 144:ef7eb2e8f9f7 439
<> 151:5eaa88a5bcc7 440 huart->gState = HAL_UART_STATE_BUSY;
<> 144:ef7eb2e8f9f7 441
Anna Bridge 186:707f6e361f3e 442 /* Clear UCESM bit */
Anna Bridge 186:707f6e361f3e 443 CLEAR_BIT(huart->Instance->CR3, USART_CR3_UCESM);
<> 144:ef7eb2e8f9f7 444
<> 151:5eaa88a5bcc7 445 huart->gState = HAL_UART_STATE_READY;
<> 144:ef7eb2e8f9f7 446
<> 144:ef7eb2e8f9f7 447 /* Process Unlocked */
<> 144:ef7eb2e8f9f7 448 __HAL_UNLOCK(huart);
<> 144:ef7eb2e8f9f7 449
<> 144:ef7eb2e8f9f7 450 return HAL_OK;
<> 144:ef7eb2e8f9f7 451 }
<> 144:ef7eb2e8f9f7 452
<> 144:ef7eb2e8f9f7 453 /**
Anna Bridge 186:707f6e361f3e 454 * @brief UART wakeup from Stop mode callback.
Anna Bridge 186:707f6e361f3e 455 * @param huart: UART handle.
<> 144:ef7eb2e8f9f7 456 * @retval None
<> 144:ef7eb2e8f9f7 457 */
Anna Bridge 186:707f6e361f3e 458 __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
<> 144:ef7eb2e8f9f7 459 {
<> 144:ef7eb2e8f9f7 460 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 461 UNUSED(huart);
<> 144:ef7eb2e8f9f7 462
<> 144:ef7eb2e8f9f7 463 /* NOTE : This function should not be modified, when the callback is needed,
Anna Bridge 186:707f6e361f3e 464 the HAL_UARTEx_WakeupCallback can be implemented in the user file.
<> 144:ef7eb2e8f9f7 465 */
<> 144:ef7eb2e8f9f7 466 }
<> 144:ef7eb2e8f9f7 467
<> 144:ef7eb2e8f9f7 468 /**
<> 144:ef7eb2e8f9f7 469 * @}
Anna Bridge 186:707f6e361f3e 470 */
<> 144:ef7eb2e8f9f7 471
Anna Bridge 186:707f6e361f3e 472 /**
<> 144:ef7eb2e8f9f7 473 * @}
<> 144:ef7eb2e8f9f7 474 */
<> 144:ef7eb2e8f9f7 475
Anna Bridge 186:707f6e361f3e 476 /** @addtogroup UARTEx_Private_Functions
<> 144:ef7eb2e8f9f7 477 * @{
<> 144:ef7eb2e8f9f7 478 */
Anna Bridge 186:707f6e361f3e 479
<> 144:ef7eb2e8f9f7 480 /**
Anna Bridge 186:707f6e361f3e 481 * @brief Initialize the UART wake-up from stop mode parameters when triggered by address detection.
Anna Bridge 186:707f6e361f3e 482 * @param huart: UART handle.
Anna Bridge 186:707f6e361f3e 483 * @param WakeUpSelection: UART wake up from stop mode parameters.
Anna Bridge 186:707f6e361f3e 484 * @retval None
Anna Bridge 186:707f6e361f3e 485 */
Anna Bridge 186:707f6e361f3e 486 static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
<> 144:ef7eb2e8f9f7 487 {
<> 144:ef7eb2e8f9f7 488 assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength));
<> 144:ef7eb2e8f9f7 489 if(WakeUpSelection.AddressLength == UART_ADDRESS_DETECT_4B)
<> 144:ef7eb2e8f9f7 490 {
<> 144:ef7eb2e8f9f7 491 assert_param(IS_UART_4B_ADDRESS(WakeUpSelection.Address));
<> 144:ef7eb2e8f9f7 492 }
<> 144:ef7eb2e8f9f7 493 else
<> 144:ef7eb2e8f9f7 494 {
<> 144:ef7eb2e8f9f7 495 assert_param(IS_UART_7B_ADDRESS(WakeUpSelection.Address));
<> 144:ef7eb2e8f9f7 496 }
<> 144:ef7eb2e8f9f7 497
<> 144:ef7eb2e8f9f7 498 /* Set the USART address length */
<> 144:ef7eb2e8f9f7 499 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength);
<> 144:ef7eb2e8f9f7 500
<> 144:ef7eb2e8f9f7 501 /* Set the USART address node */
<> 144:ef7eb2e8f9f7 502 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS));
<> 144:ef7eb2e8f9f7 503 }
<> 144:ef7eb2e8f9f7 504
<> 144:ef7eb2e8f9f7 505 /**
<> 144:ef7eb2e8f9f7 506 * @}
<> 144:ef7eb2e8f9f7 507 */
<> 144:ef7eb2e8f9f7 508
<> 144:ef7eb2e8f9f7 509 #endif /* HAL_UART_MODULE_ENABLED */
<> 144:ef7eb2e8f9f7 510
<> 144:ef7eb2e8f9f7 511 /**
<> 144:ef7eb2e8f9f7 512 * @}
<> 144:ef7eb2e8f9f7 513 */
<> 144:ef7eb2e8f9f7 514
Anna Bridge 186:707f6e361f3e 515 /**
Anna Bridge 186:707f6e361f3e 516 * @}
Anna Bridge 186:707f6e361f3e 517 */
Anna Bridge 186:707f6e361f3e 518
<> 144:ef7eb2e8f9f7 519 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
<> 144:ef7eb2e8f9f7 520