mbed library sources

Dependents:   frdm_kl05z_gpio_test

Fork of mbed-src by mbed official

Committer:
shaoziyang
Date:
Sat Sep 13 14:25:46 2014 +0000
Revision:
323:9e901b0a5aa1
Parent:
235:685d5f11838f
test with CLOCK_SETUP = 0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 235:685d5f11838f 1 /**
mbed_official 235:685d5f11838f 2 ******************************************************************************
mbed_official 235:685d5f11838f 3 * @file stm32f4xx_hal_uart.c
mbed_official 235:685d5f11838f 4 * @author MCD Application Team
mbed_official 235:685d5f11838f 5 * @version V1.1.0
mbed_official 235:685d5f11838f 6 * @date 19-June-2014
mbed_official 235:685d5f11838f 7 * @brief UART HAL module driver.
mbed_official 235:685d5f11838f 8 * This file provides firmware functions to manage the following
mbed_official 235:685d5f11838f 9 * functionalities of the Universal Asynchronous Receiver Transmitter (UART) peripheral:
mbed_official 235:685d5f11838f 10 * + Initialization and de-initialization functions
mbed_official 235:685d5f11838f 11 * + IO operation functions
mbed_official 235:685d5f11838f 12 * + Peripheral Control functions
mbed_official 235:685d5f11838f 13 * + Peripheral State and Errors functions
mbed_official 235:685d5f11838f 14 *
mbed_official 235:685d5f11838f 15 @verbatim
mbed_official 235:685d5f11838f 16 ==============================================================================
mbed_official 235:685d5f11838f 17 ##### How to use this driver #####
mbed_official 235:685d5f11838f 18 ==============================================================================
mbed_official 235:685d5f11838f 19 [..]
mbed_official 235:685d5f11838f 20 The UART HAL driver can be used as follows:
mbed_official 235:685d5f11838f 21
mbed_official 235:685d5f11838f 22 (#) Declare a UART_HandleTypeDef handle structure.
mbed_official 235:685d5f11838f 23
mbed_official 235:685d5f11838f 24 (#) Initialize the UART low level resources by implementing the HAL_UART_MspInit() API:
mbed_official 235:685d5f11838f 25 (##) Enable the USARTx interface clock.
mbed_official 235:685d5f11838f 26 (##) UART pins configuration:
mbed_official 235:685d5f11838f 27 (+++) Enable the clock for the UART GPIOs.
mbed_official 235:685d5f11838f 28 (+++) Configure these UART pins as alternate function pull-up.
mbed_official 235:685d5f11838f 29 (##) NVIC configuration if you need to use interrupt process (HAL_UART_Transmit_IT()
mbed_official 235:685d5f11838f 30 and HAL_UART_Receive_IT() APIs):
mbed_official 235:685d5f11838f 31 (+++) Configure the USARTx interrupt priority.
mbed_official 235:685d5f11838f 32 (+++) Enable the NVIC USART IRQ handle.
mbed_official 235:685d5f11838f 33 (##) DMA Configuration if you need to use DMA process (HAL_UART_Transmit_DMA()
mbed_official 235:685d5f11838f 34 and HAL_UART_Receive_DMA() APIs):
mbed_official 235:685d5f11838f 35 (+++) Declare a DMA handle structure for the Tx/Rx stream.
mbed_official 235:685d5f11838f 36 (+++) Enable the DMAx interface clock.
mbed_official 235:685d5f11838f 37 (+++) Configure the declared DMA handle structure with the required
mbed_official 235:685d5f11838f 38 Tx/Rx parameters.
mbed_official 235:685d5f11838f 39 (+++) Configure the DMA Tx/Rx Stream.
mbed_official 235:685d5f11838f 40 (+++) Associate the initialized DMA handle to the UART DMA Tx/Rx handle.
mbed_official 235:685d5f11838f 41 (+++) Configure the priority and enable the NVIC for the transfer complete
mbed_official 235:685d5f11838f 42 interrupt on the DMA Tx/Rx Stream.
mbed_official 235:685d5f11838f 43
mbed_official 235:685d5f11838f 44 (#) Program the Baud Rate, Word Length, Stop Bit, Parity, Hardware
mbed_official 235:685d5f11838f 45 flow control and Mode(Receiver/Transmitter) in the Init structure.
mbed_official 235:685d5f11838f 46
mbed_official 235:685d5f11838f 47 (#) For the UART asynchronous mode, initialize the UART registers by calling
mbed_official 235:685d5f11838f 48 the HAL_UART_Init() API.
mbed_official 235:685d5f11838f 49
mbed_official 235:685d5f11838f 50 (#) For the UART Half duplex mode, initialize the UART registers by calling
mbed_official 235:685d5f11838f 51 the HAL_HalfDuplex_Init() API.
mbed_official 235:685d5f11838f 52
mbed_official 235:685d5f11838f 53 (#) For the LIN mode, initialize the UART registers by calling the HAL_LIN_Init() API.
mbed_official 235:685d5f11838f 54
mbed_official 235:685d5f11838f 55 (#) For the Multi-Processor mode, initialize the UART registers by calling
mbed_official 235:685d5f11838f 56 the HAL_MultiProcessor_Init() API.
mbed_official 235:685d5f11838f 57
mbed_official 235:685d5f11838f 58 [..]
mbed_official 235:685d5f11838f 59 (@) The specific UART interrupts (Transmission complete interrupt,
mbed_official 235:685d5f11838f 60 RXNE interrupt and Error Interrupts) will be managed using the macros
mbed_official 235:685d5f11838f 61 __HAL_UART_ENABLE_IT() and __HAL_UART_DISABLE_IT() inside the transmit
mbed_official 235:685d5f11838f 62 and receive process.
mbed_official 235:685d5f11838f 63
mbed_official 235:685d5f11838f 64 [..]
mbed_official 235:685d5f11838f 65 (@) These APIs (HAL_UART_Init() and HAL_HalfDuplex_Init()) configure also the
mbed_official 235:685d5f11838f 66 low level Hardware GPIO, CLOCK, CORTEX...etc) by calling the customed
mbed_official 235:685d5f11838f 67 HAL_UART_MspInit() API.
mbed_official 235:685d5f11838f 68
mbed_official 235:685d5f11838f 69 [..]
mbed_official 235:685d5f11838f 70 Three operation modes are available within this driver :
mbed_official 235:685d5f11838f 71
mbed_official 235:685d5f11838f 72 *** Polling mode IO operation ***
mbed_official 235:685d5f11838f 73 =================================
mbed_official 235:685d5f11838f 74 [..]
mbed_official 235:685d5f11838f 75 (+) Send an amount of data in blocking mode using HAL_UART_Transmit()
mbed_official 235:685d5f11838f 76 (+) Receive an amount of data in blocking mode using HAL_UART_Receive()
mbed_official 235:685d5f11838f 77
mbed_official 235:685d5f11838f 78 *** Interrupt mode IO operation ***
mbed_official 235:685d5f11838f 79 ===================================
mbed_official 235:685d5f11838f 80 [..]
mbed_official 235:685d5f11838f 81 (+) Send an amount of data in non blocking mode using HAL_UART_Transmit_IT()
mbed_official 235:685d5f11838f 82 (+) At transmission end of half transfer HAL_UART_TxHalfCpltCallback is executed and user can
mbed_official 235:685d5f11838f 83 add his own code by customization of function pointer HAL_UART_TxHalfCpltCallback
mbed_official 235:685d5f11838f 84 (+) At transmission end of transfer HAL_UART_TxCpltCallback is executed and user can
mbed_official 235:685d5f11838f 85 add his own code by customization of function pointer HAL_UART_TxCpltCallback
mbed_official 235:685d5f11838f 86 (+) Receive an amount of data in non blocking mode using HAL_UART_Receive_IT()
mbed_official 235:685d5f11838f 87 (+) At reception end of half transfer HAL_UART_RxHalfCpltCallback is executed and user can
mbed_official 235:685d5f11838f 88 add his own code by customization of function pointer HAL_UART_RxHalfCpltCallback
mbed_official 235:685d5f11838f 89 (+) At reception end of transfer HAL_UART_RxCpltCallback is executed and user can
mbed_official 235:685d5f11838f 90 add his own code by customization of function pointer HAL_UART_RxCpltCallback
mbed_official 235:685d5f11838f 91 (+) In case of transfer Error, HAL_UART_ErrorCallback() function is executed and user can
mbed_official 235:685d5f11838f 92 add his own code by customization of function pointer HAL_UART_ErrorCallback
mbed_official 235:685d5f11838f 93
mbed_official 235:685d5f11838f 94 *** DMA mode IO operation ***
mbed_official 235:685d5f11838f 95 ==============================
mbed_official 235:685d5f11838f 96 [..]
mbed_official 235:685d5f11838f 97 (+) Send an amount of data in non blocking mode (DMA) using HAL_UART_Transmit_DMA()
mbed_official 235:685d5f11838f 98 (+) At transmission end of half transfer HAL_UART_TxHalfCpltCallback is executed and user can
mbed_official 235:685d5f11838f 99 add his own code by customization of function pointer HAL_UART_TxHalfCpltCallback
mbed_official 235:685d5f11838f 100 (+) At transmission end of transfer HAL_UART_TxCpltCallback is executed and user can
mbed_official 235:685d5f11838f 101 add his own code by customization of function pointer HAL_UART_TxCpltCallback
mbed_official 235:685d5f11838f 102 (+) Receive an amount of data in non blocking mode (DMA) using HAL_UART_Receive_DMA()
mbed_official 235:685d5f11838f 103 (+) At reception end of half transfer HAL_UART_RxHalfCpltCallback is executed and user can
mbed_official 235:685d5f11838f 104 add his own code by customization of function pointer HAL_UART_RxHalfCpltCallback
mbed_official 235:685d5f11838f 105 (+) At reception end of transfer HAL_UART_RxCpltCallback is executed and user can
mbed_official 235:685d5f11838f 106 add his own code by customization of function pointer HAL_UART_RxCpltCallback
mbed_official 235:685d5f11838f 107 (+) In case of transfer Error, HAL_UART_ErrorCallback() function is executed and user can
mbed_official 235:685d5f11838f 108 add his own code by customization of function pointer HAL_UART_ErrorCallback
mbed_official 235:685d5f11838f 109 (+) Pause the DMA Transfer using HAL_UART_DMAPause()
mbed_official 235:685d5f11838f 110 (+) Resume the DMA Transfer using HAL_UART_DMAResume()
mbed_official 235:685d5f11838f 111 (+) Stop the DMA Transfer using HAL_UART_DMAStop()
mbed_official 235:685d5f11838f 112
mbed_official 235:685d5f11838f 113 *** UART HAL driver macros list ***
mbed_official 235:685d5f11838f 114 =============================================
mbed_official 235:685d5f11838f 115 [..]
mbed_official 235:685d5f11838f 116 Below the list of most used macros in UART HAL driver.
mbed_official 235:685d5f11838f 117
mbed_official 235:685d5f11838f 118 (+) __HAL_UART_ENABLE: Enable the UART peripheral
mbed_official 235:685d5f11838f 119 (+) __HAL_UART_DISABLE: Disable the UART peripheral
mbed_official 235:685d5f11838f 120 (+) __HAL_UART_GET_FLAG : Check whether the specified UART flag is set or not
mbed_official 235:685d5f11838f 121 (+) __HAL_UART_CLEAR_FLAG : Clear the specified UART pending flag
mbed_official 235:685d5f11838f 122 (+) __HAL_UART_ENABLE_IT: Enable the specified UART interrupt
mbed_official 235:685d5f11838f 123 (+) __HAL_UART_DISABLE_IT: Disable the specified UART interrupt
mbed_official 235:685d5f11838f 124
mbed_official 235:685d5f11838f 125 [..]
mbed_official 235:685d5f11838f 126 (@) You can refer to the UART HAL driver header file for more useful macros
mbed_official 235:685d5f11838f 127
mbed_official 235:685d5f11838f 128 @endverbatim
mbed_official 235:685d5f11838f 129 ******************************************************************************
mbed_official 235:685d5f11838f 130 * @attention
mbed_official 235:685d5f11838f 131 *
mbed_official 235:685d5f11838f 132 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
mbed_official 235:685d5f11838f 133 *
mbed_official 235:685d5f11838f 134 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 235:685d5f11838f 135 * are permitted provided that the following conditions are met:
mbed_official 235:685d5f11838f 136 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 235:685d5f11838f 137 * this list of conditions and the following disclaimer.
mbed_official 235:685d5f11838f 138 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 235:685d5f11838f 139 * this list of conditions and the following disclaimer in the documentation
mbed_official 235:685d5f11838f 140 * and/or other materials provided with the distribution.
mbed_official 235:685d5f11838f 141 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 235:685d5f11838f 142 * may be used to endorse or promote products derived from this software
mbed_official 235:685d5f11838f 143 * without specific prior written permission.
mbed_official 235:685d5f11838f 144 *
mbed_official 235:685d5f11838f 145 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 235:685d5f11838f 146 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 235:685d5f11838f 147 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 235:685d5f11838f 148 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 235:685d5f11838f 149 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 235:685d5f11838f 150 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 235:685d5f11838f 151 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 235:685d5f11838f 152 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 235:685d5f11838f 153 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 235:685d5f11838f 154 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 235:685d5f11838f 155 *
mbed_official 235:685d5f11838f 156 ******************************************************************************
mbed_official 235:685d5f11838f 157 */
mbed_official 235:685d5f11838f 158
mbed_official 235:685d5f11838f 159 /* Includes ------------------------------------------------------------------*/
mbed_official 235:685d5f11838f 160 #include "stm32f4xx_hal.h"
mbed_official 235:685d5f11838f 161
mbed_official 235:685d5f11838f 162 /** @addtogroup STM32F4xx_HAL_Driver
mbed_official 235:685d5f11838f 163 * @{
mbed_official 235:685d5f11838f 164 */
mbed_official 235:685d5f11838f 165
mbed_official 235:685d5f11838f 166 /** @defgroup UART
mbed_official 235:685d5f11838f 167 * @brief HAL UART module driver
mbed_official 235:685d5f11838f 168 * @{
mbed_official 235:685d5f11838f 169 */
mbed_official 235:685d5f11838f 170 #ifdef HAL_UART_MODULE_ENABLED
mbed_official 235:685d5f11838f 171
mbed_official 235:685d5f11838f 172 /* Private typedef -----------------------------------------------------------*/
mbed_official 235:685d5f11838f 173 /* Private define ------------------------------------------------------------*/
mbed_official 235:685d5f11838f 174 #define UART_TIMEOUT_VALUE 22000
mbed_official 235:685d5f11838f 175 /* Private macro -------------------------------------------------------------*/
mbed_official 235:685d5f11838f 176 /* Private variables ---------------------------------------------------------*/
mbed_official 235:685d5f11838f 177 /* Private function prototypes -----------------------------------------------*/
mbed_official 235:685d5f11838f 178 static void UART_SetConfig (UART_HandleTypeDef *huart);
mbed_official 235:685d5f11838f 179 static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart);
mbed_official 235:685d5f11838f 180 static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart);
mbed_official 235:685d5f11838f 181 static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 182 static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 183 static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 184 static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 185 static void UART_DMAError(DMA_HandleTypeDef *hdma);
mbed_official 235:685d5f11838f 186 static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Timeout);
mbed_official 235:685d5f11838f 187
mbed_official 235:685d5f11838f 188 /* Private functions ---------------------------------------------------------*/
mbed_official 235:685d5f11838f 189
mbed_official 235:685d5f11838f 190 /** @defgroup UART_Private_Functions
mbed_official 235:685d5f11838f 191 * @{
mbed_official 235:685d5f11838f 192 */
mbed_official 235:685d5f11838f 193
mbed_official 235:685d5f11838f 194 /** @defgroup UART_Group1 Initialization and de-initialization functions
mbed_official 235:685d5f11838f 195 * @brief Initialization and Configuration functions
mbed_official 235:685d5f11838f 196 *
mbed_official 235:685d5f11838f 197 @verbatim
mbed_official 235:685d5f11838f 198 ===============================================================================
mbed_official 235:685d5f11838f 199 ##### Initialization and Configuration functions #####
mbed_official 235:685d5f11838f 200 ===============================================================================
mbed_official 235:685d5f11838f 201 [..]
mbed_official 235:685d5f11838f 202 This subsection provides a set of functions allowing to initialize the USARTx or the UARTy
mbed_official 235:685d5f11838f 203 in asynchronous mode.
mbed_official 235:685d5f11838f 204 (+) For the asynchronous mode only these parameters can be configured:
mbed_official 235:685d5f11838f 205 (++) Baud Rate
mbed_official 235:685d5f11838f 206 (++) Word Length
mbed_official 235:685d5f11838f 207 (++) Stop Bit
mbed_official 235:685d5f11838f 208 (++) Parity: If the parity is enabled, then the MSB bit of the data written
mbed_official 235:685d5f11838f 209 in the data register is transmitted but is changed by the parity bit.
mbed_official 235:685d5f11838f 210 Depending on the frame length defined by the M bit (8-bits or 9-bits),
mbed_official 235:685d5f11838f 211 please refer to Reference manual for possible UART frame formats.
mbed_official 235:685d5f11838f 212 (++) Hardware flow control
mbed_official 235:685d5f11838f 213 (++) Receiver/transmitter modes
mbed_official 235:685d5f11838f 214 (++) Over Sampling Methode
mbed_official 235:685d5f11838f 215 [..]
mbed_official 235:685d5f11838f 216 The HAL_UART_Init(), HAL_HalfDuplex_Init(), HAL_LIN_Init() and HAL_MultiProcessor_Init() APIs
mbed_official 235:685d5f11838f 217 follow respectively the UART asynchronous, UART Half duplex, LIN and Multi-Processor
mbed_official 235:685d5f11838f 218 configuration procedures (details for the procedures are available in reference manual (RM0329)).
mbed_official 235:685d5f11838f 219
mbed_official 235:685d5f11838f 220 @endverbatim
mbed_official 235:685d5f11838f 221 * @{
mbed_official 235:685d5f11838f 222 */
mbed_official 235:685d5f11838f 223
mbed_official 235:685d5f11838f 224 /**
mbed_official 235:685d5f11838f 225 * @brief Initializes the UART mode according to the specified parameters in
mbed_official 235:685d5f11838f 226 * the UART_InitTypeDef and create the associated handle.
mbed_official 235:685d5f11838f 227 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 228 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 229 * @retval HAL status
mbed_official 235:685d5f11838f 230 */
mbed_official 235:685d5f11838f 231 HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 232 {
mbed_official 235:685d5f11838f 233 /* Check the UART handle allocation */
mbed_official 235:685d5f11838f 234 if(huart == NULL)
mbed_official 235:685d5f11838f 235 {
mbed_official 235:685d5f11838f 236 return HAL_ERROR;
mbed_official 235:685d5f11838f 237 }
mbed_official 235:685d5f11838f 238
mbed_official 235:685d5f11838f 239 if(huart->Init.HwFlowCtl != UART_HWCONTROL_NONE)
mbed_official 235:685d5f11838f 240 {
mbed_official 235:685d5f11838f 241 /* Check the parameters */
mbed_official 235:685d5f11838f 242 assert_param(IS_UART_HWFLOW_INSTANCE(huart->Instance));
mbed_official 235:685d5f11838f 243 }
mbed_official 235:685d5f11838f 244 else
mbed_official 235:685d5f11838f 245 {
mbed_official 235:685d5f11838f 246 /* Check the parameters */
mbed_official 235:685d5f11838f 247 assert_param(IS_UART_INSTANCE(huart->Instance));
mbed_official 235:685d5f11838f 248 }
mbed_official 235:685d5f11838f 249
mbed_official 235:685d5f11838f 250 if(huart->State == HAL_UART_STATE_RESET)
mbed_official 235:685d5f11838f 251 {
mbed_official 235:685d5f11838f 252 /* Init the low level hardware */
mbed_official 235:685d5f11838f 253 HAL_UART_MspInit(huart);
mbed_official 235:685d5f11838f 254 }
mbed_official 235:685d5f11838f 255
mbed_official 235:685d5f11838f 256 huart->State = HAL_UART_STATE_BUSY;
mbed_official 235:685d5f11838f 257
mbed_official 235:685d5f11838f 258 /* Disable the peripheral */
mbed_official 235:685d5f11838f 259 __HAL_UART_DISABLE(huart);
mbed_official 235:685d5f11838f 260
mbed_official 235:685d5f11838f 261 /* Set the UART Communication parameters */
mbed_official 235:685d5f11838f 262 UART_SetConfig(huart);
mbed_official 235:685d5f11838f 263
mbed_official 235:685d5f11838f 264 /* In asynchronous mode, the following bits must be kept cleared:
mbed_official 235:685d5f11838f 265 - LINEN and CLKEN bits in the USART_CR2 register,
mbed_official 235:685d5f11838f 266 - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/
mbed_official 235:685d5f11838f 267 huart->Instance->CR2 &= ~(USART_CR2_LINEN | USART_CR2_CLKEN);
mbed_official 235:685d5f11838f 268 huart->Instance->CR3 &= ~(USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN);
mbed_official 235:685d5f11838f 269
mbed_official 235:685d5f11838f 270 /* Enable the peripheral */
mbed_official 235:685d5f11838f 271 __HAL_UART_ENABLE(huart);
mbed_official 235:685d5f11838f 272
mbed_official 235:685d5f11838f 273 /* Initialize the UART state */
mbed_official 235:685d5f11838f 274 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 235:685d5f11838f 275 huart->State= HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 276
mbed_official 235:685d5f11838f 277 return HAL_OK;
mbed_official 235:685d5f11838f 278 }
mbed_official 235:685d5f11838f 279
mbed_official 235:685d5f11838f 280 /**
mbed_official 235:685d5f11838f 281 * @brief Initializes the half-duplex mode according to the specified
mbed_official 235:685d5f11838f 282 * parameters in the UART_InitTypeDef and create the associated handle.
mbed_official 235:685d5f11838f 283 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 284 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 285 * @retval HAL status
mbed_official 235:685d5f11838f 286 */
mbed_official 235:685d5f11838f 287 HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 288 {
mbed_official 235:685d5f11838f 289 /* Check the UART handle allocation */
mbed_official 235:685d5f11838f 290 if(huart == NULL)
mbed_official 235:685d5f11838f 291 {
mbed_official 235:685d5f11838f 292 return HAL_ERROR;
mbed_official 235:685d5f11838f 293 }
mbed_official 235:685d5f11838f 294
mbed_official 235:685d5f11838f 295 if(huart->State == HAL_UART_STATE_RESET)
mbed_official 235:685d5f11838f 296 {
mbed_official 235:685d5f11838f 297 /* Init the low level hardware */
mbed_official 235:685d5f11838f 298 HAL_UART_MspInit(huart);
mbed_official 235:685d5f11838f 299 }
mbed_official 235:685d5f11838f 300
mbed_official 235:685d5f11838f 301 huart->State = HAL_UART_STATE_BUSY;
mbed_official 235:685d5f11838f 302
mbed_official 235:685d5f11838f 303 /* Disable the peripheral */
mbed_official 235:685d5f11838f 304 __HAL_UART_DISABLE(huart);
mbed_official 235:685d5f11838f 305
mbed_official 235:685d5f11838f 306 /* Set the UART Communication parameters */
mbed_official 235:685d5f11838f 307 UART_SetConfig(huart);
mbed_official 235:685d5f11838f 308
mbed_official 235:685d5f11838f 309 /* In half-duplex mode, the following bits must be kept cleared:
mbed_official 235:685d5f11838f 310 - LINEN and CLKEN bits in the USART_CR2 register,
mbed_official 235:685d5f11838f 311 - SCEN and IREN bits in the USART_CR3 register.*/
mbed_official 235:685d5f11838f 312 huart->Instance->CR2 &= ~(USART_CR2_LINEN | USART_CR2_CLKEN);
mbed_official 235:685d5f11838f 313 huart->Instance->CR3 &= ~(USART_CR3_IREN | USART_CR3_SCEN);
mbed_official 235:685d5f11838f 314
mbed_official 235:685d5f11838f 315 /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */
mbed_official 235:685d5f11838f 316 huart->Instance->CR3 |= USART_CR3_HDSEL;
mbed_official 235:685d5f11838f 317
mbed_official 235:685d5f11838f 318 /* Enable the peripheral */
mbed_official 235:685d5f11838f 319 __HAL_UART_ENABLE(huart);
mbed_official 235:685d5f11838f 320
mbed_official 235:685d5f11838f 321 /* Initialize the UART state*/
mbed_official 235:685d5f11838f 322 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 235:685d5f11838f 323 huart->State= HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 324
mbed_official 235:685d5f11838f 325 return HAL_OK;
mbed_official 235:685d5f11838f 326 }
mbed_official 235:685d5f11838f 327
mbed_official 235:685d5f11838f 328 /**
mbed_official 235:685d5f11838f 329 * @brief Initializes the LIN mode according to the specified
mbed_official 235:685d5f11838f 330 * parameters in the UART_InitTypeDef and create the associated handle.
mbed_official 235:685d5f11838f 331 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 332 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 333 * @param BreakDetectLength: Specifies the LIN break detection length.
mbed_official 235:685d5f11838f 334 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 335 * @arg UART_LINBREAKDETECTLENGTH_10B: 10-bit break detection
mbed_official 235:685d5f11838f 336 * @arg UART_LINBREAKDETECTLENGTH_11B: 11-bit break detection
mbed_official 235:685d5f11838f 337 * @retval HAL status
mbed_official 235:685d5f11838f 338 */
mbed_official 235:685d5f11838f 339 HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength)
mbed_official 235:685d5f11838f 340 {
mbed_official 235:685d5f11838f 341 /* Check the UART handle allocation */
mbed_official 235:685d5f11838f 342 if(huart == NULL)
mbed_official 235:685d5f11838f 343 {
mbed_official 235:685d5f11838f 344 return HAL_ERROR;
mbed_official 235:685d5f11838f 345 }
mbed_official 235:685d5f11838f 346 /* Check the Break detection length parameter */
mbed_official 235:685d5f11838f 347 assert_param(IS_UART_LIN_BREAK_DETECT_LENGTH(BreakDetectLength));
mbed_official 235:685d5f11838f 348
mbed_official 235:685d5f11838f 349 if(huart->State == HAL_UART_STATE_RESET)
mbed_official 235:685d5f11838f 350 {
mbed_official 235:685d5f11838f 351 /* Init the low level hardware */
mbed_official 235:685d5f11838f 352 HAL_UART_MspInit(huart);
mbed_official 235:685d5f11838f 353 }
mbed_official 235:685d5f11838f 354
mbed_official 235:685d5f11838f 355 huart->State = HAL_UART_STATE_BUSY;
mbed_official 235:685d5f11838f 356
mbed_official 235:685d5f11838f 357 /* Disable the peripheral */
mbed_official 235:685d5f11838f 358 __HAL_UART_DISABLE(huart);
mbed_official 235:685d5f11838f 359
mbed_official 235:685d5f11838f 360 /* Set the UART Communication parameters */
mbed_official 235:685d5f11838f 361 UART_SetConfig(huart);
mbed_official 235:685d5f11838f 362
mbed_official 235:685d5f11838f 363 /* In LIN mode, the following bits must be kept cleared:
mbed_official 235:685d5f11838f 364 - LINEN and CLKEN bits in the USART_CR2 register,
mbed_official 235:685d5f11838f 365 - SCEN and IREN bits in the USART_CR3 register.*/
mbed_official 235:685d5f11838f 366 huart->Instance->CR2 &= ~(USART_CR2_CLKEN);
mbed_official 235:685d5f11838f 367 huart->Instance->CR3 &= ~(USART_CR3_HDSEL | USART_CR3_IREN | USART_CR3_SCEN);
mbed_official 235:685d5f11838f 368
mbed_official 235:685d5f11838f 369 /* Enable the LIN mode by setting the LINEN bit in the CR2 register */
mbed_official 235:685d5f11838f 370 huart->Instance->CR2 |= USART_CR2_LINEN;
mbed_official 235:685d5f11838f 371
mbed_official 235:685d5f11838f 372 /* Set the USART LIN Break detection length. */
mbed_official 235:685d5f11838f 373 huart->Instance->CR2 &= ~(USART_CR2_LBDL);
mbed_official 235:685d5f11838f 374 huart->Instance->CR2 |= BreakDetectLength;
mbed_official 235:685d5f11838f 375
mbed_official 235:685d5f11838f 376 /* Enable the peripheral */
mbed_official 235:685d5f11838f 377 __HAL_UART_ENABLE(huart);
mbed_official 235:685d5f11838f 378
mbed_official 235:685d5f11838f 379 /* Initialize the UART state*/
mbed_official 235:685d5f11838f 380 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 235:685d5f11838f 381 huart->State= HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 382
mbed_official 235:685d5f11838f 383 return HAL_OK;
mbed_official 235:685d5f11838f 384 }
mbed_official 235:685d5f11838f 385
mbed_official 235:685d5f11838f 386 /**
mbed_official 235:685d5f11838f 387 * @brief Initializes the Multi-Processor mode according to the specified
mbed_official 235:685d5f11838f 388 * parameters in the UART_InitTypeDef and create the associated handle.
mbed_official 235:685d5f11838f 389 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 390 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 391 * @param Address: USART address
mbed_official 235:685d5f11838f 392 * @param WakeUpMethode: specifies the USART wakeup method.
mbed_official 235:685d5f11838f 393 * This parameter can be one of the following values:
mbed_official 235:685d5f11838f 394 * @arg UART_WAKEUPMETHODE_IDLELINE: Wakeup by an idle line detection
mbed_official 235:685d5f11838f 395 * @arg UART_WAKEUPMETHODE_ADDRESSMARK: Wakeup by an address mark
mbed_official 235:685d5f11838f 396 * @retval HAL status
mbed_official 235:685d5f11838f 397 */
mbed_official 235:685d5f11838f 398 HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethode)
mbed_official 235:685d5f11838f 399 {
mbed_official 235:685d5f11838f 400 /* Check the UART handle allocation */
mbed_official 235:685d5f11838f 401 if(huart == NULL)
mbed_official 235:685d5f11838f 402 {
mbed_official 235:685d5f11838f 403 return HAL_ERROR;
mbed_official 235:685d5f11838f 404 }
mbed_official 235:685d5f11838f 405
mbed_official 235:685d5f11838f 406 /* Check the Address & wake up method parameters */
mbed_official 235:685d5f11838f 407 assert_param(IS_UART_WAKEUPMETHODE(WakeUpMethode));
mbed_official 235:685d5f11838f 408 assert_param(IS_UART_ADDRESS(Address));
mbed_official 235:685d5f11838f 409
mbed_official 235:685d5f11838f 410 if(huart->State == HAL_UART_STATE_RESET)
mbed_official 235:685d5f11838f 411 {
mbed_official 235:685d5f11838f 412 /* Init the low level hardware */
mbed_official 235:685d5f11838f 413 HAL_UART_MspInit(huart);
mbed_official 235:685d5f11838f 414 }
mbed_official 235:685d5f11838f 415
mbed_official 235:685d5f11838f 416 huart->State = HAL_UART_STATE_BUSY;
mbed_official 235:685d5f11838f 417
mbed_official 235:685d5f11838f 418 /* Disable the peripheral */
mbed_official 235:685d5f11838f 419 __HAL_UART_DISABLE(huart);
mbed_official 235:685d5f11838f 420
mbed_official 235:685d5f11838f 421 /* Set the UART Communication parameters */
mbed_official 235:685d5f11838f 422 UART_SetConfig(huart);
mbed_official 235:685d5f11838f 423
mbed_official 235:685d5f11838f 424 /* In Multi-Processor mode, the following bits must be kept cleared:
mbed_official 235:685d5f11838f 425 - LINEN and CLKEN bits in the USART_CR2 register,
mbed_official 235:685d5f11838f 426 - SCEN, HDSEL and IREN bits in the USART_CR3 register */
mbed_official 235:685d5f11838f 427 huart->Instance->CR2 &= ~(USART_CR2_LINEN | USART_CR2_CLKEN);
mbed_official 235:685d5f11838f 428 huart->Instance->CR3 &= ~(USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN);
mbed_official 235:685d5f11838f 429
mbed_official 235:685d5f11838f 430 /* Clear the USART address */
mbed_official 235:685d5f11838f 431 huart->Instance->CR2 &= ~(USART_CR2_ADD);
mbed_official 235:685d5f11838f 432 /* Set the USART address node */
mbed_official 235:685d5f11838f 433 huart->Instance->CR2 |= Address;
mbed_official 235:685d5f11838f 434
mbed_official 235:685d5f11838f 435 /* Set the wake up methode by setting the WAKE bit in the CR1 register */
mbed_official 235:685d5f11838f 436 huart->Instance->CR1 &= ~(USART_CR1_WAKE);
mbed_official 235:685d5f11838f 437 huart->Instance->CR1 |= WakeUpMethode;
mbed_official 235:685d5f11838f 438
mbed_official 235:685d5f11838f 439 /* Enable the peripheral */
mbed_official 235:685d5f11838f 440 __HAL_UART_ENABLE(huart);
mbed_official 235:685d5f11838f 441
mbed_official 235:685d5f11838f 442 /* Initialize the UART state */
mbed_official 235:685d5f11838f 443 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 235:685d5f11838f 444 huart->State= HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 445
mbed_official 235:685d5f11838f 446 return HAL_OK;
mbed_official 235:685d5f11838f 447 }
mbed_official 235:685d5f11838f 448
mbed_official 235:685d5f11838f 449 /**
mbed_official 235:685d5f11838f 450 * @brief DeInitializes the UART peripheral.
mbed_official 235:685d5f11838f 451 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 452 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 453 * @retval HAL status
mbed_official 235:685d5f11838f 454 */
mbed_official 235:685d5f11838f 455 HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 456 {
mbed_official 235:685d5f11838f 457 /* Check the UART handle allocation */
mbed_official 235:685d5f11838f 458 if(huart == NULL)
mbed_official 235:685d5f11838f 459 {
mbed_official 235:685d5f11838f 460 return HAL_ERROR;
mbed_official 235:685d5f11838f 461 }
mbed_official 235:685d5f11838f 462
mbed_official 235:685d5f11838f 463 /* Check the parameters */
mbed_official 235:685d5f11838f 464 assert_param(IS_UART_INSTANCE(huart->Instance));
mbed_official 235:685d5f11838f 465
mbed_official 235:685d5f11838f 466 huart->State = HAL_UART_STATE_BUSY;
mbed_official 235:685d5f11838f 467
mbed_official 235:685d5f11838f 468 /* DeInit the low level hardware */
mbed_official 235:685d5f11838f 469 HAL_UART_MspDeInit(huart);
mbed_official 235:685d5f11838f 470
mbed_official 235:685d5f11838f 471 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 235:685d5f11838f 472 huart->State = HAL_UART_STATE_RESET;
mbed_official 235:685d5f11838f 473
mbed_official 235:685d5f11838f 474 /* Process Lock */
mbed_official 235:685d5f11838f 475 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 476
mbed_official 235:685d5f11838f 477 return HAL_OK;
mbed_official 235:685d5f11838f 478 }
mbed_official 235:685d5f11838f 479
mbed_official 235:685d5f11838f 480 /**
mbed_official 235:685d5f11838f 481 * @brief UART MSP Init.
mbed_official 235:685d5f11838f 482 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 483 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 484 * @retval None
mbed_official 235:685d5f11838f 485 */
mbed_official 235:685d5f11838f 486 __weak void HAL_UART_MspInit(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 487 {
mbed_official 235:685d5f11838f 488 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 489 the HAL_UART_MspInit could be implemented in the user file
mbed_official 235:685d5f11838f 490 */
mbed_official 235:685d5f11838f 491 }
mbed_official 235:685d5f11838f 492
mbed_official 235:685d5f11838f 493 /**
mbed_official 235:685d5f11838f 494 * @brief UART MSP DeInit.
mbed_official 235:685d5f11838f 495 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 496 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 497 * @retval None
mbed_official 235:685d5f11838f 498 */
mbed_official 235:685d5f11838f 499 __weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 500 {
mbed_official 235:685d5f11838f 501 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 502 the HAL_UART_MspDeInit could be implemented in the user file
mbed_official 235:685d5f11838f 503 */
mbed_official 235:685d5f11838f 504 }
mbed_official 235:685d5f11838f 505
mbed_official 235:685d5f11838f 506 /**
mbed_official 235:685d5f11838f 507 * @}
mbed_official 235:685d5f11838f 508 */
mbed_official 235:685d5f11838f 509
mbed_official 235:685d5f11838f 510 /** @defgroup UART_Group2 IO operation functions
mbed_official 235:685d5f11838f 511 * @brief UART Transmit and Receive functions
mbed_official 235:685d5f11838f 512 *
mbed_official 235:685d5f11838f 513 @verbatim
mbed_official 235:685d5f11838f 514 ==============================================================================
mbed_official 235:685d5f11838f 515 ##### IO operation functions #####
mbed_official 235:685d5f11838f 516 ==============================================================================
mbed_official 235:685d5f11838f 517 [..]
mbed_official 235:685d5f11838f 518 This subsection provides a set of functions allowing to manage the UART asynchronous
mbed_official 235:685d5f11838f 519 and Half duplex data transfers.
mbed_official 235:685d5f11838f 520
mbed_official 235:685d5f11838f 521 (#) There are two modes of transfer:
mbed_official 235:685d5f11838f 522 (++) Blocking mode: The communication is performed in polling mode.
mbed_official 235:685d5f11838f 523 The HAL status of all data processing is returned by the same function
mbed_official 235:685d5f11838f 524 after finishing transfer.
mbed_official 235:685d5f11838f 525 (++) Non blocking mode: The communication is performed using Interrupts
mbed_official 235:685d5f11838f 526 or DMA, these APIs return the HAL status.
mbed_official 235:685d5f11838f 527 The end of the data processing will be indicated through the
mbed_official 235:685d5f11838f 528 dedicated UART IRQ when using Interrupt mode or the DMA IRQ when
mbed_official 235:685d5f11838f 529 using DMA mode.
mbed_official 235:685d5f11838f 530 The HAL_UART_TxCpltCallback(), HAL_UART_RxCpltCallback() user callbacks
mbed_official 235:685d5f11838f 531 will be executed respectivelly at the end of the transmit or receive process.
mbed_official 235:685d5f11838f 532 The HAL_UART_ErrorCallback() user callback will be executed when
mbed_official 235:685d5f11838f 533 a communication error is detected.
mbed_official 235:685d5f11838f 534
mbed_official 235:685d5f11838f 535 (#) Blocking mode APIs are:
mbed_official 235:685d5f11838f 536 (++) HAL_UART_Transmit()
mbed_official 235:685d5f11838f 537 (++) HAL_UART_Receive()
mbed_official 235:685d5f11838f 538
mbed_official 235:685d5f11838f 539 (#) Non Blocking mode APIs with Interrupt are:
mbed_official 235:685d5f11838f 540 (++) HAL_UART_Transmit_IT()
mbed_official 235:685d5f11838f 541 (++) HAL_UART_Receive_IT()
mbed_official 235:685d5f11838f 542 (++) HAL_UART_IRQHandler()
mbed_official 235:685d5f11838f 543
mbed_official 235:685d5f11838f 544 (#) Non Blocking mode functions with DMA are:
mbed_official 235:685d5f11838f 545 (++) HAL_UART_Transmit_DMA()
mbed_official 235:685d5f11838f 546 (++) HAL_UART_Receive_DMA()
mbed_official 235:685d5f11838f 547
mbed_official 235:685d5f11838f 548 (#) A set of Transfer Complete Callbacks are provided in non blocking mode:
mbed_official 235:685d5f11838f 549 (++) HAL_UART_TxCpltCallback()
mbed_official 235:685d5f11838f 550 (++) HAL_UART_RxCpltCallback()
mbed_official 235:685d5f11838f 551 (++) HAL_UART_ErrorCallback()
mbed_official 235:685d5f11838f 552
mbed_official 235:685d5f11838f 553 [..]
mbed_official 235:685d5f11838f 554 (@) In the Half duplex communication, it is forbidden to run the transmit
mbed_official 235:685d5f11838f 555 and receive process in parallel, the UART state HAL_UART_STATE_BUSY_TX_RX
mbed_official 235:685d5f11838f 556 can't be useful.
mbed_official 235:685d5f11838f 557
mbed_official 235:685d5f11838f 558 @endverbatim
mbed_official 235:685d5f11838f 559 * @{
mbed_official 235:685d5f11838f 560 */
mbed_official 235:685d5f11838f 561
mbed_official 235:685d5f11838f 562 /**
mbed_official 235:685d5f11838f 563 * @brief Sends an amount of data in blocking mode.
mbed_official 235:685d5f11838f 564 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 565 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 566 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 567 * @param Size: Amount of data to be sent
mbed_official 235:685d5f11838f 568 * @param Timeout: Timeout duration
mbed_official 235:685d5f11838f 569 * @retval HAL status
mbed_official 235:685d5f11838f 570 */
mbed_official 235:685d5f11838f 571 HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
mbed_official 235:685d5f11838f 572 {
mbed_official 235:685d5f11838f 573 uint16_t* tmp;
mbed_official 235:685d5f11838f 574 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 575
mbed_official 235:685d5f11838f 576 tmp1 = huart->State;
mbed_official 235:685d5f11838f 577 if((tmp1 == HAL_UART_STATE_READY) || (tmp1 == HAL_UART_STATE_BUSY_RX))
mbed_official 235:685d5f11838f 578 {
mbed_official 235:685d5f11838f 579 if((pData == NULL ) || (Size == 0))
mbed_official 235:685d5f11838f 580 {
mbed_official 235:685d5f11838f 581 return HAL_ERROR;
mbed_official 235:685d5f11838f 582 }
mbed_official 235:685d5f11838f 583
mbed_official 235:685d5f11838f 584 /* Process Locked */
mbed_official 235:685d5f11838f 585 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 586
mbed_official 235:685d5f11838f 587 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 235:685d5f11838f 588 /* Check if a non-blocking receive process is ongoing or not */
mbed_official 235:685d5f11838f 589 if(huart->State == HAL_UART_STATE_BUSY_RX)
mbed_official 235:685d5f11838f 590 {
mbed_official 235:685d5f11838f 591 huart->State = HAL_UART_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 592 }
mbed_official 235:685d5f11838f 593 else
mbed_official 235:685d5f11838f 594 {
mbed_official 235:685d5f11838f 595 huart->State = HAL_UART_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 596 }
mbed_official 235:685d5f11838f 597
mbed_official 235:685d5f11838f 598 huart->TxXferSize = Size;
mbed_official 235:685d5f11838f 599 huart->TxXferCount = Size;
mbed_official 235:685d5f11838f 600 while(huart->TxXferCount > 0)
mbed_official 235:685d5f11838f 601 {
mbed_official 235:685d5f11838f 602 huart->TxXferCount--;
mbed_official 235:685d5f11838f 603 if(huart->Init.WordLength == UART_WORDLENGTH_9B)
mbed_official 235:685d5f11838f 604 {
mbed_official 235:685d5f11838f 605 if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, Timeout) != HAL_OK)
mbed_official 235:685d5f11838f 606 {
mbed_official 235:685d5f11838f 607 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 608 }
mbed_official 235:685d5f11838f 609 tmp = (uint16_t*) pData;
mbed_official 235:685d5f11838f 610 huart->Instance->DR = (*tmp & (uint16_t)0x01FF);
mbed_official 235:685d5f11838f 611 if(huart->Init.Parity == UART_PARITY_NONE)
mbed_official 235:685d5f11838f 612 {
mbed_official 235:685d5f11838f 613 pData +=2;
mbed_official 235:685d5f11838f 614 }
mbed_official 235:685d5f11838f 615 else
mbed_official 235:685d5f11838f 616 {
mbed_official 235:685d5f11838f 617 pData +=1;
mbed_official 235:685d5f11838f 618 }
mbed_official 235:685d5f11838f 619 }
mbed_official 235:685d5f11838f 620 else
mbed_official 235:685d5f11838f 621 {
mbed_official 235:685d5f11838f 622 if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, Timeout) != HAL_OK)
mbed_official 235:685d5f11838f 623 {
mbed_official 235:685d5f11838f 624 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 625 }
mbed_official 235:685d5f11838f 626 huart->Instance->DR = (*pData++ & (uint8_t)0xFF);
mbed_official 235:685d5f11838f 627 }
mbed_official 235:685d5f11838f 628 }
mbed_official 235:685d5f11838f 629
mbed_official 235:685d5f11838f 630 if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, Timeout) != HAL_OK)
mbed_official 235:685d5f11838f 631 {
mbed_official 235:685d5f11838f 632 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 633 }
mbed_official 235:685d5f11838f 634
mbed_official 235:685d5f11838f 635 /* Check if a non-blocking receive process is ongoing or not */
mbed_official 235:685d5f11838f 636 if(huart->State == HAL_UART_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 637 {
mbed_official 235:685d5f11838f 638 huart->State = HAL_UART_STATE_BUSY_RX;
mbed_official 235:685d5f11838f 639 }
mbed_official 235:685d5f11838f 640 else
mbed_official 235:685d5f11838f 641 {
mbed_official 235:685d5f11838f 642 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 643 }
mbed_official 235:685d5f11838f 644
mbed_official 235:685d5f11838f 645 /* Process Unlocked */
mbed_official 235:685d5f11838f 646 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 647
mbed_official 235:685d5f11838f 648 return HAL_OK;
mbed_official 235:685d5f11838f 649 }
mbed_official 235:685d5f11838f 650 else
mbed_official 235:685d5f11838f 651 {
mbed_official 235:685d5f11838f 652 return HAL_BUSY;
mbed_official 235:685d5f11838f 653 }
mbed_official 235:685d5f11838f 654 }
mbed_official 235:685d5f11838f 655
mbed_official 235:685d5f11838f 656 /**
mbed_official 235:685d5f11838f 657 * @brief Receives an amount of data in blocking mode.
mbed_official 235:685d5f11838f 658 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 659 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 660 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 661 * @param Size: Amount of data to be received
mbed_official 235:685d5f11838f 662 * @param Timeout: Timeout duration
mbed_official 235:685d5f11838f 663 * @retval HAL status
mbed_official 235:685d5f11838f 664 */
mbed_official 235:685d5f11838f 665 HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
mbed_official 235:685d5f11838f 666 {
mbed_official 235:685d5f11838f 667 uint16_t* tmp;
mbed_official 235:685d5f11838f 668 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 669
mbed_official 235:685d5f11838f 670 tmp1 = huart->State;
mbed_official 235:685d5f11838f 671 if((tmp1 == HAL_UART_STATE_READY) || (tmp1 == HAL_UART_STATE_BUSY_TX))
mbed_official 235:685d5f11838f 672 {
mbed_official 235:685d5f11838f 673 if((pData == NULL ) || (Size == 0))
mbed_official 235:685d5f11838f 674 {
mbed_official 235:685d5f11838f 675 return HAL_ERROR;
mbed_official 235:685d5f11838f 676 }
mbed_official 235:685d5f11838f 677
mbed_official 235:685d5f11838f 678 /* Process Locked */
mbed_official 235:685d5f11838f 679 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 680
mbed_official 235:685d5f11838f 681 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 235:685d5f11838f 682 /* Check if a non-blocking transmit process is ongoing or not */
mbed_official 235:685d5f11838f 683 if(huart->State == HAL_UART_STATE_BUSY_TX)
mbed_official 235:685d5f11838f 684 {
mbed_official 235:685d5f11838f 685 huart->State = HAL_UART_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 686 }
mbed_official 235:685d5f11838f 687 else
mbed_official 235:685d5f11838f 688 {
mbed_official 235:685d5f11838f 689 huart->State = HAL_UART_STATE_BUSY_RX;
mbed_official 235:685d5f11838f 690 }
mbed_official 235:685d5f11838f 691
mbed_official 235:685d5f11838f 692 huart->RxXferSize = Size;
mbed_official 235:685d5f11838f 693 huart->RxXferCount = Size;
mbed_official 235:685d5f11838f 694
mbed_official 235:685d5f11838f 695 /* Check the remain data to be received */
mbed_official 235:685d5f11838f 696 while(huart->RxXferCount > 0)
mbed_official 235:685d5f11838f 697 {
mbed_official 235:685d5f11838f 698 huart->RxXferCount--;
mbed_official 235:685d5f11838f 699 if(huart->Init.WordLength == UART_WORDLENGTH_9B)
mbed_official 235:685d5f11838f 700 {
mbed_official 235:685d5f11838f 701 if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, Timeout) != HAL_OK)
mbed_official 235:685d5f11838f 702 {
mbed_official 235:685d5f11838f 703 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 704 }
mbed_official 235:685d5f11838f 705 tmp = (uint16_t*) pData ;
mbed_official 235:685d5f11838f 706 if(huart->Init.Parity == UART_PARITY_NONE)
mbed_official 235:685d5f11838f 707 {
mbed_official 235:685d5f11838f 708 *tmp = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF);
mbed_official 235:685d5f11838f 709 pData +=2;
mbed_official 235:685d5f11838f 710 }
mbed_official 235:685d5f11838f 711 else
mbed_official 235:685d5f11838f 712 {
mbed_official 235:685d5f11838f 713 *tmp = (uint16_t)(huart->Instance->DR & (uint16_t)0x00FF);
mbed_official 235:685d5f11838f 714 pData +=1;
mbed_official 235:685d5f11838f 715 }
mbed_official 235:685d5f11838f 716
mbed_official 235:685d5f11838f 717 }
mbed_official 235:685d5f11838f 718 else
mbed_official 235:685d5f11838f 719 {
mbed_official 235:685d5f11838f 720 if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_RXNE, RESET, Timeout) != HAL_OK)
mbed_official 235:685d5f11838f 721 {
mbed_official 235:685d5f11838f 722 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 723 }
mbed_official 235:685d5f11838f 724 if(huart->Init.Parity == UART_PARITY_NONE)
mbed_official 235:685d5f11838f 725 {
mbed_official 235:685d5f11838f 726 *pData++ = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF);
mbed_official 235:685d5f11838f 727 }
mbed_official 235:685d5f11838f 728 else
mbed_official 235:685d5f11838f 729 {
mbed_official 235:685d5f11838f 730 *pData++ = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F);
mbed_official 235:685d5f11838f 731 }
mbed_official 235:685d5f11838f 732
mbed_official 235:685d5f11838f 733 }
mbed_official 235:685d5f11838f 734 }
mbed_official 235:685d5f11838f 735
mbed_official 235:685d5f11838f 736 /* Check if a non-blocking transmit process is ongoing or not */
mbed_official 235:685d5f11838f 737 if(huart->State == HAL_UART_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 738 {
mbed_official 235:685d5f11838f 739 huart->State = HAL_UART_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 740 }
mbed_official 235:685d5f11838f 741 else
mbed_official 235:685d5f11838f 742 {
mbed_official 235:685d5f11838f 743 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 744 }
mbed_official 235:685d5f11838f 745 /* Process Unlocked */
mbed_official 235:685d5f11838f 746 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 747
mbed_official 235:685d5f11838f 748 return HAL_OK;
mbed_official 235:685d5f11838f 749 }
mbed_official 235:685d5f11838f 750 else
mbed_official 235:685d5f11838f 751 {
mbed_official 235:685d5f11838f 752 return HAL_BUSY;
mbed_official 235:685d5f11838f 753 }
mbed_official 235:685d5f11838f 754 }
mbed_official 235:685d5f11838f 755
mbed_official 235:685d5f11838f 756 /**
mbed_official 235:685d5f11838f 757 * @brief Sends an amount of data in non blocking mode.
mbed_official 235:685d5f11838f 758 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 759 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 760 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 761 * @param Size: Amount of data to be sent
mbed_official 235:685d5f11838f 762 * @retval HAL status
mbed_official 235:685d5f11838f 763 */
mbed_official 235:685d5f11838f 764 HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
mbed_official 235:685d5f11838f 765 {
mbed_official 235:685d5f11838f 766 uint32_t tmp = 0;
mbed_official 235:685d5f11838f 767
mbed_official 235:685d5f11838f 768 tmp = huart->State;
mbed_official 235:685d5f11838f 769 if((tmp == HAL_UART_STATE_READY) || (tmp == HAL_UART_STATE_BUSY_RX))
mbed_official 235:685d5f11838f 770 {
mbed_official 235:685d5f11838f 771 if((pData == NULL ) || (Size == 0))
mbed_official 235:685d5f11838f 772 {
mbed_official 235:685d5f11838f 773 return HAL_ERROR;
mbed_official 235:685d5f11838f 774 }
mbed_official 235:685d5f11838f 775
mbed_official 235:685d5f11838f 776 /* Process Locked */
mbed_official 235:685d5f11838f 777 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 778
mbed_official 235:685d5f11838f 779 huart->pTxBuffPtr = pData;
mbed_official 235:685d5f11838f 780 huart->TxXferSize = Size;
mbed_official 235:685d5f11838f 781 huart->TxXferCount = Size;
mbed_official 235:685d5f11838f 782
mbed_official 235:685d5f11838f 783 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 235:685d5f11838f 784 /* Check if a receive process is ongoing or not */
mbed_official 235:685d5f11838f 785 if(huart->State == HAL_UART_STATE_BUSY_RX)
mbed_official 235:685d5f11838f 786 {
mbed_official 235:685d5f11838f 787 huart->State = HAL_UART_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 788 }
mbed_official 235:685d5f11838f 789 else
mbed_official 235:685d5f11838f 790 {
mbed_official 235:685d5f11838f 791 huart->State = HAL_UART_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 792 }
mbed_official 235:685d5f11838f 793
mbed_official 235:685d5f11838f 794 /* Enable the UART Parity Error Interrupt */
mbed_official 235:685d5f11838f 795 __HAL_UART_ENABLE_IT(huart, UART_IT_PE);
mbed_official 235:685d5f11838f 796
mbed_official 235:685d5f11838f 797 /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 235:685d5f11838f 798 __HAL_UART_ENABLE_IT(huart, UART_IT_ERR);
mbed_official 235:685d5f11838f 799
mbed_official 235:685d5f11838f 800 /* Process Unlocked */
mbed_official 235:685d5f11838f 801 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 802
mbed_official 235:685d5f11838f 803 /* Enable the UART Transmit data register empty Interrupt */
mbed_official 235:685d5f11838f 804 __HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
mbed_official 235:685d5f11838f 805
mbed_official 235:685d5f11838f 806 return HAL_OK;
mbed_official 235:685d5f11838f 807 }
mbed_official 235:685d5f11838f 808 else
mbed_official 235:685d5f11838f 809 {
mbed_official 235:685d5f11838f 810 return HAL_BUSY;
mbed_official 235:685d5f11838f 811 }
mbed_official 235:685d5f11838f 812 }
mbed_official 235:685d5f11838f 813
mbed_official 235:685d5f11838f 814 /**
mbed_official 235:685d5f11838f 815 * @brief Receives an amount of data in non blocking mode
mbed_official 235:685d5f11838f 816 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 817 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 818 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 819 * @param Size: Amount of data to be received
mbed_official 235:685d5f11838f 820 * @retval HAL status
mbed_official 235:685d5f11838f 821 */
mbed_official 235:685d5f11838f 822 HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
mbed_official 235:685d5f11838f 823 {
mbed_official 235:685d5f11838f 824 uint32_t tmp = 0;
mbed_official 235:685d5f11838f 825
mbed_official 235:685d5f11838f 826 tmp = huart->State;
mbed_official 235:685d5f11838f 827 if((tmp == HAL_UART_STATE_READY) || (tmp == HAL_UART_STATE_BUSY_TX))
mbed_official 235:685d5f11838f 828 {
mbed_official 235:685d5f11838f 829 if((pData == NULL ) || (Size == 0))
mbed_official 235:685d5f11838f 830 {
mbed_official 235:685d5f11838f 831 return HAL_ERROR;
mbed_official 235:685d5f11838f 832 }
mbed_official 235:685d5f11838f 833
mbed_official 235:685d5f11838f 834 /* Process Locked */
mbed_official 235:685d5f11838f 835 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 836
mbed_official 235:685d5f11838f 837 huart->pRxBuffPtr = pData;
mbed_official 235:685d5f11838f 838 huart->RxXferSize = Size;
mbed_official 235:685d5f11838f 839 huart->RxXferCount = Size;
mbed_official 235:685d5f11838f 840
mbed_official 235:685d5f11838f 841 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 235:685d5f11838f 842 /* Check if a transmit process is ongoing or not */
mbed_official 235:685d5f11838f 843 if(huart->State == HAL_UART_STATE_BUSY_TX)
mbed_official 235:685d5f11838f 844 {
mbed_official 235:685d5f11838f 845 huart->State = HAL_UART_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 846 }
mbed_official 235:685d5f11838f 847 else
mbed_official 235:685d5f11838f 848 {
mbed_official 235:685d5f11838f 849 huart->State = HAL_UART_STATE_BUSY_RX;
mbed_official 235:685d5f11838f 850 }
mbed_official 235:685d5f11838f 851
mbed_official 235:685d5f11838f 852 /* Enable the UART Parity Error Interrupt */
mbed_official 235:685d5f11838f 853 __HAL_UART_ENABLE_IT(huart, UART_IT_PE);
mbed_official 235:685d5f11838f 854
mbed_official 235:685d5f11838f 855 /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 235:685d5f11838f 856 __HAL_UART_ENABLE_IT(huart, UART_IT_ERR);
mbed_official 235:685d5f11838f 857
mbed_official 235:685d5f11838f 858 /* Process Unlocked */
mbed_official 235:685d5f11838f 859 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 860
mbed_official 235:685d5f11838f 861 /* Enable the UART Data Register not empty Interrupt */
mbed_official 235:685d5f11838f 862 __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
mbed_official 235:685d5f11838f 863
mbed_official 235:685d5f11838f 864 return HAL_OK;
mbed_official 235:685d5f11838f 865 }
mbed_official 235:685d5f11838f 866 else
mbed_official 235:685d5f11838f 867 {
mbed_official 235:685d5f11838f 868 return HAL_BUSY;
mbed_official 235:685d5f11838f 869 }
mbed_official 235:685d5f11838f 870 }
mbed_official 235:685d5f11838f 871
mbed_official 235:685d5f11838f 872 /**
mbed_official 235:685d5f11838f 873 * @brief Sends an amount of data in non blocking mode.
mbed_official 235:685d5f11838f 874 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 875 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 876 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 877 * @param Size: Amount of data to be sent
mbed_official 235:685d5f11838f 878 * @retval HAL status
mbed_official 235:685d5f11838f 879 */
mbed_official 235:685d5f11838f 880 HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
mbed_official 235:685d5f11838f 881 {
mbed_official 235:685d5f11838f 882 uint32_t *tmp;
mbed_official 235:685d5f11838f 883 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 884
mbed_official 235:685d5f11838f 885 tmp1 = huart->State;
mbed_official 235:685d5f11838f 886 if((tmp1 == HAL_UART_STATE_READY) || (tmp1 == HAL_UART_STATE_BUSY_RX))
mbed_official 235:685d5f11838f 887 {
mbed_official 235:685d5f11838f 888 if((pData == NULL ) || (Size == 0))
mbed_official 235:685d5f11838f 889 {
mbed_official 235:685d5f11838f 890 return HAL_ERROR;
mbed_official 235:685d5f11838f 891 }
mbed_official 235:685d5f11838f 892
mbed_official 235:685d5f11838f 893 /* Process Locked */
mbed_official 235:685d5f11838f 894 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 895
mbed_official 235:685d5f11838f 896 huart->pTxBuffPtr = pData;
mbed_official 235:685d5f11838f 897 huart->TxXferSize = Size;
mbed_official 235:685d5f11838f 898 huart->TxXferCount = Size;
mbed_official 235:685d5f11838f 899
mbed_official 235:685d5f11838f 900 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 235:685d5f11838f 901 /* Check if a receive process is ongoing or not */
mbed_official 235:685d5f11838f 902 if(huart->State == HAL_UART_STATE_BUSY_RX)
mbed_official 235:685d5f11838f 903 {
mbed_official 235:685d5f11838f 904 huart->State = HAL_UART_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 905 }
mbed_official 235:685d5f11838f 906 else
mbed_official 235:685d5f11838f 907 {
mbed_official 235:685d5f11838f 908 huart->State = HAL_UART_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 909 }
mbed_official 235:685d5f11838f 910
mbed_official 235:685d5f11838f 911 /* Set the UART DMA transfer complete callback */
mbed_official 235:685d5f11838f 912 huart->hdmatx->XferCpltCallback = UART_DMATransmitCplt;
mbed_official 235:685d5f11838f 913
mbed_official 235:685d5f11838f 914 /* Set the UART DMA Half transfer complete callback */
mbed_official 235:685d5f11838f 915 huart->hdmatx->XferHalfCpltCallback = UART_DMATxHalfCplt;
mbed_official 235:685d5f11838f 916
mbed_official 235:685d5f11838f 917 /* Set the DMA error callback */
mbed_official 235:685d5f11838f 918 huart->hdmatx->XferErrorCallback = UART_DMAError;
mbed_official 235:685d5f11838f 919
mbed_official 235:685d5f11838f 920 /* Enable the UART transmit DMA Stream */
mbed_official 235:685d5f11838f 921 tmp = (uint32_t*)&pData;
mbed_official 235:685d5f11838f 922 HAL_DMA_Start_IT(huart->hdmatx, *(uint32_t*)tmp, (uint32_t)&huart->Instance->DR, Size);
mbed_official 235:685d5f11838f 923
mbed_official 235:685d5f11838f 924 /* Enable the DMA transfer for transmit request by setting the DMAT bit
mbed_official 235:685d5f11838f 925 in the UART CR3 register */
mbed_official 235:685d5f11838f 926 huart->Instance->CR3 |= USART_CR3_DMAT;
mbed_official 235:685d5f11838f 927
mbed_official 235:685d5f11838f 928 /* Process Unlocked */
mbed_official 235:685d5f11838f 929 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 930
mbed_official 235:685d5f11838f 931 return HAL_OK;
mbed_official 235:685d5f11838f 932 }
mbed_official 235:685d5f11838f 933 else
mbed_official 235:685d5f11838f 934 {
mbed_official 235:685d5f11838f 935 return HAL_BUSY;
mbed_official 235:685d5f11838f 936 }
mbed_official 235:685d5f11838f 937 }
mbed_official 235:685d5f11838f 938
mbed_official 235:685d5f11838f 939 /**
mbed_official 235:685d5f11838f 940 * @brief Receives an amount of data in non blocking mode.
mbed_official 235:685d5f11838f 941 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 942 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 943 * @param pData: Pointer to data buffer
mbed_official 235:685d5f11838f 944 * @param Size: Amount of data to be received
mbed_official 235:685d5f11838f 945 * @note When the UART parity is enabled (PCE = 1) the data received contain the parity bit.
mbed_official 235:685d5f11838f 946 * @retval HAL status
mbed_official 235:685d5f11838f 947 */
mbed_official 235:685d5f11838f 948 HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
mbed_official 235:685d5f11838f 949 {
mbed_official 235:685d5f11838f 950 uint32_t *tmp;
mbed_official 235:685d5f11838f 951 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 952
mbed_official 235:685d5f11838f 953 tmp1 = huart->State;
mbed_official 235:685d5f11838f 954 if((tmp1 == HAL_UART_STATE_READY) || (tmp1 == HAL_UART_STATE_BUSY_TX))
mbed_official 235:685d5f11838f 955 {
mbed_official 235:685d5f11838f 956 if((pData == NULL ) || (Size == 0))
mbed_official 235:685d5f11838f 957 {
mbed_official 235:685d5f11838f 958 return HAL_ERROR;
mbed_official 235:685d5f11838f 959 }
mbed_official 235:685d5f11838f 960
mbed_official 235:685d5f11838f 961 /* Process Locked */
mbed_official 235:685d5f11838f 962 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 963
mbed_official 235:685d5f11838f 964 huart->pRxBuffPtr = pData;
mbed_official 235:685d5f11838f 965 huart->RxXferSize = Size;
mbed_official 235:685d5f11838f 966
mbed_official 235:685d5f11838f 967 huart->ErrorCode = HAL_UART_ERROR_NONE;
mbed_official 235:685d5f11838f 968 /* Check if a transmit process is ongoing or not */
mbed_official 235:685d5f11838f 969 if(huart->State == HAL_UART_STATE_BUSY_TX)
mbed_official 235:685d5f11838f 970 {
mbed_official 235:685d5f11838f 971 huart->State = HAL_UART_STATE_BUSY_TX_RX;
mbed_official 235:685d5f11838f 972 }
mbed_official 235:685d5f11838f 973 else
mbed_official 235:685d5f11838f 974 {
mbed_official 235:685d5f11838f 975 huart->State = HAL_UART_STATE_BUSY_RX;
mbed_official 235:685d5f11838f 976 }
mbed_official 235:685d5f11838f 977
mbed_official 235:685d5f11838f 978 /* Set the UART DMA transfer complete callback */
mbed_official 235:685d5f11838f 979 huart->hdmarx->XferCpltCallback = UART_DMAReceiveCplt;
mbed_official 235:685d5f11838f 980
mbed_official 235:685d5f11838f 981 /* Set the UART DMA Half transfer complete callback */
mbed_official 235:685d5f11838f 982 huart->hdmarx->XferHalfCpltCallback = UART_DMARxHalfCplt;
mbed_official 235:685d5f11838f 983
mbed_official 235:685d5f11838f 984 /* Set the DMA error callback */
mbed_official 235:685d5f11838f 985 huart->hdmarx->XferErrorCallback = UART_DMAError;
mbed_official 235:685d5f11838f 986
mbed_official 235:685d5f11838f 987 /* Enable the DMA Stream */
mbed_official 235:685d5f11838f 988 tmp = (uint32_t*)&pData;
mbed_official 235:685d5f11838f 989 HAL_DMA_Start_IT(huart->hdmarx, (uint32_t)&huart->Instance->DR, *(uint32_t*)tmp, Size);
mbed_official 235:685d5f11838f 990
mbed_official 235:685d5f11838f 991 /* Enable the DMA transfer for the receiver request by setting the DMAR bit
mbed_official 235:685d5f11838f 992 in the UART CR3 register */
mbed_official 235:685d5f11838f 993 huart->Instance->CR3 |= USART_CR3_DMAR;
mbed_official 235:685d5f11838f 994
mbed_official 235:685d5f11838f 995 /* Process Unlocked */
mbed_official 235:685d5f11838f 996 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 997
mbed_official 235:685d5f11838f 998 return HAL_OK;
mbed_official 235:685d5f11838f 999 }
mbed_official 235:685d5f11838f 1000 else
mbed_official 235:685d5f11838f 1001 {
mbed_official 235:685d5f11838f 1002 return HAL_BUSY;
mbed_official 235:685d5f11838f 1003 }
mbed_official 235:685d5f11838f 1004 }
mbed_official 235:685d5f11838f 1005
mbed_official 235:685d5f11838f 1006 /**
mbed_official 235:685d5f11838f 1007 * @brief Pauses the DMA Transfer.
mbed_official 235:685d5f11838f 1008 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1009 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1010 * @retval HAL status
mbed_official 235:685d5f11838f 1011 */
mbed_official 235:685d5f11838f 1012 HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1013 {
mbed_official 235:685d5f11838f 1014 /* Process Locked */
mbed_official 235:685d5f11838f 1015 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 1016
mbed_official 235:685d5f11838f 1017 if(huart->State == HAL_UART_STATE_BUSY_TX)
mbed_official 235:685d5f11838f 1018 {
mbed_official 235:685d5f11838f 1019 /* Disable the UART DMA Tx request */
mbed_official 235:685d5f11838f 1020 huart->Instance->CR3 &= (uint32_t)(~USART_CR3_DMAT);
mbed_official 235:685d5f11838f 1021 }
mbed_official 235:685d5f11838f 1022 else if(huart->State == HAL_UART_STATE_BUSY_RX)
mbed_official 235:685d5f11838f 1023 {
mbed_official 235:685d5f11838f 1024 /* Disable the UART DMA Rx request */
mbed_official 235:685d5f11838f 1025 huart->Instance->CR3 &= (uint32_t)(~USART_CR3_DMAR);
mbed_official 235:685d5f11838f 1026 }
mbed_official 235:685d5f11838f 1027 else if (huart->State == HAL_UART_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 1028 {
mbed_official 235:685d5f11838f 1029 /* Disable the UART DMA Tx & Rx requests */
mbed_official 235:685d5f11838f 1030 huart->Instance->CR3 &= (uint32_t)(~USART_CR3_DMAT);
mbed_official 235:685d5f11838f 1031 huart->Instance->CR3 &= (uint32_t)(~USART_CR3_DMAR);
mbed_official 235:685d5f11838f 1032 }
mbed_official 235:685d5f11838f 1033
mbed_official 235:685d5f11838f 1034 /* Process Unlocked */
mbed_official 235:685d5f11838f 1035 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 1036
mbed_official 235:685d5f11838f 1037 return HAL_OK;
mbed_official 235:685d5f11838f 1038 }
mbed_official 235:685d5f11838f 1039
mbed_official 235:685d5f11838f 1040 /**
mbed_official 235:685d5f11838f 1041 * @brief Resumes the DMA Transfer.
mbed_official 235:685d5f11838f 1042 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1043 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1044 * @retval HAL status
mbed_official 235:685d5f11838f 1045 */
mbed_official 235:685d5f11838f 1046 HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1047 {
mbed_official 235:685d5f11838f 1048 /* Process Locked */
mbed_official 235:685d5f11838f 1049 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 1050
mbed_official 235:685d5f11838f 1051 if(huart->State == HAL_UART_STATE_BUSY_TX)
mbed_official 235:685d5f11838f 1052 {
mbed_official 235:685d5f11838f 1053 /* Enable the UART DMA Tx request */
mbed_official 235:685d5f11838f 1054 huart->Instance->CR3 |= USART_CR3_DMAT;
mbed_official 235:685d5f11838f 1055 }
mbed_official 235:685d5f11838f 1056 else if(huart->State == HAL_UART_STATE_BUSY_RX)
mbed_official 235:685d5f11838f 1057 {
mbed_official 235:685d5f11838f 1058 /* Clear the Overrun flag before resumming the Rx transfer*/
mbed_official 235:685d5f11838f 1059 __HAL_UART_CLEAR_OREFLAG(huart);
mbed_official 235:685d5f11838f 1060 /* Enable the UART DMA Rx request */
mbed_official 235:685d5f11838f 1061 huart->Instance->CR3 |= USART_CR3_DMAR;
mbed_official 235:685d5f11838f 1062 }
mbed_official 235:685d5f11838f 1063 else if(huart->State == HAL_UART_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 1064 {
mbed_official 235:685d5f11838f 1065 /* Clear the Overrun flag before resumming the Rx transfer*/
mbed_official 235:685d5f11838f 1066 __HAL_UART_CLEAR_OREFLAG(huart);
mbed_official 235:685d5f11838f 1067 /* Enable the UART DMA Tx & Rx request */
mbed_official 235:685d5f11838f 1068 huart->Instance->CR3 |= USART_CR3_DMAT;
mbed_official 235:685d5f11838f 1069 huart->Instance->CR3 |= USART_CR3_DMAR;
mbed_official 235:685d5f11838f 1070 }
mbed_official 235:685d5f11838f 1071
mbed_official 235:685d5f11838f 1072 /* Process Unlocked */
mbed_official 235:685d5f11838f 1073 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 1074
mbed_official 235:685d5f11838f 1075 return HAL_OK;
mbed_official 235:685d5f11838f 1076 }
mbed_official 235:685d5f11838f 1077
mbed_official 235:685d5f11838f 1078 /**
mbed_official 235:685d5f11838f 1079 * @brief Stops the DMA Transfer.
mbed_official 235:685d5f11838f 1080 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1081 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1082 * @retval HAL status
mbed_official 235:685d5f11838f 1083 */
mbed_official 235:685d5f11838f 1084 HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1085 {
mbed_official 235:685d5f11838f 1086 /* The Lock is not implemented on this API to allow the user application
mbed_official 235:685d5f11838f 1087 to call the HAL UART API under callbacks HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback():
mbed_official 235:685d5f11838f 1088 when calling HAL_DMA_Abort() API the DMA TX/RX Transfer complete interrupt is generated
mbed_official 235:685d5f11838f 1089 and the correspond call back is executed HAL_UART_TxCpltCallback() / HAL_UART_RxCpltCallback()
mbed_official 235:685d5f11838f 1090 */
mbed_official 235:685d5f11838f 1091
mbed_official 235:685d5f11838f 1092 /* Disable the UART Tx/Rx DMA requests */
mbed_official 235:685d5f11838f 1093 huart->Instance->CR3 &= ~USART_CR3_DMAT;
mbed_official 235:685d5f11838f 1094 huart->Instance->CR3 &= ~USART_CR3_DMAR;
mbed_official 235:685d5f11838f 1095
mbed_official 235:685d5f11838f 1096 /* Abort the UART DMA tx Stream */
mbed_official 235:685d5f11838f 1097 if(huart->hdmatx != NULL)
mbed_official 235:685d5f11838f 1098 {
mbed_official 235:685d5f11838f 1099 HAL_DMA_Abort(huart->hdmatx);
mbed_official 235:685d5f11838f 1100 }
mbed_official 235:685d5f11838f 1101 /* Abort the UART DMA rx Stream */
mbed_official 235:685d5f11838f 1102 if(huart->hdmarx != NULL)
mbed_official 235:685d5f11838f 1103 {
mbed_official 235:685d5f11838f 1104 HAL_DMA_Abort(huart->hdmarx);
mbed_official 235:685d5f11838f 1105 }
mbed_official 235:685d5f11838f 1106
mbed_official 235:685d5f11838f 1107 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1108
mbed_official 235:685d5f11838f 1109 return HAL_OK;
mbed_official 235:685d5f11838f 1110 }
mbed_official 235:685d5f11838f 1111
mbed_official 235:685d5f11838f 1112 /**
mbed_official 235:685d5f11838f 1113 * @brief This function handles UART interrupt request.
mbed_official 235:685d5f11838f 1114 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1115 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1116 * @retval None
mbed_official 235:685d5f11838f 1117 */
mbed_official 235:685d5f11838f 1118 void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1119 {
mbed_official 235:685d5f11838f 1120 uint32_t tmp1 = 0, tmp2 = 0;
mbed_official 235:685d5f11838f 1121
mbed_official 235:685d5f11838f 1122 tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_PE);
mbed_official 235:685d5f11838f 1123 tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_PE);
mbed_official 235:685d5f11838f 1124 /* UART parity error interrupt occurred ------------------------------------*/
mbed_official 235:685d5f11838f 1125 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 235:685d5f11838f 1126 {
mbed_official 235:685d5f11838f 1127 __HAL_UART_CLEAR_PEFLAG(huart);
mbed_official 235:685d5f11838f 1128
mbed_official 235:685d5f11838f 1129 huart->ErrorCode |= HAL_UART_ERROR_PE;
mbed_official 235:685d5f11838f 1130 }
mbed_official 235:685d5f11838f 1131
mbed_official 235:685d5f11838f 1132 tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_FE);
mbed_official 235:685d5f11838f 1133 tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR);
mbed_official 235:685d5f11838f 1134 /* UART frame error interrupt occurred -------------------------------------*/
mbed_official 235:685d5f11838f 1135 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 235:685d5f11838f 1136 {
mbed_official 235:685d5f11838f 1137 __HAL_UART_CLEAR_FEFLAG(huart);
mbed_official 235:685d5f11838f 1138
mbed_official 235:685d5f11838f 1139 huart->ErrorCode |= HAL_UART_ERROR_FE;
mbed_official 235:685d5f11838f 1140 }
mbed_official 235:685d5f11838f 1141
mbed_official 235:685d5f11838f 1142 tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_NE);
mbed_official 235:685d5f11838f 1143 tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR);
mbed_official 235:685d5f11838f 1144 /* UART noise error interrupt occurred -------------------------------------*/
mbed_official 235:685d5f11838f 1145 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 235:685d5f11838f 1146 {
mbed_official 235:685d5f11838f 1147 __HAL_UART_CLEAR_NEFLAG(huart);
mbed_official 235:685d5f11838f 1148
mbed_official 235:685d5f11838f 1149 huart->ErrorCode |= HAL_UART_ERROR_NE;
mbed_official 235:685d5f11838f 1150 }
mbed_official 235:685d5f11838f 1151
mbed_official 235:685d5f11838f 1152 tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_ORE);
mbed_official 235:685d5f11838f 1153 tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR);
mbed_official 235:685d5f11838f 1154 /* UART Over-Run interrupt occurred ----------------------------------------*/
mbed_official 235:685d5f11838f 1155 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 235:685d5f11838f 1156 {
mbed_official 235:685d5f11838f 1157 __HAL_UART_CLEAR_OREFLAG(huart);
mbed_official 235:685d5f11838f 1158
mbed_official 235:685d5f11838f 1159 huart->ErrorCode |= HAL_UART_ERROR_ORE;
mbed_official 235:685d5f11838f 1160 }
mbed_official 235:685d5f11838f 1161
mbed_official 235:685d5f11838f 1162 tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_RXNE);
mbed_official 235:685d5f11838f 1163 tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_RXNE);
mbed_official 235:685d5f11838f 1164 /* UART in mode Receiver ---------------------------------------------------*/
mbed_official 235:685d5f11838f 1165 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 235:685d5f11838f 1166 {
mbed_official 235:685d5f11838f 1167 UART_Receive_IT(huart);
mbed_official 235:685d5f11838f 1168 }
mbed_official 235:685d5f11838f 1169
mbed_official 235:685d5f11838f 1170 tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_TXE);
mbed_official 235:685d5f11838f 1171 tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_TXE);
mbed_official 235:685d5f11838f 1172 /* UART in mode Transmitter ------------------------------------------------*/
mbed_official 235:685d5f11838f 1173 if((tmp1 != RESET) && (tmp2 != RESET))
mbed_official 235:685d5f11838f 1174 {
mbed_official 235:685d5f11838f 1175 UART_Transmit_IT(huart);
mbed_official 235:685d5f11838f 1176 }
mbed_official 235:685d5f11838f 1177
mbed_official 235:685d5f11838f 1178 if(huart->ErrorCode != HAL_UART_ERROR_NONE)
mbed_official 235:685d5f11838f 1179 {
mbed_official 235:685d5f11838f 1180 /* Set the UART state ready to be able to start again the process */
mbed_official 235:685d5f11838f 1181 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1182
mbed_official 235:685d5f11838f 1183 HAL_UART_ErrorCallback(huart);
mbed_official 235:685d5f11838f 1184 }
mbed_official 235:685d5f11838f 1185 }
mbed_official 235:685d5f11838f 1186
mbed_official 235:685d5f11838f 1187 /**
mbed_official 235:685d5f11838f 1188 * @brief Tx Transfer completed callbacks.
mbed_official 235:685d5f11838f 1189 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1190 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1191 * @retval None
mbed_official 235:685d5f11838f 1192 */
mbed_official 235:685d5f11838f 1193 __weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1194 {
mbed_official 235:685d5f11838f 1195 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 1196 the HAL_UART_TxCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 1197 */
mbed_official 235:685d5f11838f 1198 }
mbed_official 235:685d5f11838f 1199
mbed_official 235:685d5f11838f 1200 /**
mbed_official 235:685d5f11838f 1201 * @brief Tx Half Transfer completed callbacks.
mbed_official 235:685d5f11838f 1202 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1203 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1204 * @retval None
mbed_official 235:685d5f11838f 1205 */
mbed_official 235:685d5f11838f 1206 __weak void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1207 {
mbed_official 235:685d5f11838f 1208 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 1209 the HAL_UART_TxCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 1210 */
mbed_official 235:685d5f11838f 1211 }
mbed_official 235:685d5f11838f 1212
mbed_official 235:685d5f11838f 1213 /**
mbed_official 235:685d5f11838f 1214 * @brief Rx Transfer completed callbacks.
mbed_official 235:685d5f11838f 1215 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1216 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1217 * @retval None
mbed_official 235:685d5f11838f 1218 */
mbed_official 235:685d5f11838f 1219 __weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1220 {
mbed_official 235:685d5f11838f 1221 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 1222 the HAL_UART_TxCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 1223 */
mbed_official 235:685d5f11838f 1224 }
mbed_official 235:685d5f11838f 1225
mbed_official 235:685d5f11838f 1226 /**
mbed_official 235:685d5f11838f 1227 * @brief Rx Half Transfer completed callbacks.
mbed_official 235:685d5f11838f 1228 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1229 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1230 * @retval None
mbed_official 235:685d5f11838f 1231 */
mbed_official 235:685d5f11838f 1232 __weak void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1233 {
mbed_official 235:685d5f11838f 1234 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 1235 the HAL_UART_TxCpltCallback could be implemented in the user file
mbed_official 235:685d5f11838f 1236 */
mbed_official 235:685d5f11838f 1237 }
mbed_official 235:685d5f11838f 1238
mbed_official 235:685d5f11838f 1239 /**
mbed_official 235:685d5f11838f 1240 * @brief UART error callbacks.
mbed_official 235:685d5f11838f 1241 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1242 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1243 * @retval None
mbed_official 235:685d5f11838f 1244 */
mbed_official 235:685d5f11838f 1245 __weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1246 {
mbed_official 235:685d5f11838f 1247 /* NOTE: This function Should not be modified, when the callback is needed,
mbed_official 235:685d5f11838f 1248 the HAL_UART_ErrorCallback could be implemented in the user file
mbed_official 235:685d5f11838f 1249 */
mbed_official 235:685d5f11838f 1250 }
mbed_official 235:685d5f11838f 1251
mbed_official 235:685d5f11838f 1252 /**
mbed_official 235:685d5f11838f 1253 * @}
mbed_official 235:685d5f11838f 1254 */
mbed_official 235:685d5f11838f 1255
mbed_official 235:685d5f11838f 1256 /** @defgroup UART_Group3 Peripheral Control functions
mbed_official 235:685d5f11838f 1257 * @brief UART control functions
mbed_official 235:685d5f11838f 1258 *
mbed_official 235:685d5f11838f 1259 @verbatim
mbed_official 235:685d5f11838f 1260 ==============================================================================
mbed_official 235:685d5f11838f 1261 ##### Peripheral Control functions #####
mbed_official 235:685d5f11838f 1262 ==============================================================================
mbed_official 235:685d5f11838f 1263 [..]
mbed_official 235:685d5f11838f 1264 This subsection provides a set of functions allowing to control the UART:
mbed_official 235:685d5f11838f 1265 (+) HAL_LIN_SendBreak() API can be helpful to transmit the break character.
mbed_official 235:685d5f11838f 1266 (+) HAL_MultiProcessor_EnterMuteMode() API can be helpful to enter the UART in mute mode.
mbed_official 235:685d5f11838f 1267 (+) HAL_MultiProcessor_ExitMuteMode() API can be helpful to exit the UART mute mode by software.
mbed_official 235:685d5f11838f 1268
mbed_official 235:685d5f11838f 1269 @endverbatim
mbed_official 235:685d5f11838f 1270 * @{
mbed_official 235:685d5f11838f 1271 */
mbed_official 235:685d5f11838f 1272
mbed_official 235:685d5f11838f 1273 /**
mbed_official 235:685d5f11838f 1274 * @brief Transmits break characters.
mbed_official 235:685d5f11838f 1275 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1276 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1277 * @retval HAL status
mbed_official 235:685d5f11838f 1278 */
mbed_official 235:685d5f11838f 1279 HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1280 {
mbed_official 235:685d5f11838f 1281 /* Check the parameters */
mbed_official 235:685d5f11838f 1282 assert_param(IS_UART_INSTANCE(huart->Instance));
mbed_official 235:685d5f11838f 1283
mbed_official 235:685d5f11838f 1284 /* Process Locked */
mbed_official 235:685d5f11838f 1285 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 1286
mbed_official 235:685d5f11838f 1287 huart->State = HAL_UART_STATE_BUSY;
mbed_official 235:685d5f11838f 1288
mbed_official 235:685d5f11838f 1289 /* Send break characters */
mbed_official 235:685d5f11838f 1290 huart->Instance->CR1 |= USART_CR1_SBK;
mbed_official 235:685d5f11838f 1291
mbed_official 235:685d5f11838f 1292 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1293
mbed_official 235:685d5f11838f 1294 /* Process Unlocked */
mbed_official 235:685d5f11838f 1295 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 1296
mbed_official 235:685d5f11838f 1297 return HAL_OK;
mbed_official 235:685d5f11838f 1298 }
mbed_official 235:685d5f11838f 1299
mbed_official 235:685d5f11838f 1300 /**
mbed_official 235:685d5f11838f 1301 * @brief Enters the UART in mute mode.
mbed_official 235:685d5f11838f 1302 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1303 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1304 * @retval HAL status
mbed_official 235:685d5f11838f 1305 */
mbed_official 235:685d5f11838f 1306 HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1307 {
mbed_official 235:685d5f11838f 1308 /* Check the parameters */
mbed_official 235:685d5f11838f 1309 assert_param(IS_UART_INSTANCE(huart->Instance));
mbed_official 235:685d5f11838f 1310
mbed_official 235:685d5f11838f 1311 /* Process Locked */
mbed_official 235:685d5f11838f 1312 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 1313
mbed_official 235:685d5f11838f 1314 huart->State = HAL_UART_STATE_BUSY;
mbed_official 235:685d5f11838f 1315
mbed_official 235:685d5f11838f 1316 /* Enable the USART mute mode by setting the RWU bit in the CR1 register */
mbed_official 235:685d5f11838f 1317 huart->Instance->CR1 |= USART_CR1_RWU;
mbed_official 235:685d5f11838f 1318
mbed_official 235:685d5f11838f 1319 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1320
mbed_official 235:685d5f11838f 1321 /* Process Unlocked */
mbed_official 235:685d5f11838f 1322 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 1323
mbed_official 235:685d5f11838f 1324 return HAL_OK;
mbed_official 235:685d5f11838f 1325 }
mbed_official 235:685d5f11838f 1326
mbed_official 235:685d5f11838f 1327 /**
mbed_official 235:685d5f11838f 1328 * @brief Exits the UART mute mode: wake up software.
mbed_official 235:685d5f11838f 1329 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1330 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1331 * @retval HAL status
mbed_official 235:685d5f11838f 1332 */
mbed_official 235:685d5f11838f 1333 HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1334 {
mbed_official 235:685d5f11838f 1335 /* Check the parameters */
mbed_official 235:685d5f11838f 1336 assert_param(IS_UART_INSTANCE(huart->Instance));
mbed_official 235:685d5f11838f 1337
mbed_official 235:685d5f11838f 1338 /* Process Locked */
mbed_official 235:685d5f11838f 1339 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 1340
mbed_official 235:685d5f11838f 1341 huart->State = HAL_UART_STATE_BUSY;
mbed_official 235:685d5f11838f 1342
mbed_official 235:685d5f11838f 1343 /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */
mbed_official 235:685d5f11838f 1344 huart->Instance->CR1 &= (uint32_t)~((uint32_t)USART_CR1_RWU);
mbed_official 235:685d5f11838f 1345
mbed_official 235:685d5f11838f 1346 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1347
mbed_official 235:685d5f11838f 1348 /* Process Unlocked */
mbed_official 235:685d5f11838f 1349 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 1350
mbed_official 235:685d5f11838f 1351 return HAL_OK;
mbed_official 235:685d5f11838f 1352 }
mbed_official 235:685d5f11838f 1353
mbed_official 235:685d5f11838f 1354 /**
mbed_official 235:685d5f11838f 1355 * @brief Enables the UART transmitter and disables the UART receiver.
mbed_official 235:685d5f11838f 1356 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1357 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1358 * @retval HAL status
mbed_official 235:685d5f11838f 1359 */
mbed_official 235:685d5f11838f 1360 HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1361 {
mbed_official 235:685d5f11838f 1362 uint32_t tmpreg = 0x00;
mbed_official 235:685d5f11838f 1363
mbed_official 235:685d5f11838f 1364 /* Process Locked */
mbed_official 235:685d5f11838f 1365 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 1366
mbed_official 235:685d5f11838f 1367 huart->State = HAL_UART_STATE_BUSY;
mbed_official 235:685d5f11838f 1368
mbed_official 235:685d5f11838f 1369 /*-------------------------- USART CR1 Configuration -----------------------*/
mbed_official 235:685d5f11838f 1370 tmpreg = huart->Instance->CR1;
mbed_official 235:685d5f11838f 1371
mbed_official 235:685d5f11838f 1372 /* Clear TE and RE bits */
mbed_official 235:685d5f11838f 1373 tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_TE | USART_CR1_RE));
mbed_official 235:685d5f11838f 1374
mbed_official 235:685d5f11838f 1375 /* Enable the USART's transmit interface by setting the TE bit in the USART CR1 register */
mbed_official 235:685d5f11838f 1376 tmpreg |= (uint32_t)USART_CR1_TE;
mbed_official 235:685d5f11838f 1377
mbed_official 235:685d5f11838f 1378 /* Write to USART CR1 */
mbed_official 235:685d5f11838f 1379 huart->Instance->CR1 = (uint32_t)tmpreg;
mbed_official 235:685d5f11838f 1380
mbed_official 235:685d5f11838f 1381 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1382
mbed_official 235:685d5f11838f 1383 /* Process Unlocked */
mbed_official 235:685d5f11838f 1384 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 1385
mbed_official 235:685d5f11838f 1386 return HAL_OK;
mbed_official 235:685d5f11838f 1387 }
mbed_official 235:685d5f11838f 1388
mbed_official 235:685d5f11838f 1389 /**
mbed_official 235:685d5f11838f 1390 * @brief Enables the UART receiver and disables the UART transmitter.
mbed_official 235:685d5f11838f 1391 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1392 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1393 * @retval HAL status
mbed_official 235:685d5f11838f 1394 */
mbed_official 235:685d5f11838f 1395 HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1396 {
mbed_official 235:685d5f11838f 1397 uint32_t tmpreg = 0x00;
mbed_official 235:685d5f11838f 1398
mbed_official 235:685d5f11838f 1399 /* Process Locked */
mbed_official 235:685d5f11838f 1400 __HAL_LOCK(huart);
mbed_official 235:685d5f11838f 1401
mbed_official 235:685d5f11838f 1402 huart->State = HAL_UART_STATE_BUSY;
mbed_official 235:685d5f11838f 1403
mbed_official 235:685d5f11838f 1404 /*-------------------------- USART CR1 Configuration -----------------------*/
mbed_official 235:685d5f11838f 1405 tmpreg = huart->Instance->CR1;
mbed_official 235:685d5f11838f 1406
mbed_official 235:685d5f11838f 1407 /* Clear TE and RE bits */
mbed_official 235:685d5f11838f 1408 tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_TE | USART_CR1_RE));
mbed_official 235:685d5f11838f 1409
mbed_official 235:685d5f11838f 1410 /* Enable the USART's receive interface by setting the RE bit in the USART CR1 register */
mbed_official 235:685d5f11838f 1411 tmpreg |= (uint32_t)USART_CR1_RE;
mbed_official 235:685d5f11838f 1412
mbed_official 235:685d5f11838f 1413 /* Write to USART CR1 */
mbed_official 235:685d5f11838f 1414 huart->Instance->CR1 = (uint32_t)tmpreg;
mbed_official 235:685d5f11838f 1415
mbed_official 235:685d5f11838f 1416 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1417
mbed_official 235:685d5f11838f 1418 /* Process Unlocked */
mbed_official 235:685d5f11838f 1419 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 1420
mbed_official 235:685d5f11838f 1421 return HAL_OK;
mbed_official 235:685d5f11838f 1422 }
mbed_official 235:685d5f11838f 1423
mbed_official 235:685d5f11838f 1424 /**
mbed_official 235:685d5f11838f 1425 * @}
mbed_official 235:685d5f11838f 1426 */
mbed_official 235:685d5f11838f 1427
mbed_official 235:685d5f11838f 1428 /** @defgroup UART_Group4 Peripheral State and Errors functions
mbed_official 235:685d5f11838f 1429 * @brief UART State and Errors functions
mbed_official 235:685d5f11838f 1430 *
mbed_official 235:685d5f11838f 1431 @verbatim
mbed_official 235:685d5f11838f 1432 ==============================================================================
mbed_official 235:685d5f11838f 1433 ##### Peripheral State and Errors functions #####
mbed_official 235:685d5f11838f 1434 ==============================================================================
mbed_official 235:685d5f11838f 1435 [..]
mbed_official 235:685d5f11838f 1436 This subsection provides a set of functions allowing to return the State of
mbed_official 235:685d5f11838f 1437 UART communication process, return Peripheral Errors occurred during communication
mbed_official 235:685d5f11838f 1438 process
mbed_official 235:685d5f11838f 1439 (+) HAL_UART_GetState() API can be helpful to check in run-time the state of the UART peripheral.
mbed_official 235:685d5f11838f 1440 (+) HAL_UART_GetError() check in run-time errors that could be occurred during communication.
mbed_official 235:685d5f11838f 1441
mbed_official 235:685d5f11838f 1442 @endverbatim
mbed_official 235:685d5f11838f 1443 * @{
mbed_official 235:685d5f11838f 1444 */
mbed_official 235:685d5f11838f 1445
mbed_official 235:685d5f11838f 1446 /**
mbed_official 235:685d5f11838f 1447 * @brief Returns the UART state.
mbed_official 235:685d5f11838f 1448 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1449 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1450 * @retval HAL state
mbed_official 235:685d5f11838f 1451 */
mbed_official 235:685d5f11838f 1452 HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1453 {
mbed_official 235:685d5f11838f 1454 return huart->State;
mbed_official 235:685d5f11838f 1455 }
mbed_official 235:685d5f11838f 1456
mbed_official 235:685d5f11838f 1457 /**
mbed_official 235:685d5f11838f 1458 * @brief Return the UART error code
mbed_official 235:685d5f11838f 1459 * @param huart : pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1460 * the configuration information for the specified UART.
mbed_official 235:685d5f11838f 1461 * @retval UART Error Code
mbed_official 235:685d5f11838f 1462 */
mbed_official 235:685d5f11838f 1463 uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1464 {
mbed_official 235:685d5f11838f 1465 return huart->ErrorCode;
mbed_official 235:685d5f11838f 1466 }
mbed_official 235:685d5f11838f 1467
mbed_official 235:685d5f11838f 1468 /**
mbed_official 235:685d5f11838f 1469 * @}
mbed_official 235:685d5f11838f 1470 */
mbed_official 235:685d5f11838f 1471
mbed_official 235:685d5f11838f 1472 /**
mbed_official 235:685d5f11838f 1473 * @brief DMA UART transmit process complete callback.
mbed_official 235:685d5f11838f 1474 * @param hdma: DMA handle
mbed_official 235:685d5f11838f 1475 * @retval None
mbed_official 235:685d5f11838f 1476 */
mbed_official 235:685d5f11838f 1477 static void UART_DMATransmitCplt(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1478 {
mbed_official 235:685d5f11838f 1479 UART_HandleTypeDef* huart = ( UART_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1480 /* DMA Normal mode*/
mbed_official 235:685d5f11838f 1481 if((hdma->Instance->CR & DMA_SxCR_CIRC) == 0)
mbed_official 235:685d5f11838f 1482 {
mbed_official 235:685d5f11838f 1483 huart->TxXferCount = 0;
mbed_official 235:685d5f11838f 1484
mbed_official 235:685d5f11838f 1485 /* Disable the DMA transfer for transmit request by setting the DMAT bit
mbed_official 235:685d5f11838f 1486 in the UART CR3 register */
mbed_official 235:685d5f11838f 1487 huart->Instance->CR3 &= (uint32_t)~((uint32_t)USART_CR3_DMAT);
mbed_official 235:685d5f11838f 1488
mbed_official 235:685d5f11838f 1489 /* Wait for UART TC Flag */
mbed_official 235:685d5f11838f 1490 if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, UART_TIMEOUT_VALUE) != HAL_OK)
mbed_official 235:685d5f11838f 1491 {
mbed_official 235:685d5f11838f 1492 /* Timeout occurred */
mbed_official 235:685d5f11838f 1493 huart->State = HAL_UART_STATE_TIMEOUT;
mbed_official 235:685d5f11838f 1494 HAL_UART_ErrorCallback(huart);
mbed_official 235:685d5f11838f 1495 }
mbed_official 235:685d5f11838f 1496 else
mbed_official 235:685d5f11838f 1497 {
mbed_official 235:685d5f11838f 1498 /* No Timeout */
mbed_official 235:685d5f11838f 1499 /* Check if a receive process is ongoing or not */
mbed_official 235:685d5f11838f 1500 if(huart->State == HAL_UART_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 1501 {
mbed_official 235:685d5f11838f 1502 huart->State = HAL_UART_STATE_BUSY_RX;
mbed_official 235:685d5f11838f 1503 }
mbed_official 235:685d5f11838f 1504 else
mbed_official 235:685d5f11838f 1505 {
mbed_official 235:685d5f11838f 1506 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1507 }
mbed_official 235:685d5f11838f 1508 HAL_UART_TxCpltCallback(huart);
mbed_official 235:685d5f11838f 1509 }
mbed_official 235:685d5f11838f 1510 }
mbed_official 235:685d5f11838f 1511 /* DMA Circular mode */
mbed_official 235:685d5f11838f 1512 else
mbed_official 235:685d5f11838f 1513 {
mbed_official 235:685d5f11838f 1514 HAL_UART_TxCpltCallback(huart);
mbed_official 235:685d5f11838f 1515 }
mbed_official 235:685d5f11838f 1516 }
mbed_official 235:685d5f11838f 1517
mbed_official 235:685d5f11838f 1518 /**
mbed_official 235:685d5f11838f 1519 * @brief DMA UART transmit process half complete callback
mbed_official 235:685d5f11838f 1520 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1521 * the configuration information for the specified DMA module.
mbed_official 235:685d5f11838f 1522 * @retval None
mbed_official 235:685d5f11838f 1523 */
mbed_official 235:685d5f11838f 1524 static void UART_DMATxHalfCplt(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1525 {
mbed_official 235:685d5f11838f 1526 UART_HandleTypeDef* huart = (UART_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
mbed_official 235:685d5f11838f 1527
mbed_official 235:685d5f11838f 1528 HAL_UART_TxHalfCpltCallback(huart);
mbed_official 235:685d5f11838f 1529 }
mbed_official 235:685d5f11838f 1530
mbed_official 235:685d5f11838f 1531 /**
mbed_official 235:685d5f11838f 1532 * @brief DMA UART receive process complete callback.
mbed_official 235:685d5f11838f 1533 * @param hdma: DMA handle
mbed_official 235:685d5f11838f 1534 * @retval None
mbed_official 235:685d5f11838f 1535 */
mbed_official 235:685d5f11838f 1536 static void UART_DMAReceiveCplt(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1537 {
mbed_official 235:685d5f11838f 1538 UART_HandleTypeDef* huart = ( UART_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1539 /* DMA Normal mode*/
mbed_official 235:685d5f11838f 1540 if((hdma->Instance->CR & DMA_SxCR_CIRC) == 0)
mbed_official 235:685d5f11838f 1541 {
mbed_official 235:685d5f11838f 1542 huart->RxXferCount = 0;
mbed_official 235:685d5f11838f 1543
mbed_official 235:685d5f11838f 1544 /* Disable the DMA transfer for the receiver request by setting the DMAR bit
mbed_official 235:685d5f11838f 1545 in the UART CR3 register */
mbed_official 235:685d5f11838f 1546 huart->Instance->CR3 &= (uint32_t)~((uint32_t)USART_CR3_DMAR);
mbed_official 235:685d5f11838f 1547
mbed_official 235:685d5f11838f 1548 /* Check if a transmit process is ongoing or not */
mbed_official 235:685d5f11838f 1549 if(huart->State == HAL_UART_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 1550 {
mbed_official 235:685d5f11838f 1551 huart->State = HAL_UART_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 1552 }
mbed_official 235:685d5f11838f 1553 else
mbed_official 235:685d5f11838f 1554 {
mbed_official 235:685d5f11838f 1555 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1556 }
mbed_official 235:685d5f11838f 1557 }
mbed_official 235:685d5f11838f 1558 HAL_UART_RxCpltCallback(huart);
mbed_official 235:685d5f11838f 1559 }
mbed_official 235:685d5f11838f 1560
mbed_official 235:685d5f11838f 1561 /**
mbed_official 235:685d5f11838f 1562 * @brief DMA UART receive process half complete callback
mbed_official 235:685d5f11838f 1563 * @param hdma: pointer to a DMA_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1564 * the configuration information for the specified DMA module.
mbed_official 235:685d5f11838f 1565 * @retval None
mbed_official 235:685d5f11838f 1566 */
mbed_official 235:685d5f11838f 1567 static void UART_DMARxHalfCplt(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1568 {
mbed_official 235:685d5f11838f 1569 UART_HandleTypeDef* huart = (UART_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent;
mbed_official 235:685d5f11838f 1570
mbed_official 235:685d5f11838f 1571 HAL_UART_RxHalfCpltCallback(huart);
mbed_official 235:685d5f11838f 1572 }
mbed_official 235:685d5f11838f 1573
mbed_official 235:685d5f11838f 1574 /**
mbed_official 235:685d5f11838f 1575 * @brief DMA UART communication error callback.
mbed_official 235:685d5f11838f 1576 * @param hdma: DMA handle
mbed_official 235:685d5f11838f 1577 * @retval None
mbed_official 235:685d5f11838f 1578 */
mbed_official 235:685d5f11838f 1579 static void UART_DMAError(DMA_HandleTypeDef *hdma)
mbed_official 235:685d5f11838f 1580 {
mbed_official 235:685d5f11838f 1581 UART_HandleTypeDef* huart = ( UART_HandleTypeDef* )((DMA_HandleTypeDef* )hdma)->Parent;
mbed_official 235:685d5f11838f 1582 huart->RxXferCount = 0;
mbed_official 235:685d5f11838f 1583 huart->TxXferCount = 0;
mbed_official 235:685d5f11838f 1584 huart->State= HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1585 huart->ErrorCode |= HAL_UART_ERROR_DMA;
mbed_official 235:685d5f11838f 1586 HAL_UART_ErrorCallback(huart);
mbed_official 235:685d5f11838f 1587 }
mbed_official 235:685d5f11838f 1588
mbed_official 235:685d5f11838f 1589 /**
mbed_official 235:685d5f11838f 1590 * @brief This function handles UART Communication Timeout.
mbed_official 235:685d5f11838f 1591 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1592 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1593 * @param Flag: specifies the UART flag to check.
mbed_official 235:685d5f11838f 1594 * @param Status: The new Flag status (SET or RESET).
mbed_official 235:685d5f11838f 1595 * @param Timeout: Timeout duration
mbed_official 235:685d5f11838f 1596 * @retval HAL status
mbed_official 235:685d5f11838f 1597 */
mbed_official 235:685d5f11838f 1598 static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Timeout)
mbed_official 235:685d5f11838f 1599 {
mbed_official 235:685d5f11838f 1600 uint32_t tickstart = 0;
mbed_official 235:685d5f11838f 1601
mbed_official 235:685d5f11838f 1602 /* Get tick */
mbed_official 235:685d5f11838f 1603 tickstart = HAL_GetTick();
mbed_official 235:685d5f11838f 1604
mbed_official 235:685d5f11838f 1605 /* Wait until flag is set */
mbed_official 235:685d5f11838f 1606 if(Status == RESET)
mbed_official 235:685d5f11838f 1607 {
mbed_official 235:685d5f11838f 1608 while(__HAL_UART_GET_FLAG(huart, Flag) == RESET)
mbed_official 235:685d5f11838f 1609 {
mbed_official 235:685d5f11838f 1610 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1611 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1612 {
mbed_official 235:685d5f11838f 1613 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 1614 {
mbed_official 235:685d5f11838f 1615 /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
mbed_official 235:685d5f11838f 1616 __HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
mbed_official 235:685d5f11838f 1617 __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);
mbed_official 235:685d5f11838f 1618 __HAL_UART_DISABLE_IT(huart, UART_IT_PE);
mbed_official 235:685d5f11838f 1619 __HAL_UART_DISABLE_IT(huart, UART_IT_ERR);
mbed_official 235:685d5f11838f 1620
mbed_official 235:685d5f11838f 1621 huart->State= HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1622
mbed_official 235:685d5f11838f 1623 /* Process Unlocked */
mbed_official 235:685d5f11838f 1624 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 1625
mbed_official 235:685d5f11838f 1626 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1627 }
mbed_official 235:685d5f11838f 1628 }
mbed_official 235:685d5f11838f 1629 }
mbed_official 235:685d5f11838f 1630 }
mbed_official 235:685d5f11838f 1631 else
mbed_official 235:685d5f11838f 1632 {
mbed_official 235:685d5f11838f 1633 while(__HAL_UART_GET_FLAG(huart, Flag) != RESET)
mbed_official 235:685d5f11838f 1634 {
mbed_official 235:685d5f11838f 1635 /* Check for the Timeout */
mbed_official 235:685d5f11838f 1636 if(Timeout != HAL_MAX_DELAY)
mbed_official 235:685d5f11838f 1637 {
mbed_official 235:685d5f11838f 1638 if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout))
mbed_official 235:685d5f11838f 1639 {
mbed_official 235:685d5f11838f 1640 /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
mbed_official 235:685d5f11838f 1641 __HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
mbed_official 235:685d5f11838f 1642 __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);
mbed_official 235:685d5f11838f 1643 __HAL_UART_DISABLE_IT(huart, UART_IT_PE);
mbed_official 235:685d5f11838f 1644 __HAL_UART_DISABLE_IT(huart, UART_IT_ERR);
mbed_official 235:685d5f11838f 1645
mbed_official 235:685d5f11838f 1646 huart->State= HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1647
mbed_official 235:685d5f11838f 1648 /* Process Unlocked */
mbed_official 235:685d5f11838f 1649 __HAL_UNLOCK(huart);
mbed_official 235:685d5f11838f 1650
mbed_official 235:685d5f11838f 1651 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1652 }
mbed_official 235:685d5f11838f 1653 }
mbed_official 235:685d5f11838f 1654 }
mbed_official 235:685d5f11838f 1655 }
mbed_official 235:685d5f11838f 1656 return HAL_OK;
mbed_official 235:685d5f11838f 1657 }
mbed_official 235:685d5f11838f 1658
mbed_official 235:685d5f11838f 1659 /**
mbed_official 235:685d5f11838f 1660 * @brief Sends an amount of data in non blocking mode.
mbed_official 235:685d5f11838f 1661 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1662 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1663 * @retval HAL status
mbed_official 235:685d5f11838f 1664 */
mbed_official 235:685d5f11838f 1665 static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1666 {
mbed_official 235:685d5f11838f 1667 uint16_t* tmp;
mbed_official 235:685d5f11838f 1668 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 1669
mbed_official 235:685d5f11838f 1670 tmp1 = huart->State;
mbed_official 235:685d5f11838f 1671 if((tmp1 == HAL_UART_STATE_BUSY_TX) || (tmp1 == HAL_UART_STATE_BUSY_TX_RX))
mbed_official 235:685d5f11838f 1672 {
mbed_official 235:685d5f11838f 1673 if(huart->Init.WordLength == UART_WORDLENGTH_9B)
mbed_official 235:685d5f11838f 1674 {
mbed_official 235:685d5f11838f 1675 tmp = (uint16_t*) huart->pTxBuffPtr;
mbed_official 235:685d5f11838f 1676 huart->Instance->DR = (uint16_t)(*tmp & (uint16_t)0x01FF);
mbed_official 235:685d5f11838f 1677 if(huart->Init.Parity == UART_PARITY_NONE)
mbed_official 235:685d5f11838f 1678 {
mbed_official 235:685d5f11838f 1679 huart->pTxBuffPtr += 2;
mbed_official 235:685d5f11838f 1680 }
mbed_official 235:685d5f11838f 1681 else
mbed_official 235:685d5f11838f 1682 {
mbed_official 235:685d5f11838f 1683 huart->pTxBuffPtr += 1;
mbed_official 235:685d5f11838f 1684 }
mbed_official 235:685d5f11838f 1685 }
mbed_official 235:685d5f11838f 1686 else
mbed_official 235:685d5f11838f 1687 {
mbed_official 235:685d5f11838f 1688 huart->Instance->DR = (uint8_t)(*huart->pTxBuffPtr++ & (uint8_t)0x00FF);
mbed_official 235:685d5f11838f 1689 }
mbed_official 235:685d5f11838f 1690
mbed_official 235:685d5f11838f 1691 if(--huart->TxXferCount == 0)
mbed_official 235:685d5f11838f 1692 {
mbed_official 235:685d5f11838f 1693 /* Disable the UART Transmit Complete Interrupt */
mbed_official 235:685d5f11838f 1694 __HAL_UART_DISABLE_IT(huart, UART_IT_TXE);
mbed_official 235:685d5f11838f 1695
mbed_official 235:685d5f11838f 1696 /* Check if a receive process is ongoing or not */
mbed_official 235:685d5f11838f 1697 if(huart->State == HAL_UART_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 1698 {
mbed_official 235:685d5f11838f 1699 huart->State = HAL_UART_STATE_BUSY_RX;
mbed_official 235:685d5f11838f 1700 }
mbed_official 235:685d5f11838f 1701 else
mbed_official 235:685d5f11838f 1702 {
mbed_official 235:685d5f11838f 1703 /* Disable the UART Parity Error Interrupt */
mbed_official 235:685d5f11838f 1704 __HAL_UART_DISABLE_IT(huart, UART_IT_PE);
mbed_official 235:685d5f11838f 1705
mbed_official 235:685d5f11838f 1706 /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 235:685d5f11838f 1707 __HAL_UART_DISABLE_IT(huart, UART_IT_ERR);
mbed_official 235:685d5f11838f 1708
mbed_official 235:685d5f11838f 1709 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1710 }
mbed_official 235:685d5f11838f 1711
mbed_official 235:685d5f11838f 1712 /* Wait on TC flag to be able to start a second transfer */
mbed_official 235:685d5f11838f 1713 if(UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, UART_TIMEOUT_VALUE) != HAL_OK)
mbed_official 235:685d5f11838f 1714 {
mbed_official 235:685d5f11838f 1715 return HAL_TIMEOUT;
mbed_official 235:685d5f11838f 1716 }
mbed_official 235:685d5f11838f 1717
mbed_official 235:685d5f11838f 1718 HAL_UART_TxCpltCallback(huart);
mbed_official 235:685d5f11838f 1719
mbed_official 235:685d5f11838f 1720 return HAL_OK;
mbed_official 235:685d5f11838f 1721 }
mbed_official 235:685d5f11838f 1722 return HAL_OK;
mbed_official 235:685d5f11838f 1723 }
mbed_official 235:685d5f11838f 1724 else
mbed_official 235:685d5f11838f 1725 {
mbed_official 235:685d5f11838f 1726 return HAL_BUSY;
mbed_official 235:685d5f11838f 1727 }
mbed_official 235:685d5f11838f 1728 }
mbed_official 235:685d5f11838f 1729
mbed_official 235:685d5f11838f 1730 /**
mbed_official 235:685d5f11838f 1731 * @brief Receives an amount of data in non blocking mode
mbed_official 235:685d5f11838f 1732 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1733 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1734 * @retval HAL status
mbed_official 235:685d5f11838f 1735 */
mbed_official 235:685d5f11838f 1736 static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1737 {
mbed_official 235:685d5f11838f 1738 uint16_t* tmp;
mbed_official 235:685d5f11838f 1739 uint32_t tmp1 = 0;
mbed_official 235:685d5f11838f 1740
mbed_official 235:685d5f11838f 1741 tmp1 = huart->State;
mbed_official 235:685d5f11838f 1742 if((tmp1 == HAL_UART_STATE_BUSY_RX) || (tmp1 == HAL_UART_STATE_BUSY_TX_RX))
mbed_official 235:685d5f11838f 1743 {
mbed_official 235:685d5f11838f 1744 if(huart->Init.WordLength == UART_WORDLENGTH_9B)
mbed_official 235:685d5f11838f 1745 {
mbed_official 235:685d5f11838f 1746 tmp = (uint16_t*) huart->pRxBuffPtr;
mbed_official 235:685d5f11838f 1747 if(huart->Init.Parity == UART_PARITY_NONE)
mbed_official 235:685d5f11838f 1748 {
mbed_official 235:685d5f11838f 1749 *tmp = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF);
mbed_official 235:685d5f11838f 1750 huart->pRxBuffPtr += 2;
mbed_official 235:685d5f11838f 1751 }
mbed_official 235:685d5f11838f 1752 else
mbed_official 235:685d5f11838f 1753 {
mbed_official 235:685d5f11838f 1754 *tmp = (uint16_t)(huart->Instance->DR & (uint16_t)0x00FF);
mbed_official 235:685d5f11838f 1755 huart->pRxBuffPtr += 1;
mbed_official 235:685d5f11838f 1756 }
mbed_official 235:685d5f11838f 1757 }
mbed_official 235:685d5f11838f 1758 else
mbed_official 235:685d5f11838f 1759 {
mbed_official 235:685d5f11838f 1760 if(huart->Init.Parity == UART_PARITY_NONE)
mbed_official 235:685d5f11838f 1761 {
mbed_official 235:685d5f11838f 1762 *huart->pRxBuffPtr++ = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF);
mbed_official 235:685d5f11838f 1763 }
mbed_official 235:685d5f11838f 1764 else
mbed_official 235:685d5f11838f 1765 {
mbed_official 235:685d5f11838f 1766 *huart->pRxBuffPtr++ = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F);
mbed_official 235:685d5f11838f 1767 }
mbed_official 235:685d5f11838f 1768 }
mbed_official 235:685d5f11838f 1769
mbed_official 235:685d5f11838f 1770 if(--huart->RxXferCount == 0)
mbed_official 235:685d5f11838f 1771 {
mbed_official 235:685d5f11838f 1772 __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);
mbed_official 235:685d5f11838f 1773
mbed_official 235:685d5f11838f 1774 /* Check if a transmit process is ongoing or not */
mbed_official 235:685d5f11838f 1775 if(huart->State == HAL_UART_STATE_BUSY_TX_RX)
mbed_official 235:685d5f11838f 1776 {
mbed_official 235:685d5f11838f 1777 huart->State = HAL_UART_STATE_BUSY_TX;
mbed_official 235:685d5f11838f 1778 }
mbed_official 235:685d5f11838f 1779 else
mbed_official 235:685d5f11838f 1780 {
mbed_official 235:685d5f11838f 1781 /* Disable the UART Parity Error Interrupt */
mbed_official 235:685d5f11838f 1782 __HAL_UART_DISABLE_IT(huart, UART_IT_PE);
mbed_official 235:685d5f11838f 1783
mbed_official 235:685d5f11838f 1784 /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
mbed_official 235:685d5f11838f 1785 __HAL_UART_DISABLE_IT(huart, UART_IT_ERR);
mbed_official 235:685d5f11838f 1786
mbed_official 235:685d5f11838f 1787 huart->State = HAL_UART_STATE_READY;
mbed_official 235:685d5f11838f 1788 }
mbed_official 235:685d5f11838f 1789 HAL_UART_RxCpltCallback(huart);
mbed_official 235:685d5f11838f 1790
mbed_official 235:685d5f11838f 1791 return HAL_OK;
mbed_official 235:685d5f11838f 1792 }
mbed_official 235:685d5f11838f 1793 return HAL_OK;
mbed_official 235:685d5f11838f 1794 }
mbed_official 235:685d5f11838f 1795 else
mbed_official 235:685d5f11838f 1796 {
mbed_official 235:685d5f11838f 1797 return HAL_BUSY;
mbed_official 235:685d5f11838f 1798 }
mbed_official 235:685d5f11838f 1799 }
mbed_official 235:685d5f11838f 1800
mbed_official 235:685d5f11838f 1801 /**
mbed_official 235:685d5f11838f 1802 * @brief Configures the UART peripheral.
mbed_official 235:685d5f11838f 1803 * @param huart: pointer to a UART_HandleTypeDef structure that contains
mbed_official 235:685d5f11838f 1804 * the configuration information for the specified UART module.
mbed_official 235:685d5f11838f 1805 * @retval None
mbed_official 235:685d5f11838f 1806 */
mbed_official 235:685d5f11838f 1807 static void UART_SetConfig(UART_HandleTypeDef *huart)
mbed_official 235:685d5f11838f 1808 {
mbed_official 235:685d5f11838f 1809 uint32_t tmpreg = 0x00;
mbed_official 235:685d5f11838f 1810
mbed_official 235:685d5f11838f 1811 /* Check the parameters */
mbed_official 235:685d5f11838f 1812 assert_param(IS_UART_INSTANCE(huart->Instance));
mbed_official 235:685d5f11838f 1813 assert_param(IS_UART_BAUDRATE(huart->Init.BaudRate));
mbed_official 235:685d5f11838f 1814 assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength));
mbed_official 235:685d5f11838f 1815 assert_param(IS_UART_STOPBITS(huart->Init.StopBits));
mbed_official 235:685d5f11838f 1816 assert_param(IS_UART_PARITY(huart->Init.Parity));
mbed_official 235:685d5f11838f 1817 assert_param(IS_UART_MODE(huart->Init.Mode));
mbed_official 235:685d5f11838f 1818 assert_param(IS_UART_HARDWARE_FLOW_CONTROL(huart->Init.HwFlowCtl));
mbed_official 235:685d5f11838f 1819
mbed_official 235:685d5f11838f 1820 /* The hardware flow control is available only for USART1, USART2, USART3 and USART6 */
mbed_official 235:685d5f11838f 1821 if(huart->Init.HwFlowCtl != UART_HWCONTROL_NONE)
mbed_official 235:685d5f11838f 1822 {
mbed_official 235:685d5f11838f 1823 assert_param(IS_UART_HWFLOW_INSTANCE(huart->Instance));
mbed_official 235:685d5f11838f 1824 }
mbed_official 235:685d5f11838f 1825
mbed_official 235:685d5f11838f 1826 /*-------------------------- USART CR2 Configuration -----------------------*/
mbed_official 235:685d5f11838f 1827 tmpreg = huart->Instance->CR2;
mbed_official 235:685d5f11838f 1828
mbed_official 235:685d5f11838f 1829 /* Clear STOP[13:12] bits */
mbed_official 235:685d5f11838f 1830 tmpreg &= (uint32_t)~((uint32_t)USART_CR2_STOP);
mbed_official 235:685d5f11838f 1831
mbed_official 235:685d5f11838f 1832 /* Configure the UART Stop Bits: Set STOP[13:12] bits according to huart->Init.StopBits value */
mbed_official 235:685d5f11838f 1833 tmpreg |= (uint32_t)huart->Init.StopBits;
mbed_official 235:685d5f11838f 1834
mbed_official 235:685d5f11838f 1835 /* Write to USART CR2 */
mbed_official 235:685d5f11838f 1836 huart->Instance->CR2 = (uint32_t)tmpreg;
mbed_official 235:685d5f11838f 1837
mbed_official 235:685d5f11838f 1838 /*-------------------------- USART CR1 Configuration -----------------------*/
mbed_official 235:685d5f11838f 1839 tmpreg = huart->Instance->CR1;
mbed_official 235:685d5f11838f 1840
mbed_official 235:685d5f11838f 1841 /* Clear M, PCE, PS, TE and RE bits */
mbed_official 235:685d5f11838f 1842 tmpreg &= (uint32_t)~((uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | \
mbed_official 235:685d5f11838f 1843 USART_CR1_RE | USART_CR1_OVER8));
mbed_official 235:685d5f11838f 1844
mbed_official 235:685d5f11838f 1845 /* Configure the UART Word Length, Parity and mode:
mbed_official 235:685d5f11838f 1846 Set the M bits according to huart->Init.WordLength value
mbed_official 235:685d5f11838f 1847 Set PCE and PS bits according to huart->Init.Parity value
mbed_official 235:685d5f11838f 1848 Set TE and RE bits according to huart->Init.Mode value
mbed_official 235:685d5f11838f 1849 Set OVER8 bit according to huart->Init.OverSampling value */
mbed_official 235:685d5f11838f 1850 tmpreg |= (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling;
mbed_official 235:685d5f11838f 1851
mbed_official 235:685d5f11838f 1852 /* Write to USART CR1 */
mbed_official 235:685d5f11838f 1853 huart->Instance->CR1 = (uint32_t)tmpreg;
mbed_official 235:685d5f11838f 1854
mbed_official 235:685d5f11838f 1855 /*-------------------------- USART CR3 Configuration -----------------------*/
mbed_official 235:685d5f11838f 1856 tmpreg = huart->Instance->CR3;
mbed_official 235:685d5f11838f 1857
mbed_official 235:685d5f11838f 1858 /* Clear CTSE and RTSE bits */
mbed_official 235:685d5f11838f 1859 tmpreg &= (uint32_t)~((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE));
mbed_official 235:685d5f11838f 1860
mbed_official 235:685d5f11838f 1861 /* Configure the UART HFC: Set CTSE and RTSE bits according to huart->Init.HwFlowCtl value */
mbed_official 235:685d5f11838f 1862 tmpreg |= huart->Init.HwFlowCtl;
mbed_official 235:685d5f11838f 1863
mbed_official 235:685d5f11838f 1864 /* Write to USART CR3 */
mbed_official 235:685d5f11838f 1865 huart->Instance->CR3 = (uint32_t)tmpreg;
mbed_official 235:685d5f11838f 1866
mbed_official 235:685d5f11838f 1867 /* Check the Over Sampling */
mbed_official 235:685d5f11838f 1868 if(huart->Init.OverSampling == UART_OVERSAMPLING_8)
mbed_official 235:685d5f11838f 1869 {
mbed_official 235:685d5f11838f 1870 /*-------------------------- USART BRR Configuration ---------------------*/
mbed_official 235:685d5f11838f 1871 if((huart->Instance == USART1) || (huart->Instance == USART6))
mbed_official 235:685d5f11838f 1872 {
mbed_official 235:685d5f11838f 1873 huart->Instance->BRR = __UART_BRR_SAMPLING8(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate);
mbed_official 235:685d5f11838f 1874 }
mbed_official 235:685d5f11838f 1875 else
mbed_official 235:685d5f11838f 1876 {
mbed_official 235:685d5f11838f 1877 huart->Instance->BRR = __UART_BRR_SAMPLING8(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate);
mbed_official 235:685d5f11838f 1878 }
mbed_official 235:685d5f11838f 1879 }
mbed_official 235:685d5f11838f 1880 else
mbed_official 235:685d5f11838f 1881 {
mbed_official 235:685d5f11838f 1882 /*-------------------------- USART BRR Configuration ---------------------*/
mbed_official 235:685d5f11838f 1883 if((huart->Instance == USART1) || (huart->Instance == USART6))
mbed_official 235:685d5f11838f 1884 {
mbed_official 235:685d5f11838f 1885 huart->Instance->BRR = __UART_BRR_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate);
mbed_official 235:685d5f11838f 1886 }
mbed_official 235:685d5f11838f 1887 else
mbed_official 235:685d5f11838f 1888 {
mbed_official 235:685d5f11838f 1889 huart->Instance->BRR = __UART_BRR_SAMPLING16(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate);
mbed_official 235:685d5f11838f 1890 }
mbed_official 235:685d5f11838f 1891 }
mbed_official 235:685d5f11838f 1892 }
mbed_official 235:685d5f11838f 1893
mbed_official 235:685d5f11838f 1894 /**
mbed_official 235:685d5f11838f 1895 * @}
mbed_official 235:685d5f11838f 1896 */
mbed_official 235:685d5f11838f 1897
mbed_official 235:685d5f11838f 1898 #endif /* HAL_UART_MODULE_ENABLED */
mbed_official 235:685d5f11838f 1899 /**
mbed_official 235:685d5f11838f 1900 * @}
mbed_official 235:685d5f11838f 1901 */
mbed_official 235:685d5f11838f 1902
mbed_official 235:685d5f11838f 1903 /**
mbed_official 235:685d5f11838f 1904 * @}
mbed_official 235:685d5f11838f 1905 */
mbed_official 235:685d5f11838f 1906
mbed_official 235:685d5f11838f 1907 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/