mbed library sources

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Wed Sep 30 17:00:09 2015 +0100
Revision:
636:a11c0372f0ba
Parent:
631:825f75ca301e
Synchronized with git revision d29c98dae61be0946ddf3a3c641c7726056f9452

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

Added support for SAMW25

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 340:28d1f895c6fe 1 /**
mbed_official 340:28d1f895c6fe 2 ******************************************************************************
mbed_official 340:28d1f895c6fe 3 * @file stm32f0xx_hal_uart_ex.c
mbed_official 340:28d1f895c6fe 4 * @author MCD Application Team
mbed_official 631:825f75ca301e 5 * @version V1.3.0
mbed_official 631:825f75ca301e 6 * @date 26-June-2015
mbed_official 340:28d1f895c6fe 7 * @brief Extended UART HAL module driver.
mbed_official 340:28d1f895c6fe 8 * This file provides firmware functions to manage the following extended
mbed_official 340:28d1f895c6fe 9 * functionalities of the Universal Asynchronous Receiver Transmitter Peripheral (UART).
mbed_official 340:28d1f895c6fe 10 * + Initialization and de-initialization functions
mbed_official 340:28d1f895c6fe 11 * + Peripheral Control functions
mbed_official 340:28d1f895c6fe 12 *
mbed_official 340:28d1f895c6fe 13 *
mbed_official 340:28d1f895c6fe 14 @verbatim
mbed_official 631:825f75ca301e 15 ==============================================================================
mbed_official 631:825f75ca301e 16 ##### UART peripheral extended features #####
mbed_official 631:825f75ca301e 17 ==============================================================================
mbed_official 631:825f75ca301e 18
mbed_official 340:28d1f895c6fe 19 (#) Declare a UART_HandleTypeDef handle structure.
mbed_official 340:28d1f895c6fe 20
mbed_official 631:825f75ca301e 21 (#) For the UART RS485 Driver Enable mode, initialize the UART registers
mbed_official 631:825f75ca301e 22 by calling the HAL_RS485Ex_Init() API.
mbed_official 631:825f75ca301e 23
mbed_official 340:28d1f895c6fe 24
mbed_official 340:28d1f895c6fe 25 @endverbatim
mbed_official 340:28d1f895c6fe 26 ******************************************************************************
mbed_official 340:28d1f895c6fe 27 * @attention
mbed_official 340:28d1f895c6fe 28 *
mbed_official 631:825f75ca301e 29 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
mbed_official 340:28d1f895c6fe 30 *
mbed_official 340:28d1f895c6fe 31 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 340:28d1f895c6fe 32 * are permitted provided that the following conditions are met:
mbed_official 340:28d1f895c6fe 33 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 340:28d1f895c6fe 34 * this list of conditions and the following disclaimer.
mbed_official 340:28d1f895c6fe 35 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 340:28d1f895c6fe 36 * this list of conditions and the following disclaimer in the documentation
mbed_official 340:28d1f895c6fe 37 * and/or other materials provided with the distribution.
mbed_official 340:28d1f895c6fe 38 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 340:28d1f895c6fe 39 * may be used to endorse or promote products derived from this software
mbed_official 340:28d1f895c6fe 40 * without specific prior written permission.
mbed_official 340:28d1f895c6fe 41 *
mbed_official 340:28d1f895c6fe 42 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 340:28d1f895c6fe 43 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 340:28d1f895c6fe 44 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 340:28d1f895c6fe 45 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 340:28d1f895c6fe 46 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 340:28d1f895c6fe 47 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 340:28d1f895c6fe 48 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 340:28d1f895c6fe 49 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 340:28d1f895c6fe 50 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 340:28d1f895c6fe 51 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 340:28d1f895c6fe 52 *
mbed_official 631:825f75ca301e 53 ******************************************************************************
mbed_official 340:28d1f895c6fe 54 */
mbed_official 340:28d1f895c6fe 55
mbed_official 340:28d1f895c6fe 56 /* Includes ------------------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 57 #include "stm32f0xx_hal.h"
mbed_official 340:28d1f895c6fe 58
mbed_official 340:28d1f895c6fe 59 /** @addtogroup STM32F0xx_HAL_Driver
mbed_official 340:28d1f895c6fe 60 * @{
mbed_official 340:28d1f895c6fe 61 */
mbed_official 340:28d1f895c6fe 62
mbed_official 631:825f75ca301e 63 /** @defgroup UARTEx UARTEx
mbed_official 340:28d1f895c6fe 64 * @brief UART Extended HAL module driver
mbed_official 340:28d1f895c6fe 65 * @{
mbed_official 340:28d1f895c6fe 66 */
mbed_official 340:28d1f895c6fe 67
mbed_official 340:28d1f895c6fe 68 #ifdef HAL_UART_MODULE_ENABLED
mbed_official 340:28d1f895c6fe 69
mbed_official 340:28d1f895c6fe 70 /* Private typedef -----------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 71 /* Private define ------------------------------------------------------------*/
mbed_official 631:825f75ca301e 72 /* Private macros ------------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 73 /* Private variables ---------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 74 /* Private function prototypes -----------------------------------------------*/
mbed_official 340:28d1f895c6fe 75 /** @defgroup UARTEx_Private_Functions UARTEx Private Functions
mbed_official 340:28d1f895c6fe 76 * @{
mbed_official 340:28d1f895c6fe 77 */
mbed_official 442:d2c15dda23c1 78 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 631:825f75ca301e 79 static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
mbed_official 442:d2c15dda23c1 80 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
mbed_official 340:28d1f895c6fe 81
mbed_official 340:28d1f895c6fe 82 /**
mbed_official 340:28d1f895c6fe 83 * @}
mbed_official 340:28d1f895c6fe 84 */
mbed_official 340:28d1f895c6fe 85
mbed_official 340:28d1f895c6fe 86 /* Exported functions ---------------------------------------------------------*/
mbed_official 340:28d1f895c6fe 87
mbed_official 340:28d1f895c6fe 88 /** @defgroup UARTEx_Exported_Functions UARTEx Exported Functions
mbed_official 340:28d1f895c6fe 89 * @{
mbed_official 340:28d1f895c6fe 90 */
mbed_official 340:28d1f895c6fe 91
mbed_official 631:825f75ca301e 92 /** @defgroup UARTEx_Exported_Functions_Group1 Extended Initialization and de-initialization functions
mbed_official 442:d2c15dda23c1 93 * @brief Extended Initialization and Configuration Functions
mbed_official 442:d2c15dda23c1 94 *
mbed_official 442:d2c15dda23c1 95 @verbatim
mbed_official 442:d2c15dda23c1 96 ===============================================================================
mbed_official 442:d2c15dda23c1 97 ##### Initialization and Configuration functions #####
mbed_official 442:d2c15dda23c1 98 ==============================================================================
mbed_official 442:d2c15dda23c1 99 [..]
mbed_official 442:d2c15dda23c1 100 This subsection provides a set of functions allowing to initialize the USARTx or the UARTy
mbed_official 442:d2c15dda23c1 101 in asynchronous mode.
mbed_official 631:825f75ca301e 102 (+) For the asynchronous mode the parameters below can be configured:
mbed_official 442:d2c15dda23c1 103 (++) Baud Rate
mbed_official 442:d2c15dda23c1 104 (++) Word Length (Fixed to 8-bits only for LIN mode)
mbed_official 442:d2c15dda23c1 105 (++) Stop Bit
mbed_official 442:d2c15dda23c1 106 (++) Parity: If the parity is enabled, then the MSB bit of the data written
mbed_official 442:d2c15dda23c1 107 in the data register is transmitted but is changed by the parity bit.
mbed_official 631:825f75ca301e 108 According to device capability (support or not of 7-bit word length),
mbed_official 631:825f75ca301e 109 frame length is either defined by the M bit (8-bits or 9-bits)
mbed_official 631:825f75ca301e 110 or by the M1 and M0 bits (7-bit, 8-bit or 9-bit).
mbed_official 631:825f75ca301e 111 Possible UART frame formats are as listed in the following table:
mbed_official 631:825f75ca301e 112
mbed_official 631:825f75ca301e 113 (+++) Table 1. UART frame format.
mbed_official 631:825f75ca301e 114 (+++) +-----------------------------------------------------------------------+
mbed_official 631:825f75ca301e 115 (+++) | M bit | PCE bit | UART frame |
mbed_official 631:825f75ca301e 116 (+++) |-------------------|-----------|---------------------------------------|
mbed_official 631:825f75ca301e 117 (+++) | 0 | 0 | | SB | 8-bit data | STB | |
mbed_official 631:825f75ca301e 118 (+++) |-------------------|-----------|---------------------------------------|
mbed_official 631:825f75ca301e 119 (+++) | 0 | 1 | | SB | 7-bit data | PB | STB | |
mbed_official 631:825f75ca301e 120 (+++) |-------------------|-----------|---------------------------------------|
mbed_official 631:825f75ca301e 121 (+++) | 1 | 0 | | SB | 9-bit data | STB | |
mbed_official 631:825f75ca301e 122 (+++) |-------------------|-----------|---------------------------------------|
mbed_official 631:825f75ca301e 123 (+++) | 1 | 1 | | SB | 8-bit data | PB | STB | |
mbed_official 631:825f75ca301e 124 (+++) +-----------------------------------------------------------------------+
mbed_official 631:825f75ca301e 125 (+++) | M1 bit | M0 bit | PCE bit | UART frame |
mbed_official 631:825f75ca301e 126 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 631:825f75ca301e 127 (+++) | 0 | 0 | 0 | | SB | 8 bit data | STB | |
mbed_official 631:825f75ca301e 128 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 631:825f75ca301e 129 (+++) | 0 | 0 | 1 | | SB | 7 bit data | PB | STB | |
mbed_official 631:825f75ca301e 130 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 631:825f75ca301e 131 (+++) | 0 | 1 | 0 | | SB | 9 bit data | STB | |
mbed_official 631:825f75ca301e 132 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 631:825f75ca301e 133 (+++) | 0 | 1 | 1 | | SB | 8 bit data | PB | STB | |
mbed_official 631:825f75ca301e 134 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 631:825f75ca301e 135 (+++) | 1 | 0 | 0 | | SB | 7 bit data | STB | |
mbed_official 631:825f75ca301e 136 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 631:825f75ca301e 137 (+++) | 1 | 0 | 1 | | SB | 6 bit data | PB | STB | |
mbed_official 631:825f75ca301e 138 (+++) +-----------------------------------------------------------------------+
mbed_official 442:d2c15dda23c1 139 (++) Hardware flow control
mbed_official 442:d2c15dda23c1 140 (++) Receiver/transmitter modes
mbed_official 442:d2c15dda23c1 141 (++) Over Sampling Method
mbed_official 442:d2c15dda23c1 142 (++) One-Bit Sampling Method
mbed_official 442:d2c15dda23c1 143 (+) For the asynchronous mode, the following advanced features can be configured as well:
mbed_official 442:d2c15dda23c1 144 (++) TX and/or RX pin level inversion
mbed_official 442:d2c15dda23c1 145 (++) data logical level inversion
mbed_official 442:d2c15dda23c1 146 (++) RX and TX pins swap
mbed_official 442:d2c15dda23c1 147 (++) RX overrun detection disabling
mbed_official 442:d2c15dda23c1 148 (++) DMA disabling on RX error
mbed_official 442:d2c15dda23c1 149 (++) MSB first on communication line
mbed_official 442:d2c15dda23c1 150 (++) auto Baud rate detection
mbed_official 442:d2c15dda23c1 151 [..]
mbed_official 442:d2c15dda23c1 152 The HAL_LIN_Init() and HAL_RS485Ex_Init() APIs follows respectively the LIN and
mbed_official 442:d2c15dda23c1 153 the UART RS485 mode configuration procedures (details for the procedures are
mbed_official 442:d2c15dda23c1 154 available in reference manual).
mbed_official 442:d2c15dda23c1 155
mbed_official 442:d2c15dda23c1 156 @endverbatim
mbed_official 442:d2c15dda23c1 157 * @{
mbed_official 442:d2c15dda23c1 158 */
mbed_official 442:d2c15dda23c1 159
mbed_official 442:d2c15dda23c1 160 /**
mbed_official 631:825f75ca301e 161 * @brief Initialize the RS485 Driver enable feature according to the specified
mbed_official 631:825f75ca301e 162 * parameters in the UART_InitTypeDef and creates the associated handle.
mbed_official 631:825f75ca301e 163 * @param huart: UART handle.
mbed_official 631:825f75ca301e 164 * @param Polarity: select the driver enable polarity.
mbed_official 442:d2c15dda23c1 165 * This parameter can be one of the following values:
mbed_official 442:d2c15dda23c1 166 * @arg UART_DE_POLARITY_HIGH: DE signal is active high
mbed_official 442:d2c15dda23c1 167 * @arg UART_DE_POLARITY_LOW: DE signal is active low
mbed_official 631:825f75ca301e 168 * @param AssertionTime: Driver Enable assertion time:
mbed_official 442:d2c15dda23c1 169 * 5-bit value defining the time between the activation of the DE (Driver Enable)
mbed_official 442:d2c15dda23c1 170 * signal and the beginning of the start bit. It is expressed in sample time
mbed_official 631:825f75ca301e 171 * units (1/8 or 1/16 bit time, depending on the oversampling rate)
mbed_official 631:825f75ca301e 172 * @param DeassertionTime: Driver Enable deassertion time:
mbed_official 442:d2c15dda23c1 173 * 5-bit value defining the time between the end of the last stop bit, in a
mbed_official 442:d2c15dda23c1 174 * transmitted message, and the de-activation of the DE (Driver Enable) signal.
mbed_official 442:d2c15dda23c1 175 * It is expressed in sample time units (1/8 or 1/16 bit time, depending on the
mbed_official 631:825f75ca301e 176 * oversampling rate).
mbed_official 442:d2c15dda23c1 177 * @retval HAL status
mbed_official 442:d2c15dda23c1 178 */
mbed_official 631:825f75ca301e 179 HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime)
mbed_official 442:d2c15dda23c1 180 {
mbed_official 442:d2c15dda23c1 181 uint32_t temp = 0x0;
mbed_official 631:825f75ca301e 182
mbed_official 442:d2c15dda23c1 183 /* Check the UART handle allocation */
mbed_official 442:d2c15dda23c1 184 if(huart == NULL)
mbed_official 442:d2c15dda23c1 185 {
mbed_official 442:d2c15dda23c1 186 return HAL_ERROR;
mbed_official 442:d2c15dda23c1 187 }
mbed_official 442:d2c15dda23c1 188 /* Check the Driver Enable UART instance */
mbed_official 442:d2c15dda23c1 189 assert_param(IS_UART_DRIVER_ENABLE_INSTANCE(huart->Instance));
mbed_official 631:825f75ca301e 190
mbed_official 442:d2c15dda23c1 191 /* Check the Driver Enable polarity */
mbed_official 631:825f75ca301e 192 assert_param(IS_UART_DE_POLARITY(Polarity));
mbed_official 631:825f75ca301e 193
mbed_official 442:d2c15dda23c1 194 /* Check the Driver Enable assertion time */
mbed_official 631:825f75ca301e 195 assert_param(IS_UART_ASSERTIONTIME(AssertionTime));
mbed_official 631:825f75ca301e 196
mbed_official 442:d2c15dda23c1 197 /* Check the Driver Enable deassertion time */
mbed_official 631:825f75ca301e 198 assert_param(IS_UART_DEASSERTIONTIME(DeassertionTime));
mbed_official 631:825f75ca301e 199
mbed_official 442:d2c15dda23c1 200 if(huart->State == HAL_UART_STATE_RESET)
mbed_official 631:825f75ca301e 201 {
mbed_official 631:825f75ca301e 202 /* Allocate lock resource and initialize it */
mbed_official 631:825f75ca301e 203 huart->Lock = HAL_UNLOCKED;
mbed_official 631:825f75ca301e 204
mbed_official 631:825f75ca301e 205 /* Init the low level hardware : GPIO, CLOCK, CORTEX */
mbed_official 442:d2c15dda23c1 206 HAL_UART_MspInit(huart);
mbed_official 442:d2c15dda23c1 207 }
mbed_official 631:825f75ca301e 208
mbed_official 442:d2c15dda23c1 209 huart->State = HAL_UART_STATE_BUSY;
mbed_official 631:825f75ca301e 210
mbed_official 442:d2c15dda23c1 211 /* Disable the Peripheral */
mbed_official 442:d2c15dda23c1 212 __HAL_UART_DISABLE(huart);
mbed_official 631:825f75ca301e 213
mbed_official 442:d2c15dda23c1 214 /* Set the UART Communication parameters */
mbed_official 442:d2c15dda23c1 215 if (UART_SetConfig(huart) == HAL_ERROR)
mbed_official 442:d2c15dda23c1 216 {
mbed_official 442:d2c15dda23c1 217 return HAL_ERROR;
mbed_official 631:825f75ca301e 218 }
mbed_official 631:825f75ca301e 219
mbed_official 631:825f75ca301e 220 if(huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
mbed_official 442:d2c15dda23c1 221 {
mbed_official 442:d2c15dda23c1 222 UART_AdvFeatureConfig(huart);
mbed_official 442:d2c15dda23c1 223 }
mbed_official 631:825f75ca301e 224
mbed_official 442:d2c15dda23c1 225 /* Enable the Driver Enable mode by setting the DEM bit in the CR3 register */
mbed_official 631:825f75ca301e 226 SET_BIT(huart->Instance->CR3, USART_CR3_DEM);
mbed_official 631:825f75ca301e 227
mbed_official 442:d2c15dda23c1 228 /* Set the Driver Enable polarity */
mbed_official 631:825f75ca301e 229 MODIFY_REG(huart->Instance->CR3, USART_CR3_DEP, Polarity);
mbed_official 631:825f75ca301e 230
mbed_official 442:d2c15dda23c1 231 /* Set the Driver Enable assertion and deassertion times */
mbed_official 631:825f75ca301e 232 temp = (AssertionTime << UART_CR1_DEAT_ADDRESS_LSB_POS);
mbed_official 631:825f75ca301e 233 temp |= (DeassertionTime << UART_CR1_DEDT_ADDRESS_LSB_POS);
mbed_official 442:d2c15dda23c1 234 MODIFY_REG(huart->Instance->CR1, (USART_CR1_DEDT|USART_CR1_DEAT), temp);
mbed_official 631:825f75ca301e 235
mbed_official 442:d2c15dda23c1 236 /* Enable the Peripheral */
mbed_official 442:d2c15dda23c1 237 __HAL_UART_ENABLE(huart);
mbed_official 631:825f75ca301e 238
mbed_official 442:d2c15dda23c1 239 /* TEACK and/or REACK to check before moving huart->State to Ready */
mbed_official 442:d2c15dda23c1 240 return (UART_CheckIdleState(huart));
mbed_official 442:d2c15dda23c1 241 }
mbed_official 442:d2c15dda23c1 242
mbed_official 442:d2c15dda23c1 243 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 442:d2c15dda23c1 244 /**
mbed_official 631:825f75ca301e 245 * @brief Initialize the LIN mode according to the specified
mbed_official 631:825f75ca301e 246 * parameters in the UART_InitTypeDef and creates the associated handle .
mbed_official 631:825f75ca301e 247 * @param huart: UART handle.
mbed_official 442:d2c15dda23c1 248 * @param BreakDetectLength: specifies the LIN break detection length.
mbed_official 442:d2c15dda23c1 249 * This parameter can be one of the following values:
mbed_official 442:d2c15dda23c1 250 * @arg UART_LINBREAKDETECTLENGTH_10B: 10-bit break detection
mbed_official 442:d2c15dda23c1 251 * @arg UART_LINBREAKDETECTLENGTH_11B: 11-bit break detection
mbed_official 442:d2c15dda23c1 252 * @retval HAL status
mbed_official 442:d2c15dda23c1 253 */
mbed_official 442:d2c15dda23c1 254 HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength)
mbed_official 442:d2c15dda23c1 255 {
mbed_official 442:d2c15dda23c1 256 /* Check the UART handle allocation */
mbed_official 442:d2c15dda23c1 257 if(huart == NULL)
mbed_official 442:d2c15dda23c1 258 {
mbed_official 442:d2c15dda23c1 259 return HAL_ERROR;
mbed_official 442:d2c15dda23c1 260 }
mbed_official 631:825f75ca301e 261
mbed_official 631:825f75ca301e 262 /* Check the LIN UART instance */
mbed_official 442:d2c15dda23c1 263 assert_param(IS_UART_LIN_INSTANCE(huart->Instance));
mbed_official 631:825f75ca301e 264 /* Check the Break detection length parameter */
mbed_official 442:d2c15dda23c1 265 assert_param(IS_UART_LIN_BREAK_DETECT_LENGTH(BreakDetectLength));
mbed_official 631:825f75ca301e 266
mbed_official 442:d2c15dda23c1 267 /* LIN mode limited to 16-bit oversampling only */
mbed_official 442:d2c15dda23c1 268 if(huart->Init.OverSampling == UART_OVERSAMPLING_8)
mbed_official 442:d2c15dda23c1 269 {
mbed_official 442:d2c15dda23c1 270 return HAL_ERROR;
mbed_official 442:d2c15dda23c1 271 }
mbed_official 631:825f75ca301e 272 /* LIN mode limited to 8-bit data length */
mbed_official 631:825f75ca301e 273 if(huart->Init.WordLength != UART_WORDLENGTH_8B)
mbed_official 442:d2c15dda23c1 274 {
mbed_official 442:d2c15dda23c1 275 return HAL_ERROR;
mbed_official 442:d2c15dda23c1 276 }
mbed_official 442:d2c15dda23c1 277
mbed_official 631:825f75ca301e 278 if(huart->State == HAL_UART_STATE_RESET)
mbed_official 631:825f75ca301e 279 {
mbed_official 631:825f75ca301e 280 /* Allocate lock resource and initialize it */
mbed_official 631:825f75ca301e 281 huart->Lock = HAL_UNLOCKED;
mbed_official 631:825f75ca301e 282
mbed_official 631:825f75ca301e 283 /* Init the low level hardware : GPIO, CLOCK */
mbed_official 631:825f75ca301e 284 HAL_UART_MspInit(huart);
mbed_official 631:825f75ca301e 285 }
mbed_official 631:825f75ca301e 286
mbed_official 631:825f75ca301e 287 huart->State = HAL_UART_STATE_BUSY;
mbed_official 631:825f75ca301e 288
mbed_official 442:d2c15dda23c1 289 /* Disable the Peripheral */
mbed_official 442:d2c15dda23c1 290 __HAL_UART_DISABLE(huart);
mbed_official 631:825f75ca301e 291
mbed_official 442:d2c15dda23c1 292 /* Set the UART Communication parameters */
mbed_official 442:d2c15dda23c1 293 if (UART_SetConfig(huart) == HAL_ERROR)
mbed_official 442:d2c15dda23c1 294 {
mbed_official 442:d2c15dda23c1 295 return HAL_ERROR;
mbed_official 631:825f75ca301e 296 }
mbed_official 631:825f75ca301e 297
mbed_official 442:d2c15dda23c1 298 if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
mbed_official 442:d2c15dda23c1 299 {
mbed_official 442:d2c15dda23c1 300 UART_AdvFeatureConfig(huart);
mbed_official 442:d2c15dda23c1 301 }
mbed_official 631:825f75ca301e 302
mbed_official 631:825f75ca301e 303 /* In LIN mode, the following bits must be kept cleared:
mbed_official 442:d2c15dda23c1 304 - LINEN and CLKEN bits in the USART_CR2 register,
mbed_official 442:d2c15dda23c1 305 - SCEN and IREN bits in the USART_CR3 register.*/
mbed_official 442:d2c15dda23c1 306 huart->Instance->CR2 &= ~(USART_CR2_CLKEN);
mbed_official 442:d2c15dda23c1 307 huart->Instance->CR3 &= ~(USART_CR3_HDSEL | USART_CR3_IREN | USART_CR3_SCEN);
mbed_official 631:825f75ca301e 308
mbed_official 442:d2c15dda23c1 309 /* Enable the LIN mode by setting the LINEN bit in the CR2 register */
mbed_official 442:d2c15dda23c1 310 huart->Instance->CR2 |= USART_CR2_LINEN;
mbed_official 631:825f75ca301e 311
mbed_official 442:d2c15dda23c1 312 /* Set the USART LIN Break detection length. */
mbed_official 442:d2c15dda23c1 313 MODIFY_REG(huart->Instance->CR2, USART_CR2_LBDL, BreakDetectLength);
mbed_official 631:825f75ca301e 314
mbed_official 442:d2c15dda23c1 315 /* Enable the Peripheral */
mbed_official 442:d2c15dda23c1 316 __HAL_UART_ENABLE(huart);
mbed_official 631:825f75ca301e 317
mbed_official 442:d2c15dda23c1 318 /* TEACK and/or REACK to check before moving huart->State to Ready */
mbed_official 442:d2c15dda23c1 319 return (UART_CheckIdleState(huart));
mbed_official 442:d2c15dda23c1 320 }
mbed_official 442:d2c15dda23c1 321 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
mbed_official 631:825f75ca301e 322
mbed_official 442:d2c15dda23c1 323 /**
mbed_official 442:d2c15dda23c1 324 * @}
mbed_official 442:d2c15dda23c1 325 */
mbed_official 442:d2c15dda23c1 326
mbed_official 340:28d1f895c6fe 327 /** @defgroup UARTEx_Exported_Functions_Group2 Extended IO operation function
mbed_official 442:d2c15dda23c1 328 * @brief Extended UART Interrupt handling function
mbed_official 340:28d1f895c6fe 329 *
mbed_official 442:d2c15dda23c1 330 @verbatim
mbed_official 340:28d1f895c6fe 331 ===============================================================================
mbed_official 340:28d1f895c6fe 332 ##### IO operation function #####
mbed_official 442:d2c15dda23c1 333 ===============================================================================
mbed_official 442:d2c15dda23c1 334 [..]
mbed_official 340:28d1f895c6fe 335 This subsection provides functions allowing to manage the UART interrupts
mbed_official 340:28d1f895c6fe 336 and to handle Wake up interrupt call-back.
mbed_official 340:28d1f895c6fe 337
mbed_official 340:28d1f895c6fe 338 (#) Non-Blocking mode API with Interrupt is :
mbed_official 442:d2c15dda23c1 339 (++) HAL_UART_IRQHandler()
mbed_official 340:28d1f895c6fe 340
mbed_official 340:28d1f895c6fe 341 (#) Callback provided in No_Blocking mode:
mbed_official 631:825f75ca301e 342 (++) HAL_UARTEx_WakeupCallback()
mbed_official 340:28d1f895c6fe 343
mbed_official 340:28d1f895c6fe 344 @endverbatim
mbed_official 340:28d1f895c6fe 345 * @{
mbed_official 340:28d1f895c6fe 346 */
mbed_official 340:28d1f895c6fe 347
mbed_official 442:d2c15dda23c1 348
mbed_official 340:28d1f895c6fe 349 /**
mbed_official 631:825f75ca301e 350 * @brief Handle UART interrupt request.
mbed_official 631:825f75ca301e 351 * @param huart: UART handle.
mbed_official 340:28d1f895c6fe 352 * @retval None
mbed_official 340:28d1f895c6fe 353 */
mbed_official 340:28d1f895c6fe 354 void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
mbed_official 340:28d1f895c6fe 355 {
mbed_official 340:28d1f895c6fe 356 /* UART parity error interrupt occurred -------------------------------------*/
mbed_official 340:28d1f895c6fe 357 if((__HAL_UART_GET_IT(huart, UART_IT_PE) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_PE) != RESET))
mbed_official 631:825f75ca301e 358 {
mbed_official 340:28d1f895c6fe 359 __HAL_UART_CLEAR_IT(huart, UART_CLEAR_PEF);
mbed_official 631:825f75ca301e 360
mbed_official 340:28d1f895c6fe 361 huart->ErrorCode |= HAL_UART_ERROR_PE;
mbed_official 340:28d1f895c6fe 362 /* Set the UART state ready to be able to start again the process */
mbed_official 340:28d1f895c6fe 363 huart->State = HAL_UART_STATE_READY;
mbed_official 340:28d1f895c6fe 364 }
mbed_official 631:825f75ca301e 365
mbed_official 631:825f75ca301e 366 /* UART frame error interrupt occurred --------------------------------------*/
mbed_official 340:28d1f895c6fe 367 if((__HAL_UART_GET_IT(huart, UART_IT_FE) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR) != RESET))
mbed_official 631:825f75ca301e 368 {
mbed_official 340:28d1f895c6fe 369 __HAL_UART_CLEAR_IT(huart, UART_CLEAR_FEF);
mbed_official 631:825f75ca301e 370
mbed_official 340:28d1f895c6fe 371 huart->ErrorCode |= HAL_UART_ERROR_FE;
mbed_official 340:28d1f895c6fe 372 /* Set the UART state ready to be able to start again the process */
mbed_official 340:28d1f895c6fe 373 huart->State = HAL_UART_STATE_READY;
mbed_official 340:28d1f895c6fe 374 }
mbed_official 631:825f75ca301e 375
mbed_official 631:825f75ca301e 376 /* UART noise error interrupt occurred --------------------------------------*/
mbed_official 340:28d1f895c6fe 377 if((__HAL_UART_GET_IT(huart, UART_IT_NE) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR) != RESET))
mbed_official 631:825f75ca301e 378 {
mbed_official 340:28d1f895c6fe 379 __HAL_UART_CLEAR_IT(huart, UART_CLEAR_NEF);
mbed_official 631:825f75ca301e 380
mbed_official 631:825f75ca301e 381 huart->ErrorCode |= HAL_UART_ERROR_NE;
mbed_official 340:28d1f895c6fe 382 /* Set the UART state ready to be able to start again the process */
mbed_official 340:28d1f895c6fe 383 huart->State = HAL_UART_STATE_READY;
mbed_official 340:28d1f895c6fe 384 }
mbed_official 631:825f75ca301e 385
mbed_official 631:825f75ca301e 386 /* UART Over-Run interrupt occurred -----------------------------------------*/
mbed_official 340:28d1f895c6fe 387 if((__HAL_UART_GET_IT(huart, UART_IT_ORE) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR) != RESET))
mbed_official 631:825f75ca301e 388 {
mbed_official 340:28d1f895c6fe 389 __HAL_UART_CLEAR_IT(huart, UART_CLEAR_OREF);
mbed_official 631:825f75ca301e 390
mbed_official 631:825f75ca301e 391 huart->ErrorCode |= HAL_UART_ERROR_ORE;
mbed_official 340:28d1f895c6fe 392 /* Set the UART state ready to be able to start again the process */
mbed_official 340:28d1f895c6fe 393 huart->State = HAL_UART_STATE_READY;
mbed_official 340:28d1f895c6fe 394 }
mbed_official 631:825f75ca301e 395
mbed_official 340:28d1f895c6fe 396 /* Call UART Error Call back function if need be --------------------------*/
mbed_official 340:28d1f895c6fe 397 if(huart->ErrorCode != HAL_UART_ERROR_NONE)
mbed_official 340:28d1f895c6fe 398 {
mbed_official 340:28d1f895c6fe 399 HAL_UART_ErrorCallback(huart);
mbed_official 340:28d1f895c6fe 400 }
mbed_official 631:825f75ca301e 401
mbed_official 442:d2c15dda23c1 402 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 340:28d1f895c6fe 403 /* UART wakeup from Stop mode interrupt occurred -------------------------------------*/
mbed_official 340:28d1f895c6fe 404 if((__HAL_UART_GET_IT(huart, UART_IT_WUF) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_WUF) != RESET))
mbed_official 631:825f75ca301e 405 {
mbed_official 340:28d1f895c6fe 406 __HAL_UART_CLEAR_IT(huart, UART_CLEAR_WUF);
mbed_official 340:28d1f895c6fe 407 /* Set the UART state ready to be able to start again the process */
mbed_official 340:28d1f895c6fe 408 huart->State = HAL_UART_STATE_READY;
mbed_official 631:825f75ca301e 409 HAL_UARTEx_WakeupCallback(huart);
mbed_official 340:28d1f895c6fe 410 }
mbed_official 442:d2c15dda23c1 411 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
mbed_official 631:825f75ca301e 412
mbed_official 340:28d1f895c6fe 413 /* UART in mode Receiver ---------------------------------------------------*/
mbed_official 340:28d1f895c6fe 414 if((__HAL_UART_GET_IT(huart, UART_IT_RXNE) != RESET) && (__HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE) != RESET))
mbed_official 631:825f75ca301e 415 {
mbed_official 340:28d1f895c6fe 416 UART_Receive_IT(huart);
mbed_official 340:28d1f895c6fe 417 /* Clear RXNE interrupt flag */
mbed_official 340:28d1f895c6fe 418 __HAL_UART_SEND_REQ(huart, UART_RXDATA_FLUSH_REQUEST);
mbed_official 340:28d1f895c6fe 419 }
mbed_official 631:825f75ca301e 420
mbed_official 340:28d1f895c6fe 421
mbed_official 340:28d1f895c6fe 422 /* UART in mode Transmitter ------------------------------------------------*/
mbed_official 340:28d1f895c6fe 423 if((__HAL_UART_GET_IT(huart, UART_IT_TXE) != RESET) &&(__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TXE) != RESET))
mbed_official 340:28d1f895c6fe 424 {
mbed_official 340:28d1f895c6fe 425 UART_Transmit_IT(huart);
mbed_official 631:825f75ca301e 426 }
mbed_official 631:825f75ca301e 427
mbed_official 631:825f75ca301e 428 /* UART in mode Transmitter (transmission end) -----------------------------*/
mbed_official 340:28d1f895c6fe 429 if((__HAL_UART_GET_IT(huart, UART_IT_TC) != RESET) &&(__HAL_UART_GET_IT_SOURCE(huart, UART_IT_TC) != RESET))
mbed_official 340:28d1f895c6fe 430 {
mbed_official 340:28d1f895c6fe 431 UART_EndTransmit_IT(huart);
mbed_official 631:825f75ca301e 432 }
mbed_official 631:825f75ca301e 433
mbed_official 340:28d1f895c6fe 434 }
mbed_official 340:28d1f895c6fe 435
mbed_official 442:d2c15dda23c1 436 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 340:28d1f895c6fe 437 /**
mbed_official 631:825f75ca301e 438 * @brief UART wakeup from Stop mode callback
mbed_official 631:825f75ca301e 439 * @param huart: UART handle
mbed_official 340:28d1f895c6fe 440 * @retval None
mbed_official 340:28d1f895c6fe 441 */
mbed_official 631:825f75ca301e 442 __weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
mbed_official 340:28d1f895c6fe 443 {
mbed_official 340:28d1f895c6fe 444 /* NOTE : This function should not be modified, when the callback is needed,
mbed_official 631:825f75ca301e 445 the HAL_UARTEx_WakeupCallback can be implemented in the user file
mbed_official 340:28d1f895c6fe 446 */
mbed_official 340:28d1f895c6fe 447 }
mbed_official 442:d2c15dda23c1 448 #endif /*!defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)*/
mbed_official 340:28d1f895c6fe 449
mbed_official 340:28d1f895c6fe 450 /**
mbed_official 340:28d1f895c6fe 451 * @}
mbed_official 340:28d1f895c6fe 452 */
mbed_official 340:28d1f895c6fe 453
mbed_official 340:28d1f895c6fe 454
mbed_official 340:28d1f895c6fe 455 /** @defgroup UARTEx_Exported_Functions_Group3 Extended Peripheral Control functions
mbed_official 340:28d1f895c6fe 456 * @brief Extended Peripheral Control functions
mbed_official 340:28d1f895c6fe 457 *
mbed_official 340:28d1f895c6fe 458 @verbatim
mbed_official 340:28d1f895c6fe 459 ===============================================================================
mbed_official 340:28d1f895c6fe 460 ##### Peripheral Control function #####
mbed_official 340:28d1f895c6fe 461 ===============================================================================
mbed_official 340:28d1f895c6fe 462 [..]
mbed_official 340:28d1f895c6fe 463 This subsection provides extended functions allowing to control the UART.
mbed_official 442:d2c15dda23c1 464 (+) HAL_UARTEx_StopModeWakeUpSourceConfig() API sets Wakeup from Stop mode interrupt flag selection
mbed_official 442:d2c15dda23c1 465 (+) HAL_UARTEx_EnableStopMode() API allows the UART to wake up the MCU from Stop mode as
mbed_official 340:28d1f895c6fe 466 long as UART clock is HSI or LSE
mbed_official 442:d2c15dda23c1 467 (+) HAL_UARTEx_DisableStopMode() API disables the above feature
mbed_official 631:825f75ca301e 468 (+) HAL_MultiProcessorEx_AddressLength_Set() API optionally sets the UART node address
mbed_official 631:825f75ca301e 469 detection length to more than 4 bits for multiprocessor address mark wake up.
mbed_official 442:d2c15dda23c1 470 (+) HAL_LIN_SendBreak() API transmits the break characters
mbed_official 340:28d1f895c6fe 471
mbed_official 340:28d1f895c6fe 472 @endverbatim
mbed_official 340:28d1f895c6fe 473 * @{
mbed_official 340:28d1f895c6fe 474 */
mbed_official 340:28d1f895c6fe 475
mbed_official 442:d2c15dda23c1 476 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 340:28d1f895c6fe 477 /**
mbed_official 631:825f75ca301e 478 * @brief Set Wakeup from Stop mode interrupt flag selection.
mbed_official 631:825f75ca301e 479 * @param huart: UART handle.
mbed_official 340:28d1f895c6fe 480 * @param WakeUpSelection: address match, Start Bit detection or RXNE bit status.
mbed_official 631:825f75ca301e 481 * This parameter can be one of the following values:
mbed_official 340:28d1f895c6fe 482 * @arg UART_WAKEUP_ON_ADDRESS
mbed_official 340:28d1f895c6fe 483 * @arg UART_WAKEUP_ON_STARTBIT
mbed_official 631:825f75ca301e 484 * @arg UART_WAKEUP_ON_READDATA_NONEMPTY
mbed_official 340:28d1f895c6fe 485 * @retval HAL status
mbed_official 340:28d1f895c6fe 486 */
mbed_official 340:28d1f895c6fe 487 HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
mbed_official 340:28d1f895c6fe 488 {
mbed_official 631:825f75ca301e 489 HAL_StatusTypeDef status = HAL_OK;
mbed_official 631:825f75ca301e 490
mbed_official 631:825f75ca301e 491 /* check the wake-up from stop mode UART instance */
mbed_official 340:28d1f895c6fe 492 assert_param(IS_UART_WAKEUP_INSTANCE(huart->Instance));
mbed_official 631:825f75ca301e 493 /* check the wake-up selection parameter */
mbed_official 340:28d1f895c6fe 494 assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent));
mbed_official 631:825f75ca301e 495
mbed_official 340:28d1f895c6fe 496 /* Process Locked */
mbed_official 340:28d1f895c6fe 497 __HAL_LOCK(huart);
mbed_official 631:825f75ca301e 498
mbed_official 340:28d1f895c6fe 499 huart->State = HAL_UART_STATE_BUSY;
mbed_official 631:825f75ca301e 500
mbed_official 340:28d1f895c6fe 501 /* Disable the Peripheral */
mbed_official 340:28d1f895c6fe 502 __HAL_UART_DISABLE(huart);
mbed_official 340:28d1f895c6fe 503
mbed_official 340:28d1f895c6fe 504 /* Set the wake-up selection scheme */
mbed_official 340:28d1f895c6fe 505 MODIFY_REG(huart->Instance->CR3, USART_CR3_WUS, WakeUpSelection.WakeUpEvent);
mbed_official 631:825f75ca301e 506
mbed_official 340:28d1f895c6fe 507 if (WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS)
mbed_official 340:28d1f895c6fe 508 {
mbed_official 631:825f75ca301e 509 UARTEx_Wakeup_AddressConfig(huart, WakeUpSelection);
mbed_official 340:28d1f895c6fe 510 }
mbed_official 631:825f75ca301e 511
mbed_official 340:28d1f895c6fe 512 /* Enable the Peripheral */
mbed_official 340:28d1f895c6fe 513 __HAL_UART_ENABLE(huart);
mbed_official 631:825f75ca301e 514
mbed_official 340:28d1f895c6fe 515 /* Wait until REACK flag is set */
mbed_official 631:825f75ca301e 516 if(UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
mbed_official 631:825f75ca301e 517 {
mbed_official 631:825f75ca301e 518 status = HAL_TIMEOUT;
mbed_official 340:28d1f895c6fe 519 }
mbed_official 340:28d1f895c6fe 520 else
mbed_official 340:28d1f895c6fe 521 {
mbed_official 340:28d1f895c6fe 522 /* Initialize the UART State */
mbed_official 631:825f75ca301e 523 huart->State = HAL_UART_STATE_READY;
mbed_official 340:28d1f895c6fe 524 }
mbed_official 631:825f75ca301e 525
mbed_official 631:825f75ca301e 526 /* Process Unlocked */
mbed_official 631:825f75ca301e 527 __HAL_UNLOCK(huart);
mbed_official 631:825f75ca301e 528
mbed_official 631:825f75ca301e 529 return status;
mbed_official 340:28d1f895c6fe 530 }
mbed_official 340:28d1f895c6fe 531
mbed_official 631:825f75ca301e 532
mbed_official 340:28d1f895c6fe 533 /**
mbed_official 631:825f75ca301e 534 * @brief Enable UART Stop Mode.
mbed_official 631:825f75ca301e 535 * @note The UART is able to wake up the MCU from Stop 1 mode as long as UART clock is HSI or LSE.
mbed_official 631:825f75ca301e 536 * @param huart: UART handle.
mbed_official 340:28d1f895c6fe 537 * @retval HAL status
mbed_official 340:28d1f895c6fe 538 */
mbed_official 340:28d1f895c6fe 539 HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart)
mbed_official 340:28d1f895c6fe 540 {
mbed_official 340:28d1f895c6fe 541 /* Check parameter */
mbed_official 340:28d1f895c6fe 542 assert_param(IS_UART_WAKEUP_INSTANCE(huart->Instance));
mbed_official 340:28d1f895c6fe 543
mbed_official 340:28d1f895c6fe 544 /* Process Locked */
mbed_official 340:28d1f895c6fe 545 __HAL_LOCK(huart);
mbed_official 631:825f75ca301e 546
mbed_official 340:28d1f895c6fe 547 huart->State = HAL_UART_STATE_BUSY;
mbed_official 631:825f75ca301e 548
mbed_official 631:825f75ca301e 549 /* Set UESM bit */
mbed_official 631:825f75ca301e 550 SET_BIT(huart->Instance->CR1, USART_CR1_UESM);
mbed_official 631:825f75ca301e 551
mbed_official 340:28d1f895c6fe 552 huart->State = HAL_UART_STATE_READY;
mbed_official 631:825f75ca301e 553
mbed_official 340:28d1f895c6fe 554 /* Process Unlocked */
mbed_official 340:28d1f895c6fe 555 __HAL_UNLOCK(huart);
mbed_official 631:825f75ca301e 556
mbed_official 631:825f75ca301e 557 return HAL_OK;
mbed_official 340:28d1f895c6fe 558 }
mbed_official 340:28d1f895c6fe 559
mbed_official 340:28d1f895c6fe 560 /**
mbed_official 631:825f75ca301e 561 * @brief Disable UART Stop Mode.
mbed_official 631:825f75ca301e 562 * @param huart: UART handle.
mbed_official 340:28d1f895c6fe 563 * @retval HAL status
mbed_official 340:28d1f895c6fe 564 */
mbed_official 340:28d1f895c6fe 565 HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart)
mbed_official 340:28d1f895c6fe 566 {
mbed_official 340:28d1f895c6fe 567 /* Check parameter */
mbed_official 340:28d1f895c6fe 568 assert_param(IS_UART_WAKEUP_INSTANCE(huart->Instance));
mbed_official 340:28d1f895c6fe 569
mbed_official 340:28d1f895c6fe 570 /* Process Locked */
mbed_official 340:28d1f895c6fe 571 __HAL_LOCK(huart);
mbed_official 631:825f75ca301e 572
mbed_official 631:825f75ca301e 573 huart->State = HAL_UART_STATE_BUSY;
mbed_official 340:28d1f895c6fe 574
mbed_official 631:825f75ca301e 575 /* Clear UESM bit */
mbed_official 631:825f75ca301e 576 CLEAR_BIT(huart->Instance->CR1, USART_CR1_UESM);
mbed_official 631:825f75ca301e 577
mbed_official 340:28d1f895c6fe 578 huart->State = HAL_UART_STATE_READY;
mbed_official 631:825f75ca301e 579
mbed_official 340:28d1f895c6fe 580 /* Process Unlocked */
mbed_official 340:28d1f895c6fe 581 __HAL_UNLOCK(huart);
mbed_official 631:825f75ca301e 582
mbed_official 631:825f75ca301e 583 return HAL_OK;
mbed_official 340:28d1f895c6fe 584 }
mbed_official 631:825f75ca301e 585 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
mbed_official 340:28d1f895c6fe 586
mbed_official 340:28d1f895c6fe 587 /**
mbed_official 631:825f75ca301e 588 * @brief By default in multiprocessor mode, when the wake up method is set
mbed_official 631:825f75ca301e 589 * to address mark, the UART handles only 4-bit long addresses detection;
mbed_official 631:825f75ca301e 590 * this API allows to enable longer addresses detection (6-, 7- or 8-bit
mbed_official 631:825f75ca301e 591 * long).
mbed_official 631:825f75ca301e 592 * @note Addresses detection lengths are: 6-bit address detection in 7-bit data mode,
mbed_official 631:825f75ca301e 593 * 7-bit address detection in 8-bit data mode, 8-bit address detection in 9-bit data mode.
mbed_official 631:825f75ca301e 594 * @param huart: UART handle.
mbed_official 340:28d1f895c6fe 595 * @param AddressLength: this parameter can be one of the following values:
mbed_official 340:28d1f895c6fe 596 * @arg UART_ADDRESS_DETECT_4B: 4-bit long address
mbed_official 631:825f75ca301e 597 * @arg UART_ADDRESS_DETECT_7B: 6-, 7- or 8-bit long address
mbed_official 340:28d1f895c6fe 598 * @retval HAL status
mbed_official 340:28d1f895c6fe 599 */
mbed_official 340:28d1f895c6fe 600 HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength)
mbed_official 340:28d1f895c6fe 601 {
mbed_official 340:28d1f895c6fe 602 /* Check the UART handle allocation */
mbed_official 442:d2c15dda23c1 603 if(huart == NULL)
mbed_official 340:28d1f895c6fe 604 {
mbed_official 340:28d1f895c6fe 605 return HAL_ERROR;
mbed_official 340:28d1f895c6fe 606 }
mbed_official 340:28d1f895c6fe 607
mbed_official 340:28d1f895c6fe 608 /* Check the address length parameter */
mbed_official 340:28d1f895c6fe 609 assert_param(IS_UART_ADDRESSLENGTH_DETECT(AddressLength));
mbed_official 631:825f75ca301e 610
mbed_official 340:28d1f895c6fe 611 huart->State = HAL_UART_STATE_BUSY;
mbed_official 631:825f75ca301e 612
mbed_official 340:28d1f895c6fe 613 /* Disable the Peripheral */
mbed_official 340:28d1f895c6fe 614 __HAL_UART_DISABLE(huart);
mbed_official 631:825f75ca301e 615
mbed_official 340:28d1f895c6fe 616 /* Set the address length */
mbed_official 340:28d1f895c6fe 617 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, AddressLength);
mbed_official 631:825f75ca301e 618
mbed_official 340:28d1f895c6fe 619 /* Enable the Peripheral */
mbed_official 631:825f75ca301e 620 __HAL_UART_ENABLE(huart);
mbed_official 631:825f75ca301e 621
mbed_official 340:28d1f895c6fe 622 /* TEACK and/or REACK to check before moving huart->State to Ready */
mbed_official 340:28d1f895c6fe 623 return (UART_CheckIdleState(huart));
mbed_official 340:28d1f895c6fe 624 }
mbed_official 340:28d1f895c6fe 625
mbed_official 340:28d1f895c6fe 626
mbed_official 442:d2c15dda23c1 627 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 340:28d1f895c6fe 628 /**
mbed_official 631:825f75ca301e 629 * @brief Transmit break characters.
mbed_official 631:825f75ca301e 630 * @param huart: UART handle.
mbed_official 340:28d1f895c6fe 631 * @retval HAL status
mbed_official 442:d2c15dda23c1 632 */
mbed_official 442:d2c15dda23c1 633 HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
mbed_official 340:28d1f895c6fe 634 {
mbed_official 442:d2c15dda23c1 635 /* Check the parameters */
mbed_official 442:d2c15dda23c1 636 assert_param(IS_UART_INSTANCE(huart->Instance));
mbed_official 631:825f75ca301e 637
mbed_official 442:d2c15dda23c1 638 /* Process Locked */
mbed_official 442:d2c15dda23c1 639 __HAL_LOCK(huart);
mbed_official 631:825f75ca301e 640
mbed_official 442:d2c15dda23c1 641 huart->State = HAL_UART_STATE_BUSY;
mbed_official 631:825f75ca301e 642
mbed_official 442:d2c15dda23c1 643 /* Send break characters */
mbed_official 631:825f75ca301e 644 huart->Instance->RQR |= UART_SENDBREAK_REQUEST;
mbed_official 631:825f75ca301e 645
mbed_official 442:d2c15dda23c1 646 huart->State = HAL_UART_STATE_READY;
mbed_official 631:825f75ca301e 647
mbed_official 442:d2c15dda23c1 648 /* Process Unlocked */
mbed_official 442:d2c15dda23c1 649 __HAL_UNLOCK(huart);
mbed_official 631:825f75ca301e 650
mbed_official 631:825f75ca301e 651 return HAL_OK;
mbed_official 442:d2c15dda23c1 652 }
mbed_official 442:d2c15dda23c1 653 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
mbed_official 340:28d1f895c6fe 654
mbed_official 340:28d1f895c6fe 655 /**
mbed_official 340:28d1f895c6fe 656 * @}
mbed_official 340:28d1f895c6fe 657 */
mbed_official 340:28d1f895c6fe 658
mbed_official 340:28d1f895c6fe 659 /**
mbed_official 340:28d1f895c6fe 660 * @}
mbed_official 631:825f75ca301e 661 */
mbed_official 340:28d1f895c6fe 662
mbed_official 340:28d1f895c6fe 663 /** @addtogroup UARTEx_Private_Functions
mbed_official 340:28d1f895c6fe 664 * @{
mbed_official 340:28d1f895c6fe 665 */
mbed_official 340:28d1f895c6fe 666
mbed_official 442:d2c15dda23c1 667 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 442:d2c15dda23c1 668 /**
mbed_official 631:825f75ca301e 669 * @brief Initialize the UART wake-up from stop mode parameters when triggered by address detection.
mbed_official 631:825f75ca301e 670 * @param huart: UART handle.
mbed_official 631:825f75ca301e 671 * @param WakeUpSelection: UART wake up from stop mode parameters.
mbed_official 631:825f75ca301e 672 * @retval None
mbed_official 631:825f75ca301e 673 */
mbed_official 631:825f75ca301e 674 static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
mbed_official 442:d2c15dda23c1 675 {
mbed_official 442:d2c15dda23c1 676 /* Check parmeters */
mbed_official 442:d2c15dda23c1 677 assert_param(IS_UART_WAKEUP_INSTANCE(huart->Instance));
mbed_official 442:d2c15dda23c1 678 assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength));
mbed_official 442:d2c15dda23c1 679
mbed_official 442:d2c15dda23c1 680 /* Set the USART address length */
mbed_official 442:d2c15dda23c1 681 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength);
mbed_official 442:d2c15dda23c1 682
mbed_official 442:d2c15dda23c1 683 /* Set the USART address node */
mbed_official 442:d2c15dda23c1 684 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS));
mbed_official 442:d2c15dda23c1 685 }
mbed_official 442:d2c15dda23c1 686 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
mbed_official 442:d2c15dda23c1 687
mbed_official 340:28d1f895c6fe 688 /**
mbed_official 340:28d1f895c6fe 689 * @}
mbed_official 340:28d1f895c6fe 690 */
mbed_official 340:28d1f895c6fe 691
mbed_official 340:28d1f895c6fe 692 #endif /* HAL_UART_MODULE_ENABLED */
mbed_official 340:28d1f895c6fe 693
mbed_official 340:28d1f895c6fe 694 /**
mbed_official 340:28d1f895c6fe 695 * @}
mbed_official 340:28d1f895c6fe 696 */
mbed_official 340:28d1f895c6fe 697
mbed_official 340:28d1f895c6fe 698 /**
mbed_official 340:28d1f895c6fe 699 * @}
mbed_official 340:28d1f895c6fe 700 */
mbed_official 340:28d1f895c6fe 701
mbed_official 340:28d1f895c6fe 702 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/