Kevin Kadooka / mbed-dev

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Thu Feb 02 17:01:33 2017 +0000
Revision:
157:ff67d9f36b67
Parent:
149:156823d33999
This updates the lib to the mbed lib v135

Who changed what in which revision?

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