mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

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

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

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

Import librarymbed

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

Committer:
mbed_official
Date:
Mon Sep 28 10:45:10 2015 +0100
Revision:
630:825f75ca301e
Parent:
441:d2c15dda23c1
Synchronized with git revision 54fbe4144faf309c37205a5d39fa665daa919f10

Full URL: https://github.com/mbedmicro/mbed/commit/54fbe4144faf309c37205a5d39fa665daa919f10/

NUCLEO_F031K6 : Add new target

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 630:825f75ca301e 5 * @version V1.3.0
mbed_official 630: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 630:825f75ca301e 15 ==============================================================================
mbed_official 630:825f75ca301e 16 ##### UART peripheral extended features #####
mbed_official 630:825f75ca301e 17 ==============================================================================
mbed_official 630:825f75ca301e 18
mbed_official 340:28d1f895c6fe 19 (#) Declare a UART_HandleTypeDef handle structure.
mbed_official 340:28d1f895c6fe 20
mbed_official 630:825f75ca301e 21 (#) For the UART RS485 Driver Enable mode, initialize the UART registers
mbed_official 630:825f75ca301e 22 by calling the HAL_RS485Ex_Init() API.
mbed_official 630: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 630: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 630: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 630: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 630: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 441:d2c15dda23c1 78 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 630:825f75ca301e 79 static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
mbed_official 441: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 630:825f75ca301e 92 /** @defgroup UARTEx_Exported_Functions_Group1 Extended Initialization and de-initialization functions
mbed_official 441:d2c15dda23c1 93 * @brief Extended Initialization and Configuration Functions
mbed_official 441:d2c15dda23c1 94 *
mbed_official 441:d2c15dda23c1 95 @verbatim
mbed_official 441:d2c15dda23c1 96 ===============================================================================
mbed_official 441:d2c15dda23c1 97 ##### Initialization and Configuration functions #####
mbed_official 441:d2c15dda23c1 98 ==============================================================================
mbed_official 441:d2c15dda23c1 99 [..]
mbed_official 441:d2c15dda23c1 100 This subsection provides a set of functions allowing to initialize the USARTx or the UARTy
mbed_official 441:d2c15dda23c1 101 in asynchronous mode.
mbed_official 630:825f75ca301e 102 (+) For the asynchronous mode the parameters below can be configured:
mbed_official 441:d2c15dda23c1 103 (++) Baud Rate
mbed_official 441:d2c15dda23c1 104 (++) Word Length (Fixed to 8-bits only for LIN mode)
mbed_official 441:d2c15dda23c1 105 (++) Stop Bit
mbed_official 441:d2c15dda23c1 106 (++) Parity: If the parity is enabled, then the MSB bit of the data written
mbed_official 441:d2c15dda23c1 107 in the data register is transmitted but is changed by the parity bit.
mbed_official 630:825f75ca301e 108 According to device capability (support or not of 7-bit word length),
mbed_official 630:825f75ca301e 109 frame length is either defined by the M bit (8-bits or 9-bits)
mbed_official 630:825f75ca301e 110 or by the M1 and M0 bits (7-bit, 8-bit or 9-bit).
mbed_official 630:825f75ca301e 111 Possible UART frame formats are as listed in the following table:
mbed_official 630:825f75ca301e 112
mbed_official 630:825f75ca301e 113 (+++) Table 1. UART frame format.
mbed_official 630:825f75ca301e 114 (+++) +-----------------------------------------------------------------------+
mbed_official 630:825f75ca301e 115 (+++) | M bit | PCE bit | UART frame |
mbed_official 630:825f75ca301e 116 (+++) |-------------------|-----------|---------------------------------------|
mbed_official 630:825f75ca301e 117 (+++) | 0 | 0 | | SB | 8-bit data | STB | |
mbed_official 630:825f75ca301e 118 (+++) |-------------------|-----------|---------------------------------------|
mbed_official 630:825f75ca301e 119 (+++) | 0 | 1 | | SB | 7-bit data | PB | STB | |
mbed_official 630:825f75ca301e 120 (+++) |-------------------|-----------|---------------------------------------|
mbed_official 630:825f75ca301e 121 (+++) | 1 | 0 | | SB | 9-bit data | STB | |
mbed_official 630:825f75ca301e 122 (+++) |-------------------|-----------|---------------------------------------|
mbed_official 630:825f75ca301e 123 (+++) | 1 | 1 | | SB | 8-bit data | PB | STB | |
mbed_official 630:825f75ca301e 124 (+++) +-----------------------------------------------------------------------+
mbed_official 630:825f75ca301e 125 (+++) | M1 bit | M0 bit | PCE bit | UART frame |
mbed_official 630:825f75ca301e 126 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 630:825f75ca301e 127 (+++) | 0 | 0 | 0 | | SB | 8 bit data | STB | |
mbed_official 630:825f75ca301e 128 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 630:825f75ca301e 129 (+++) | 0 | 0 | 1 | | SB | 7 bit data | PB | STB | |
mbed_official 630:825f75ca301e 130 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 630:825f75ca301e 131 (+++) | 0 | 1 | 0 | | SB | 9 bit data | STB | |
mbed_official 630:825f75ca301e 132 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 630:825f75ca301e 133 (+++) | 0 | 1 | 1 | | SB | 8 bit data | PB | STB | |
mbed_official 630:825f75ca301e 134 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 630:825f75ca301e 135 (+++) | 1 | 0 | 0 | | SB | 7 bit data | STB | |
mbed_official 630:825f75ca301e 136 (+++) |---------|---------|-----------|---------------------------------------|
mbed_official 630:825f75ca301e 137 (+++) | 1 | 0 | 1 | | SB | 6 bit data | PB | STB | |
mbed_official 630:825f75ca301e 138 (+++) +-----------------------------------------------------------------------+
mbed_official 441:d2c15dda23c1 139 (++) Hardware flow control
mbed_official 441:d2c15dda23c1 140 (++) Receiver/transmitter modes
mbed_official 441:d2c15dda23c1 141 (++) Over Sampling Method
mbed_official 441:d2c15dda23c1 142 (++) One-Bit Sampling Method
mbed_official 441:d2c15dda23c1 143 (+) For the asynchronous mode, the following advanced features can be configured as well:
mbed_official 441:d2c15dda23c1 144 (++) TX and/or RX pin level inversion
mbed_official 441:d2c15dda23c1 145 (++) data logical level inversion
mbed_official 441:d2c15dda23c1 146 (++) RX and TX pins swap
mbed_official 441:d2c15dda23c1 147 (++) RX overrun detection disabling
mbed_official 441:d2c15dda23c1 148 (++) DMA disabling on RX error
mbed_official 441:d2c15dda23c1 149 (++) MSB first on communication line
mbed_official 441:d2c15dda23c1 150 (++) auto Baud rate detection
mbed_official 441:d2c15dda23c1 151 [..]
mbed_official 441:d2c15dda23c1 152 The HAL_LIN_Init() and HAL_RS485Ex_Init() APIs follows respectively the LIN and
mbed_official 441:d2c15dda23c1 153 the UART RS485 mode configuration procedures (details for the procedures are
mbed_official 441:d2c15dda23c1 154 available in reference manual).
mbed_official 441:d2c15dda23c1 155
mbed_official 441:d2c15dda23c1 156 @endverbatim
mbed_official 441:d2c15dda23c1 157 * @{
mbed_official 441:d2c15dda23c1 158 */
mbed_official 441:d2c15dda23c1 159
mbed_official 441:d2c15dda23c1 160 /**
mbed_official 630:825f75ca301e 161 * @brief Initialize the RS485 Driver enable feature according to the specified
mbed_official 630:825f75ca301e 162 * parameters in the UART_InitTypeDef and creates the associated handle.
mbed_official 630:825f75ca301e 163 * @param huart: UART handle.
mbed_official 630:825f75ca301e 164 * @param Polarity: select the driver enable polarity.
mbed_official 441:d2c15dda23c1 165 * This parameter can be one of the following values:
mbed_official 441:d2c15dda23c1 166 * @arg UART_DE_POLARITY_HIGH: DE signal is active high
mbed_official 441:d2c15dda23c1 167 * @arg UART_DE_POLARITY_LOW: DE signal is active low
mbed_official 630:825f75ca301e 168 * @param AssertionTime: Driver Enable assertion time:
mbed_official 441:d2c15dda23c1 169 * 5-bit value defining the time between the activation of the DE (Driver Enable)
mbed_official 441:d2c15dda23c1 170 * signal and the beginning of the start bit. It is expressed in sample time
mbed_official 630:825f75ca301e 171 * units (1/8 or 1/16 bit time, depending on the oversampling rate)
mbed_official 630:825f75ca301e 172 * @param DeassertionTime: Driver Enable deassertion time:
mbed_official 441:d2c15dda23c1 173 * 5-bit value defining the time between the end of the last stop bit, in a
mbed_official 441:d2c15dda23c1 174 * transmitted message, and the de-activation of the DE (Driver Enable) signal.
mbed_official 441:d2c15dda23c1 175 * It is expressed in sample time units (1/8 or 1/16 bit time, depending on the
mbed_official 630:825f75ca301e 176 * oversampling rate).
mbed_official 441:d2c15dda23c1 177 * @retval HAL status
mbed_official 441:d2c15dda23c1 178 */
mbed_official 630:825f75ca301e 179 HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime)
mbed_official 441:d2c15dda23c1 180 {
mbed_official 441:d2c15dda23c1 181 uint32_t temp = 0x0;
mbed_official 630:825f75ca301e 182
mbed_official 441:d2c15dda23c1 183 /* Check the UART handle allocation */
mbed_official 441:d2c15dda23c1 184 if(huart == NULL)
mbed_official 441:d2c15dda23c1 185 {
mbed_official 441:d2c15dda23c1 186 return HAL_ERROR;
mbed_official 441:d2c15dda23c1 187 }
mbed_official 441:d2c15dda23c1 188 /* Check the Driver Enable UART instance */
mbed_official 441:d2c15dda23c1 189 assert_param(IS_UART_DRIVER_ENABLE_INSTANCE(huart->Instance));
mbed_official 630:825f75ca301e 190
mbed_official 441:d2c15dda23c1 191 /* Check the Driver Enable polarity */
mbed_official 630:825f75ca301e 192 assert_param(IS_UART_DE_POLARITY(Polarity));
mbed_official 630:825f75ca301e 193
mbed_official 441:d2c15dda23c1 194 /* Check the Driver Enable assertion time */
mbed_official 630:825f75ca301e 195 assert_param(IS_UART_ASSERTIONTIME(AssertionTime));
mbed_official 630:825f75ca301e 196
mbed_official 441:d2c15dda23c1 197 /* Check the Driver Enable deassertion time */
mbed_official 630:825f75ca301e 198 assert_param(IS_UART_DEASSERTIONTIME(DeassertionTime));
mbed_official 630:825f75ca301e 199
mbed_official 441:d2c15dda23c1 200 if(huart->State == HAL_UART_STATE_RESET)
mbed_official 630:825f75ca301e 201 {
mbed_official 630:825f75ca301e 202 /* Allocate lock resource and initialize it */
mbed_official 630:825f75ca301e 203 huart->Lock = HAL_UNLOCKED;
mbed_official 630:825f75ca301e 204
mbed_official 630:825f75ca301e 205 /* Init the low level hardware : GPIO, CLOCK, CORTEX */
mbed_official 441:d2c15dda23c1 206 HAL_UART_MspInit(huart);
mbed_official 441:d2c15dda23c1 207 }
mbed_official 630:825f75ca301e 208
mbed_official 441:d2c15dda23c1 209 huart->State = HAL_UART_STATE_BUSY;
mbed_official 630:825f75ca301e 210
mbed_official 441:d2c15dda23c1 211 /* Disable the Peripheral */
mbed_official 441:d2c15dda23c1 212 __HAL_UART_DISABLE(huart);
mbed_official 630:825f75ca301e 213
mbed_official 441:d2c15dda23c1 214 /* Set the UART Communication parameters */
mbed_official 441:d2c15dda23c1 215 if (UART_SetConfig(huart) == HAL_ERROR)
mbed_official 441:d2c15dda23c1 216 {
mbed_official 441:d2c15dda23c1 217 return HAL_ERROR;
mbed_official 630:825f75ca301e 218 }
mbed_official 630:825f75ca301e 219
mbed_official 630:825f75ca301e 220 if(huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
mbed_official 441:d2c15dda23c1 221 {
mbed_official 441:d2c15dda23c1 222 UART_AdvFeatureConfig(huart);
mbed_official 441:d2c15dda23c1 223 }
mbed_official 630:825f75ca301e 224
mbed_official 441:d2c15dda23c1 225 /* Enable the Driver Enable mode by setting the DEM bit in the CR3 register */
mbed_official 630:825f75ca301e 226 SET_BIT(huart->Instance->CR3, USART_CR3_DEM);
mbed_official 630:825f75ca301e 227
mbed_official 441:d2c15dda23c1 228 /* Set the Driver Enable polarity */
mbed_official 630:825f75ca301e 229 MODIFY_REG(huart->Instance->CR3, USART_CR3_DEP, Polarity);
mbed_official 630:825f75ca301e 230
mbed_official 441:d2c15dda23c1 231 /* Set the Driver Enable assertion and deassertion times */
mbed_official 630:825f75ca301e 232 temp = (AssertionTime << UART_CR1_DEAT_ADDRESS_LSB_POS);
mbed_official 630:825f75ca301e 233 temp |= (DeassertionTime << UART_CR1_DEDT_ADDRESS_LSB_POS);
mbed_official 441:d2c15dda23c1 234 MODIFY_REG(huart->Instance->CR1, (USART_CR1_DEDT|USART_CR1_DEAT), temp);
mbed_official 630:825f75ca301e 235
mbed_official 441:d2c15dda23c1 236 /* Enable the Peripheral */
mbed_official 441:d2c15dda23c1 237 __HAL_UART_ENABLE(huart);
mbed_official 630:825f75ca301e 238
mbed_official 441:d2c15dda23c1 239 /* TEACK and/or REACK to check before moving huart->State to Ready */
mbed_official 441:d2c15dda23c1 240 return (UART_CheckIdleState(huart));
mbed_official 441:d2c15dda23c1 241 }
mbed_official 441:d2c15dda23c1 242
mbed_official 441:d2c15dda23c1 243 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 441:d2c15dda23c1 244 /**
mbed_official 630:825f75ca301e 245 * @brief Initialize the LIN mode according to the specified
mbed_official 630:825f75ca301e 246 * parameters in the UART_InitTypeDef and creates the associated handle .
mbed_official 630:825f75ca301e 247 * @param huart: UART handle.
mbed_official 441:d2c15dda23c1 248 * @param BreakDetectLength: specifies the LIN break detection length.
mbed_official 441:d2c15dda23c1 249 * This parameter can be one of the following values:
mbed_official 441:d2c15dda23c1 250 * @arg UART_LINBREAKDETECTLENGTH_10B: 10-bit break detection
mbed_official 441:d2c15dda23c1 251 * @arg UART_LINBREAKDETECTLENGTH_11B: 11-bit break detection
mbed_official 441:d2c15dda23c1 252 * @retval HAL status
mbed_official 441:d2c15dda23c1 253 */
mbed_official 441:d2c15dda23c1 254 HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength)
mbed_official 441:d2c15dda23c1 255 {
mbed_official 441:d2c15dda23c1 256 /* Check the UART handle allocation */
mbed_official 441:d2c15dda23c1 257 if(huart == NULL)
mbed_official 441:d2c15dda23c1 258 {
mbed_official 441:d2c15dda23c1 259 return HAL_ERROR;
mbed_official 441:d2c15dda23c1 260 }
mbed_official 630:825f75ca301e 261
mbed_official 630:825f75ca301e 262 /* Check the LIN UART instance */
mbed_official 441:d2c15dda23c1 263 assert_param(IS_UART_LIN_INSTANCE(huart->Instance));
mbed_official 630:825f75ca301e 264 /* Check the Break detection length parameter */
mbed_official 441:d2c15dda23c1 265 assert_param(IS_UART_LIN_BREAK_DETECT_LENGTH(BreakDetectLength));
mbed_official 630:825f75ca301e 266
mbed_official 441:d2c15dda23c1 267 /* LIN mode limited to 16-bit oversampling only */
mbed_official 441:d2c15dda23c1 268 if(huart->Init.OverSampling == UART_OVERSAMPLING_8)
mbed_official 441:d2c15dda23c1 269 {
mbed_official 441:d2c15dda23c1 270 return HAL_ERROR;
mbed_official 441:d2c15dda23c1 271 }
mbed_official 630:825f75ca301e 272 /* LIN mode limited to 8-bit data length */
mbed_official 630:825f75ca301e 273 if(huart->Init.WordLength != UART_WORDLENGTH_8B)
mbed_official 441:d2c15dda23c1 274 {
mbed_official 441:d2c15dda23c1 275 return HAL_ERROR;
mbed_official 441:d2c15dda23c1 276 }
mbed_official 441:d2c15dda23c1 277
mbed_official 630:825f75ca301e 278 if(huart->State == HAL_UART_STATE_RESET)
mbed_official 630:825f75ca301e 279 {
mbed_official 630:825f75ca301e 280 /* Allocate lock resource and initialize it */
mbed_official 630:825f75ca301e 281 huart->Lock = HAL_UNLOCKED;
mbed_official 630:825f75ca301e 282
mbed_official 630:825f75ca301e 283 /* Init the low level hardware : GPIO, CLOCK */
mbed_official 630:825f75ca301e 284 HAL_UART_MspInit(huart);
mbed_official 630:825f75ca301e 285 }
mbed_official 630:825f75ca301e 286
mbed_official 630:825f75ca301e 287 huart->State = HAL_UART_STATE_BUSY;
mbed_official 630:825f75ca301e 288
mbed_official 441:d2c15dda23c1 289 /* Disable the Peripheral */
mbed_official 441:d2c15dda23c1 290 __HAL_UART_DISABLE(huart);
mbed_official 630:825f75ca301e 291
mbed_official 441:d2c15dda23c1 292 /* Set the UART Communication parameters */
mbed_official 441:d2c15dda23c1 293 if (UART_SetConfig(huart) == HAL_ERROR)
mbed_official 441:d2c15dda23c1 294 {
mbed_official 441:d2c15dda23c1 295 return HAL_ERROR;
mbed_official 630:825f75ca301e 296 }
mbed_official 630:825f75ca301e 297
mbed_official 441:d2c15dda23c1 298 if (huart->AdvancedInit.AdvFeatureInit != UART_ADVFEATURE_NO_INIT)
mbed_official 441:d2c15dda23c1 299 {
mbed_official 441:d2c15dda23c1 300 UART_AdvFeatureConfig(huart);
mbed_official 441:d2c15dda23c1 301 }
mbed_official 630:825f75ca301e 302
mbed_official 630:825f75ca301e 303 /* In LIN mode, the following bits must be kept cleared:
mbed_official 441:d2c15dda23c1 304 - LINEN and CLKEN bits in the USART_CR2 register,
mbed_official 441:d2c15dda23c1 305 - SCEN and IREN bits in the USART_CR3 register.*/
mbed_official 441:d2c15dda23c1 306 huart->Instance->CR2 &= ~(USART_CR2_CLKEN);
mbed_official 441:d2c15dda23c1 307 huart->Instance->CR3 &= ~(USART_CR3_HDSEL | USART_CR3_IREN | USART_CR3_SCEN);
mbed_official 630:825f75ca301e 308
mbed_official 441:d2c15dda23c1 309 /* Enable the LIN mode by setting the LINEN bit in the CR2 register */
mbed_official 441:d2c15dda23c1 310 huart->Instance->CR2 |= USART_CR2_LINEN;
mbed_official 630:825f75ca301e 311
mbed_official 441:d2c15dda23c1 312 /* Set the USART LIN Break detection length. */
mbed_official 441:d2c15dda23c1 313 MODIFY_REG(huart->Instance->CR2, USART_CR2_LBDL, BreakDetectLength);
mbed_official 630:825f75ca301e 314
mbed_official 441:d2c15dda23c1 315 /* Enable the Peripheral */
mbed_official 441:d2c15dda23c1 316 __HAL_UART_ENABLE(huart);
mbed_official 630:825f75ca301e 317
mbed_official 441:d2c15dda23c1 318 /* TEACK and/or REACK to check before moving huart->State to Ready */
mbed_official 441:d2c15dda23c1 319 return (UART_CheckIdleState(huart));
mbed_official 441:d2c15dda23c1 320 }
mbed_official 441:d2c15dda23c1 321 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
mbed_official 630:825f75ca301e 322
mbed_official 441:d2c15dda23c1 323 /**
mbed_official 441:d2c15dda23c1 324 * @}
mbed_official 441:d2c15dda23c1 325 */
mbed_official 441:d2c15dda23c1 326
mbed_official 340:28d1f895c6fe 327 /** @defgroup UARTEx_Exported_Functions_Group2 Extended IO operation function
mbed_official 441:d2c15dda23c1 328 * @brief Extended UART Interrupt handling function
mbed_official 340:28d1f895c6fe 329 *
mbed_official 441:d2c15dda23c1 330 @verbatim
mbed_official 340:28d1f895c6fe 331 ===============================================================================
mbed_official 340:28d1f895c6fe 332 ##### IO operation function #####
mbed_official 441:d2c15dda23c1 333 ===============================================================================
mbed_official 441: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 441:d2c15dda23c1 339 (++) HAL_UART_IRQHandler()
mbed_official 340:28d1f895c6fe 340
mbed_official 340:28d1f895c6fe 341 (#) Callback provided in No_Blocking mode:
mbed_official 630: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 441:d2c15dda23c1 348
mbed_official 340:28d1f895c6fe 349 /**
mbed_official 630:825f75ca301e 350 * @brief Handle UART interrupt request.
mbed_official 630: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 630:825f75ca301e 358 {
mbed_official 340:28d1f895c6fe 359 __HAL_UART_CLEAR_IT(huart, UART_CLEAR_PEF);
mbed_official 630: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 630:825f75ca301e 365
mbed_official 630: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 630:825f75ca301e 368 {
mbed_official 340:28d1f895c6fe 369 __HAL_UART_CLEAR_IT(huart, UART_CLEAR_FEF);
mbed_official 630: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 630:825f75ca301e 375
mbed_official 630: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 630:825f75ca301e 378 {
mbed_official 340:28d1f895c6fe 379 __HAL_UART_CLEAR_IT(huart, UART_CLEAR_NEF);
mbed_official 630:825f75ca301e 380
mbed_official 630: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 630:825f75ca301e 385
mbed_official 630: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 630:825f75ca301e 388 {
mbed_official 340:28d1f895c6fe 389 __HAL_UART_CLEAR_IT(huart, UART_CLEAR_OREF);
mbed_official 630:825f75ca301e 390
mbed_official 630: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 630: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 630:825f75ca301e 401
mbed_official 441: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 630: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 630:825f75ca301e 409 HAL_UARTEx_WakeupCallback(huart);
mbed_official 340:28d1f895c6fe 410 }
mbed_official 441:d2c15dda23c1 411 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
mbed_official 630: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 630: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 630: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 630:825f75ca301e 426 }
mbed_official 630:825f75ca301e 427
mbed_official 630: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 630:825f75ca301e 432 }
mbed_official 630:825f75ca301e 433
mbed_official 340:28d1f895c6fe 434 }
mbed_official 340:28d1f895c6fe 435
mbed_official 441:d2c15dda23c1 436 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 340:28d1f895c6fe 437 /**
mbed_official 630:825f75ca301e 438 * @brief UART wakeup from Stop mode callback
mbed_official 630:825f75ca301e 439 * @param huart: UART handle
mbed_official 340:28d1f895c6fe 440 * @retval None
mbed_official 340:28d1f895c6fe 441 */
mbed_official 630: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 630: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 441: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 441:d2c15dda23c1 464 (+) HAL_UARTEx_StopModeWakeUpSourceConfig() API sets Wakeup from Stop mode interrupt flag selection
mbed_official 441: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 441:d2c15dda23c1 467 (+) HAL_UARTEx_DisableStopMode() API disables the above feature
mbed_official 630:825f75ca301e 468 (+) HAL_MultiProcessorEx_AddressLength_Set() API optionally sets the UART node address
mbed_official 630:825f75ca301e 469 detection length to more than 4 bits for multiprocessor address mark wake up.
mbed_official 441: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 441:d2c15dda23c1 476 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 340:28d1f895c6fe 477 /**
mbed_official 630:825f75ca301e 478 * @brief Set Wakeup from Stop mode interrupt flag selection.
mbed_official 630:825f75ca301e 479 * @param huart: UART handle.
mbed_official 340:28d1f895c6fe 480 * @param WakeUpSelection: address match, Start Bit detection or RXNE bit status.
mbed_official 630: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 630: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 630:825f75ca301e 489 HAL_StatusTypeDef status = HAL_OK;
mbed_official 630:825f75ca301e 490
mbed_official 630: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 630:825f75ca301e 493 /* check the wake-up selection parameter */
mbed_official 340:28d1f895c6fe 494 assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent));
mbed_official 630:825f75ca301e 495
mbed_official 340:28d1f895c6fe 496 /* Process Locked */
mbed_official 340:28d1f895c6fe 497 __HAL_LOCK(huart);
mbed_official 630:825f75ca301e 498
mbed_official 340:28d1f895c6fe 499 huart->State = HAL_UART_STATE_BUSY;
mbed_official 630: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 630:825f75ca301e 506
mbed_official 340:28d1f895c6fe 507 if (WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS)
mbed_official 340:28d1f895c6fe 508 {
mbed_official 630:825f75ca301e 509 UARTEx_Wakeup_AddressConfig(huart, WakeUpSelection);
mbed_official 340:28d1f895c6fe 510 }
mbed_official 630:825f75ca301e 511
mbed_official 340:28d1f895c6fe 512 /* Enable the Peripheral */
mbed_official 340:28d1f895c6fe 513 __HAL_UART_ENABLE(huart);
mbed_official 630:825f75ca301e 514
mbed_official 340:28d1f895c6fe 515 /* Wait until REACK flag is set */
mbed_official 630:825f75ca301e 516 if(UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
mbed_official 630:825f75ca301e 517 {
mbed_official 630: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 630:825f75ca301e 523 huart->State = HAL_UART_STATE_READY;
mbed_official 340:28d1f895c6fe 524 }
mbed_official 630:825f75ca301e 525
mbed_official 630:825f75ca301e 526 /* Process Unlocked */
mbed_official 630:825f75ca301e 527 __HAL_UNLOCK(huart);
mbed_official 630:825f75ca301e 528
mbed_official 630:825f75ca301e 529 return status;
mbed_official 340:28d1f895c6fe 530 }
mbed_official 340:28d1f895c6fe 531
mbed_official 630:825f75ca301e 532
mbed_official 340:28d1f895c6fe 533 /**
mbed_official 630:825f75ca301e 534 * @brief Enable UART Stop Mode.
mbed_official 630: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 630: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 630:825f75ca301e 546
mbed_official 340:28d1f895c6fe 547 huart->State = HAL_UART_STATE_BUSY;
mbed_official 630:825f75ca301e 548
mbed_official 630:825f75ca301e 549 /* Set UESM bit */
mbed_official 630:825f75ca301e 550 SET_BIT(huart->Instance->CR1, USART_CR1_UESM);
mbed_official 630:825f75ca301e 551
mbed_official 340:28d1f895c6fe 552 huart->State = HAL_UART_STATE_READY;
mbed_official 630:825f75ca301e 553
mbed_official 340:28d1f895c6fe 554 /* Process Unlocked */
mbed_official 340:28d1f895c6fe 555 __HAL_UNLOCK(huart);
mbed_official 630:825f75ca301e 556
mbed_official 630:825f75ca301e 557 return HAL_OK;
mbed_official 340:28d1f895c6fe 558 }
mbed_official 340:28d1f895c6fe 559
mbed_official 340:28d1f895c6fe 560 /**
mbed_official 630:825f75ca301e 561 * @brief Disable UART Stop Mode.
mbed_official 630: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 630:825f75ca301e 572
mbed_official 630:825f75ca301e 573 huart->State = HAL_UART_STATE_BUSY;
mbed_official 340:28d1f895c6fe 574
mbed_official 630:825f75ca301e 575 /* Clear UESM bit */
mbed_official 630:825f75ca301e 576 CLEAR_BIT(huart->Instance->CR1, USART_CR1_UESM);
mbed_official 630:825f75ca301e 577
mbed_official 340:28d1f895c6fe 578 huart->State = HAL_UART_STATE_READY;
mbed_official 630:825f75ca301e 579
mbed_official 340:28d1f895c6fe 580 /* Process Unlocked */
mbed_official 340:28d1f895c6fe 581 __HAL_UNLOCK(huart);
mbed_official 630:825f75ca301e 582
mbed_official 630:825f75ca301e 583 return HAL_OK;
mbed_official 340:28d1f895c6fe 584 }
mbed_official 630: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 630:825f75ca301e 588 * @brief By default in multiprocessor mode, when the wake up method is set
mbed_official 630:825f75ca301e 589 * to address mark, the UART handles only 4-bit long addresses detection;
mbed_official 630:825f75ca301e 590 * this API allows to enable longer addresses detection (6-, 7- or 8-bit
mbed_official 630:825f75ca301e 591 * long).
mbed_official 630:825f75ca301e 592 * @note Addresses detection lengths are: 6-bit address detection in 7-bit data mode,
mbed_official 630:825f75ca301e 593 * 7-bit address detection in 8-bit data mode, 8-bit address detection in 9-bit data mode.
mbed_official 630: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 630: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 441: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 630:825f75ca301e 610
mbed_official 340:28d1f895c6fe 611 huart->State = HAL_UART_STATE_BUSY;
mbed_official 630:825f75ca301e 612
mbed_official 340:28d1f895c6fe 613 /* Disable the Peripheral */
mbed_official 340:28d1f895c6fe 614 __HAL_UART_DISABLE(huart);
mbed_official 630: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 630:825f75ca301e 618
mbed_official 340:28d1f895c6fe 619 /* Enable the Peripheral */
mbed_official 630:825f75ca301e 620 __HAL_UART_ENABLE(huart);
mbed_official 630: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 441:d2c15dda23c1 627 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 340:28d1f895c6fe 628 /**
mbed_official 630:825f75ca301e 629 * @brief Transmit break characters.
mbed_official 630:825f75ca301e 630 * @param huart: UART handle.
mbed_official 340:28d1f895c6fe 631 * @retval HAL status
mbed_official 441:d2c15dda23c1 632 */
mbed_official 441:d2c15dda23c1 633 HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
mbed_official 340:28d1f895c6fe 634 {
mbed_official 441:d2c15dda23c1 635 /* Check the parameters */
mbed_official 441:d2c15dda23c1 636 assert_param(IS_UART_INSTANCE(huart->Instance));
mbed_official 630:825f75ca301e 637
mbed_official 441:d2c15dda23c1 638 /* Process Locked */
mbed_official 441:d2c15dda23c1 639 __HAL_LOCK(huart);
mbed_official 630:825f75ca301e 640
mbed_official 441:d2c15dda23c1 641 huart->State = HAL_UART_STATE_BUSY;
mbed_official 630:825f75ca301e 642
mbed_official 441:d2c15dda23c1 643 /* Send break characters */
mbed_official 630:825f75ca301e 644 huart->Instance->RQR |= UART_SENDBREAK_REQUEST;
mbed_official 630:825f75ca301e 645
mbed_official 441:d2c15dda23c1 646 huart->State = HAL_UART_STATE_READY;
mbed_official 630:825f75ca301e 647
mbed_official 441:d2c15dda23c1 648 /* Process Unlocked */
mbed_official 441:d2c15dda23c1 649 __HAL_UNLOCK(huart);
mbed_official 630:825f75ca301e 650
mbed_official 630:825f75ca301e 651 return HAL_OK;
mbed_official 441:d2c15dda23c1 652 }
mbed_official 441: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 630: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 441:d2c15dda23c1 667 #if !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC)
mbed_official 441:d2c15dda23c1 668 /**
mbed_official 630:825f75ca301e 669 * @brief Initialize the UART wake-up from stop mode parameters when triggered by address detection.
mbed_official 630:825f75ca301e 670 * @param huart: UART handle.
mbed_official 630:825f75ca301e 671 * @param WakeUpSelection: UART wake up from stop mode parameters.
mbed_official 630:825f75ca301e 672 * @retval None
mbed_official 630:825f75ca301e 673 */
mbed_official 630:825f75ca301e 674 static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
mbed_official 441:d2c15dda23c1 675 {
mbed_official 441:d2c15dda23c1 676 /* Check parmeters */
mbed_official 441:d2c15dda23c1 677 assert_param(IS_UART_WAKEUP_INSTANCE(huart->Instance));
mbed_official 441:d2c15dda23c1 678 assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength));
mbed_official 441:d2c15dda23c1 679
mbed_official 441:d2c15dda23c1 680 /* Set the USART address length */
mbed_official 441:d2c15dda23c1 681 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength);
mbed_official 441:d2c15dda23c1 682
mbed_official 441:d2c15dda23c1 683 /* Set the USART address node */
mbed_official 441:d2c15dda23c1 684 MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS));
mbed_official 441:d2c15dda23c1 685 }
mbed_official 441:d2c15dda23c1 686 #endif /* !defined(STM32F030x6) && !defined(STM32F030x8)&& !defined(STM32F070xB)&& !defined(STM32F070x6)&& !defined(STM32F030xC) */
mbed_official 441: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****/