mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

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

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

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

Import librarymbed

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

Committer:
mbed_official
Date:
Wed Jul 01 09:45:11 2015 +0100
Revision:
579:53297373a894
Parent:
441:d2c15dda23c1
Child:
630:825f75ca301e
Synchronized with git revision d5b4d2ab9c47edb4dc5776e7177b0c2263459081

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

Initial version of drivers for SAMR21

Who changed what in which revision?

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