mbed library sources

Fork of mbed-src by mbed official

Committer:
moirans2
Date:
Wed Jan 14 20:53:08 2015 +0000
Revision:
445:9a3ffe6cfa19
Parent:
441:d2c15dda23c1
internal clock stm32L051

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****/