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:
126:549ba18ddd81
test with CLOCK_SETUP = 0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 126:549ba18ddd81 1 /**
mbed_official 126:549ba18ddd81 2 ******************************************************************************
mbed_official 126:549ba18ddd81 3 * @file stm32f10x_usart.c
mbed_official 126:549ba18ddd81 4 * @author MCD Application Team
mbed_official 126:549ba18ddd81 5 * @version V3.6.1
mbed_official 126:549ba18ddd81 6 * @date 05-March-2012
mbed_official 126:549ba18ddd81 7 * @brief This file provides all the USART firmware functions.
mbed_official 126:549ba18ddd81 8 *******************************************************************************
mbed_official 126:549ba18ddd81 9 * Copyright (c) 2014, STMicroelectronics
mbed_official 126:549ba18ddd81 10 * All rights reserved.
mbed_official 126:549ba18ddd81 11 *
mbed_official 126:549ba18ddd81 12 * Redistribution and use in source and binary forms, with or without
mbed_official 126:549ba18ddd81 13 * modification, are permitted provided that the following conditions are met:
mbed_official 126:549ba18ddd81 14 *
mbed_official 126:549ba18ddd81 15 * 1. Redistributions of source code must retain the above copyright notice,
mbed_official 126:549ba18ddd81 16 * this list of conditions and the following disclaimer.
mbed_official 126:549ba18ddd81 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
mbed_official 126:549ba18ddd81 18 * this list of conditions and the following disclaimer in the documentation
mbed_official 126:549ba18ddd81 19 * and/or other materials provided with the distribution.
mbed_official 126:549ba18ddd81 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
mbed_official 126:549ba18ddd81 21 * may be used to endorse or promote products derived from this software
mbed_official 126:549ba18ddd81 22 * without specific prior written permission.
mbed_official 126:549ba18ddd81 23 *
mbed_official 126:549ba18ddd81 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 126:549ba18ddd81 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 126:549ba18ddd81 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 126:549ba18ddd81 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
mbed_official 126:549ba18ddd81 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
mbed_official 126:549ba18ddd81 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
mbed_official 126:549ba18ddd81 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
mbed_official 126:549ba18ddd81 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
mbed_official 126:549ba18ddd81 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
mbed_official 126:549ba18ddd81 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 126:549ba18ddd81 34 *******************************************************************************
mbed_official 126:549ba18ddd81 35 */
mbed_official 126:549ba18ddd81 36
mbed_official 126:549ba18ddd81 37 /* Includes ------------------------------------------------------------------*/
mbed_official 126:549ba18ddd81 38 #include "stm32f10x_usart.h"
mbed_official 126:549ba18ddd81 39 #include "stm32f10x_rcc.h"
mbed_official 126:549ba18ddd81 40
mbed_official 126:549ba18ddd81 41 /** @addtogroup STM32F10x_StdPeriph_Driver
mbed_official 126:549ba18ddd81 42 * @{
mbed_official 126:549ba18ddd81 43 */
mbed_official 126:549ba18ddd81 44
mbed_official 126:549ba18ddd81 45 /** @defgroup USART
mbed_official 126:549ba18ddd81 46 * @brief USART driver modules
mbed_official 126:549ba18ddd81 47 * @{
mbed_official 126:549ba18ddd81 48 */
mbed_official 126:549ba18ddd81 49
mbed_official 126:549ba18ddd81 50 /** @defgroup USART_Private_TypesDefinitions
mbed_official 126:549ba18ddd81 51 * @{
mbed_official 126:549ba18ddd81 52 */
mbed_official 126:549ba18ddd81 53
mbed_official 126:549ba18ddd81 54 /**
mbed_official 126:549ba18ddd81 55 * @}
mbed_official 126:549ba18ddd81 56 */
mbed_official 126:549ba18ddd81 57
mbed_official 126:549ba18ddd81 58 /** @defgroup USART_Private_Defines
mbed_official 126:549ba18ddd81 59 * @{
mbed_official 126:549ba18ddd81 60 */
mbed_official 126:549ba18ddd81 61
mbed_official 126:549ba18ddd81 62 #define CR1_UE_Set ((uint16_t)0x2000) /*!< USART Enable Mask */
mbed_official 126:549ba18ddd81 63 #define CR1_UE_Reset ((uint16_t)0xDFFF) /*!< USART Disable Mask */
mbed_official 126:549ba18ddd81 64
mbed_official 126:549ba18ddd81 65 #define CR1_WAKE_Mask ((uint16_t)0xF7FF) /*!< USART WakeUp Method Mask */
mbed_official 126:549ba18ddd81 66
mbed_official 126:549ba18ddd81 67 #define CR1_RWU_Set ((uint16_t)0x0002) /*!< USART mute mode Enable Mask */
mbed_official 126:549ba18ddd81 68 #define CR1_RWU_Reset ((uint16_t)0xFFFD) /*!< USART mute mode Enable Mask */
mbed_official 126:549ba18ddd81 69 #define CR1_SBK_Set ((uint16_t)0x0001) /*!< USART Break Character send Mask */
mbed_official 126:549ba18ddd81 70 #define CR1_CLEAR_Mask ((uint16_t)0xE9F3) /*!< USART CR1 Mask */
mbed_official 126:549ba18ddd81 71 #define CR2_Address_Mask ((uint16_t)0xFFF0) /*!< USART address Mask */
mbed_official 126:549ba18ddd81 72
mbed_official 126:549ba18ddd81 73 #define CR2_LINEN_Set ((uint16_t)0x4000) /*!< USART LIN Enable Mask */
mbed_official 126:549ba18ddd81 74 #define CR2_LINEN_Reset ((uint16_t)0xBFFF) /*!< USART LIN Disable Mask */
mbed_official 126:549ba18ddd81 75
mbed_official 126:549ba18ddd81 76 #define CR2_LBDL_Mask ((uint16_t)0xFFDF) /*!< USART LIN Break detection Mask */
mbed_official 126:549ba18ddd81 77 #define CR2_STOP_CLEAR_Mask ((uint16_t)0xCFFF) /*!< USART CR2 STOP Bits Mask */
mbed_official 126:549ba18ddd81 78 #define CR2_CLOCK_CLEAR_Mask ((uint16_t)0xF0FF) /*!< USART CR2 Clock Mask */
mbed_official 126:549ba18ddd81 79
mbed_official 126:549ba18ddd81 80 #define CR3_SCEN_Set ((uint16_t)0x0020) /*!< USART SC Enable Mask */
mbed_official 126:549ba18ddd81 81 #define CR3_SCEN_Reset ((uint16_t)0xFFDF) /*!< USART SC Disable Mask */
mbed_official 126:549ba18ddd81 82
mbed_official 126:549ba18ddd81 83 #define CR3_NACK_Set ((uint16_t)0x0010) /*!< USART SC NACK Enable Mask */
mbed_official 126:549ba18ddd81 84 #define CR3_NACK_Reset ((uint16_t)0xFFEF) /*!< USART SC NACK Disable Mask */
mbed_official 126:549ba18ddd81 85
mbed_official 126:549ba18ddd81 86 #define CR3_HDSEL_Set ((uint16_t)0x0008) /*!< USART Half-Duplex Enable Mask */
mbed_official 126:549ba18ddd81 87 #define CR3_HDSEL_Reset ((uint16_t)0xFFF7) /*!< USART Half-Duplex Disable Mask */
mbed_official 126:549ba18ddd81 88
mbed_official 126:549ba18ddd81 89 #define CR3_IRLP_Mask ((uint16_t)0xFFFB) /*!< USART IrDA LowPower mode Mask */
mbed_official 126:549ba18ddd81 90 #define CR3_CLEAR_Mask ((uint16_t)0xFCFF) /*!< USART CR3 Mask */
mbed_official 126:549ba18ddd81 91
mbed_official 126:549ba18ddd81 92 #define CR3_IREN_Set ((uint16_t)0x0002) /*!< USART IrDA Enable Mask */
mbed_official 126:549ba18ddd81 93 #define CR3_IREN_Reset ((uint16_t)0xFFFD) /*!< USART IrDA Disable Mask */
mbed_official 126:549ba18ddd81 94 #define GTPR_LSB_Mask ((uint16_t)0x00FF) /*!< Guard Time Register LSB Mask */
mbed_official 126:549ba18ddd81 95 #define GTPR_MSB_Mask ((uint16_t)0xFF00) /*!< Guard Time Register MSB Mask */
mbed_official 126:549ba18ddd81 96 #define IT_Mask ((uint16_t)0x001F) /*!< USART Interrupt Mask */
mbed_official 126:549ba18ddd81 97
mbed_official 126:549ba18ddd81 98 /* USART OverSampling-8 Mask */
mbed_official 126:549ba18ddd81 99 #define CR1_OVER8_Set ((u16)0x8000) /* USART OVER8 mode Enable Mask */
mbed_official 126:549ba18ddd81 100 #define CR1_OVER8_Reset ((u16)0x7FFF) /* USART OVER8 mode Disable Mask */
mbed_official 126:549ba18ddd81 101
mbed_official 126:549ba18ddd81 102 /* USART One Bit Sampling Mask */
mbed_official 126:549ba18ddd81 103 #define CR3_ONEBITE_Set ((u16)0x0800) /* USART ONEBITE mode Enable Mask */
mbed_official 126:549ba18ddd81 104 #define CR3_ONEBITE_Reset ((u16)0xF7FF) /* USART ONEBITE mode Disable Mask */
mbed_official 126:549ba18ddd81 105
mbed_official 126:549ba18ddd81 106 /**
mbed_official 126:549ba18ddd81 107 * @}
mbed_official 126:549ba18ddd81 108 */
mbed_official 126:549ba18ddd81 109
mbed_official 126:549ba18ddd81 110 /** @defgroup USART_Private_Macros
mbed_official 126:549ba18ddd81 111 * @{
mbed_official 126:549ba18ddd81 112 */
mbed_official 126:549ba18ddd81 113
mbed_official 126:549ba18ddd81 114 /**
mbed_official 126:549ba18ddd81 115 * @}
mbed_official 126:549ba18ddd81 116 */
mbed_official 126:549ba18ddd81 117
mbed_official 126:549ba18ddd81 118 /** @defgroup USART_Private_Variables
mbed_official 126:549ba18ddd81 119 * @{
mbed_official 126:549ba18ddd81 120 */
mbed_official 126:549ba18ddd81 121
mbed_official 126:549ba18ddd81 122 /**
mbed_official 126:549ba18ddd81 123 * @}
mbed_official 126:549ba18ddd81 124 */
mbed_official 126:549ba18ddd81 125
mbed_official 126:549ba18ddd81 126 /** @defgroup USART_Private_FunctionPrototypes
mbed_official 126:549ba18ddd81 127 * @{
mbed_official 126:549ba18ddd81 128 */
mbed_official 126:549ba18ddd81 129
mbed_official 126:549ba18ddd81 130 /**
mbed_official 126:549ba18ddd81 131 * @}
mbed_official 126:549ba18ddd81 132 */
mbed_official 126:549ba18ddd81 133
mbed_official 126:549ba18ddd81 134 /** @defgroup USART_Private_Functions
mbed_official 126:549ba18ddd81 135 * @{
mbed_official 126:549ba18ddd81 136 */
mbed_official 126:549ba18ddd81 137
mbed_official 126:549ba18ddd81 138 /**
mbed_official 126:549ba18ddd81 139 * @brief Deinitializes the USARTx peripheral registers to their default reset values.
mbed_official 126:549ba18ddd81 140 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 141 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 142 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 143 * @retval None
mbed_official 126:549ba18ddd81 144 */
mbed_official 126:549ba18ddd81 145 void USART_DeInit(USART_TypeDef* USARTx)
mbed_official 126:549ba18ddd81 146 {
mbed_official 126:549ba18ddd81 147 /* Check the parameters */
mbed_official 126:549ba18ddd81 148 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 149
mbed_official 126:549ba18ddd81 150 if (USARTx == USART1)
mbed_official 126:549ba18ddd81 151 {
mbed_official 126:549ba18ddd81 152 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
mbed_official 126:549ba18ddd81 153 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
mbed_official 126:549ba18ddd81 154 }
mbed_official 126:549ba18ddd81 155 else if (USARTx == USART2)
mbed_official 126:549ba18ddd81 156 {
mbed_official 126:549ba18ddd81 157 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
mbed_official 126:549ba18ddd81 158 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
mbed_official 126:549ba18ddd81 159 }
mbed_official 126:549ba18ddd81 160 else if (USARTx == USART3)
mbed_official 126:549ba18ddd81 161 {
mbed_official 126:549ba18ddd81 162 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
mbed_official 126:549ba18ddd81 163 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
mbed_official 126:549ba18ddd81 164 }
mbed_official 126:549ba18ddd81 165 else if (USARTx == UART4)
mbed_official 126:549ba18ddd81 166 {
mbed_official 126:549ba18ddd81 167 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
mbed_official 126:549ba18ddd81 168 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE);
mbed_official 126:549ba18ddd81 169 }
mbed_official 126:549ba18ddd81 170 else
mbed_official 126:549ba18ddd81 171 {
mbed_official 126:549ba18ddd81 172 if (USARTx == UART5)
mbed_official 126:549ba18ddd81 173 {
mbed_official 126:549ba18ddd81 174 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
mbed_official 126:549ba18ddd81 175 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE);
mbed_official 126:549ba18ddd81 176 }
mbed_official 126:549ba18ddd81 177 }
mbed_official 126:549ba18ddd81 178 }
mbed_official 126:549ba18ddd81 179
mbed_official 126:549ba18ddd81 180 /**
mbed_official 126:549ba18ddd81 181 * @brief Initializes the USARTx peripheral according to the specified
mbed_official 126:549ba18ddd81 182 * parameters in the USART_InitStruct .
mbed_official 126:549ba18ddd81 183 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 184 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 185 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 186 * @param USART_InitStruct: pointer to a USART_InitTypeDef structure
mbed_official 126:549ba18ddd81 187 * that contains the configuration information for the specified USART
mbed_official 126:549ba18ddd81 188 * peripheral.
mbed_official 126:549ba18ddd81 189 * @retval None
mbed_official 126:549ba18ddd81 190 */
mbed_official 126:549ba18ddd81 191 void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)
mbed_official 126:549ba18ddd81 192 {
mbed_official 126:549ba18ddd81 193 uint32_t tmpreg = 0x00, apbclock = 0x00;
mbed_official 126:549ba18ddd81 194 uint32_t integerdivider = 0x00;
mbed_official 126:549ba18ddd81 195 uint32_t fractionaldivider = 0x00;
mbed_official 126:549ba18ddd81 196 uint32_t usartxbase = 0;
mbed_official 126:549ba18ddd81 197 RCC_ClocksTypeDef RCC_ClocksStatus;
mbed_official 126:549ba18ddd81 198 /* Check the parameters */
mbed_official 126:549ba18ddd81 199 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 200 assert_param(IS_USART_BAUDRATE(USART_InitStruct->USART_BaudRate));
mbed_official 126:549ba18ddd81 201 assert_param(IS_USART_WORD_LENGTH(USART_InitStruct->USART_WordLength));
mbed_official 126:549ba18ddd81 202 assert_param(IS_USART_STOPBITS(USART_InitStruct->USART_StopBits));
mbed_official 126:549ba18ddd81 203 assert_param(IS_USART_PARITY(USART_InitStruct->USART_Parity));
mbed_official 126:549ba18ddd81 204 assert_param(IS_USART_MODE(USART_InitStruct->USART_Mode));
mbed_official 126:549ba18ddd81 205 assert_param(IS_USART_HARDWARE_FLOW_CONTROL(USART_InitStruct->USART_HardwareFlowControl));
mbed_official 126:549ba18ddd81 206 /* The hardware flow control is available only for USART1, USART2 and USART3 */
mbed_official 126:549ba18ddd81 207 if (USART_InitStruct->USART_HardwareFlowControl != USART_HardwareFlowControl_None)
mbed_official 126:549ba18ddd81 208 {
mbed_official 126:549ba18ddd81 209 assert_param(IS_USART_123_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 210 }
mbed_official 126:549ba18ddd81 211
mbed_official 126:549ba18ddd81 212 usartxbase = (uint32_t)USARTx;
mbed_official 126:549ba18ddd81 213
mbed_official 126:549ba18ddd81 214 /*---------------------------- USART CR2 Configuration -----------------------*/
mbed_official 126:549ba18ddd81 215 tmpreg = USARTx->CR2;
mbed_official 126:549ba18ddd81 216 /* Clear STOP[13:12] bits */
mbed_official 126:549ba18ddd81 217 tmpreg &= CR2_STOP_CLEAR_Mask;
mbed_official 126:549ba18ddd81 218 /* Configure the USART Stop Bits, Clock, CPOL, CPHA and LastBit ------------*/
mbed_official 126:549ba18ddd81 219 /* Set STOP[13:12] bits according to USART_StopBits value */
mbed_official 126:549ba18ddd81 220 tmpreg |= (uint32_t)USART_InitStruct->USART_StopBits;
mbed_official 126:549ba18ddd81 221
mbed_official 126:549ba18ddd81 222 /* Write to USART CR2 */
mbed_official 126:549ba18ddd81 223 USARTx->CR2 = (uint16_t)tmpreg;
mbed_official 126:549ba18ddd81 224
mbed_official 126:549ba18ddd81 225 /*---------------------------- USART CR1 Configuration -----------------------*/
mbed_official 126:549ba18ddd81 226 tmpreg = USARTx->CR1;
mbed_official 126:549ba18ddd81 227 /* Clear M, PCE, PS, TE and RE bits */
mbed_official 126:549ba18ddd81 228 tmpreg &= CR1_CLEAR_Mask;
mbed_official 126:549ba18ddd81 229 /* Configure the USART Word Length, Parity and mode ----------------------- */
mbed_official 126:549ba18ddd81 230 /* Set the M bits according to USART_WordLength value */
mbed_official 126:549ba18ddd81 231 /* Set PCE and PS bits according to USART_Parity value */
mbed_official 126:549ba18ddd81 232 /* Set TE and RE bits according to USART_Mode value */
mbed_official 126:549ba18ddd81 233 tmpreg |= (uint32_t)USART_InitStruct->USART_WordLength | USART_InitStruct->USART_Parity |
mbed_official 126:549ba18ddd81 234 USART_InitStruct->USART_Mode;
mbed_official 126:549ba18ddd81 235 /* Write to USART CR1 */
mbed_official 126:549ba18ddd81 236 USARTx->CR1 = (uint16_t)tmpreg;
mbed_official 126:549ba18ddd81 237
mbed_official 126:549ba18ddd81 238 /*---------------------------- USART CR3 Configuration -----------------------*/
mbed_official 126:549ba18ddd81 239 tmpreg = USARTx->CR3;
mbed_official 126:549ba18ddd81 240 /* Clear CTSE and RTSE bits */
mbed_official 126:549ba18ddd81 241 tmpreg &= CR3_CLEAR_Mask;
mbed_official 126:549ba18ddd81 242 /* Configure the USART HFC -------------------------------------------------*/
mbed_official 126:549ba18ddd81 243 /* Set CTSE and RTSE bits according to USART_HardwareFlowControl value */
mbed_official 126:549ba18ddd81 244 tmpreg |= USART_InitStruct->USART_HardwareFlowControl;
mbed_official 126:549ba18ddd81 245 /* Write to USART CR3 */
mbed_official 126:549ba18ddd81 246 USARTx->CR3 = (uint16_t)tmpreg;
mbed_official 126:549ba18ddd81 247
mbed_official 126:549ba18ddd81 248 /*---------------------------- USART BRR Configuration -----------------------*/
mbed_official 126:549ba18ddd81 249 /* Configure the USART Baud Rate -------------------------------------------*/
mbed_official 126:549ba18ddd81 250 RCC_GetClocksFreq(&RCC_ClocksStatus);
mbed_official 126:549ba18ddd81 251 if (usartxbase == USART1_BASE)
mbed_official 126:549ba18ddd81 252 {
mbed_official 126:549ba18ddd81 253 apbclock = RCC_ClocksStatus.PCLK2_Frequency;
mbed_official 126:549ba18ddd81 254 }
mbed_official 126:549ba18ddd81 255 else
mbed_official 126:549ba18ddd81 256 {
mbed_official 126:549ba18ddd81 257 apbclock = RCC_ClocksStatus.PCLK1_Frequency;
mbed_official 126:549ba18ddd81 258 }
mbed_official 126:549ba18ddd81 259
mbed_official 126:549ba18ddd81 260 /* Determine the integer part */
mbed_official 126:549ba18ddd81 261 if ((USARTx->CR1 & CR1_OVER8_Set) != 0)
mbed_official 126:549ba18ddd81 262 {
mbed_official 126:549ba18ddd81 263 /* Integer part computing in case Oversampling mode is 8 Samples */
mbed_official 126:549ba18ddd81 264 integerdivider = ((25 * apbclock) / (2 * (USART_InitStruct->USART_BaudRate)));
mbed_official 126:549ba18ddd81 265 }
mbed_official 126:549ba18ddd81 266 else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */
mbed_official 126:549ba18ddd81 267 {
mbed_official 126:549ba18ddd81 268 /* Integer part computing in case Oversampling mode is 16 Samples */
mbed_official 126:549ba18ddd81 269 integerdivider = ((25 * apbclock) / (4 * (USART_InitStruct->USART_BaudRate)));
mbed_official 126:549ba18ddd81 270 }
mbed_official 126:549ba18ddd81 271 tmpreg = (integerdivider / 100) << 4;
mbed_official 126:549ba18ddd81 272
mbed_official 126:549ba18ddd81 273 /* Determine the fractional part */
mbed_official 126:549ba18ddd81 274 fractionaldivider = integerdivider - (100 * (tmpreg >> 4));
mbed_official 126:549ba18ddd81 275
mbed_official 126:549ba18ddd81 276 /* Implement the fractional part in the register */
mbed_official 126:549ba18ddd81 277 if ((USARTx->CR1 & CR1_OVER8_Set) != 0)
mbed_official 126:549ba18ddd81 278 {
mbed_official 126:549ba18ddd81 279 tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);
mbed_official 126:549ba18ddd81 280 }
mbed_official 126:549ba18ddd81 281 else /* if ((USARTx->CR1 & CR1_OVER8_Set) == 0) */
mbed_official 126:549ba18ddd81 282 {
mbed_official 126:549ba18ddd81 283 tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);
mbed_official 126:549ba18ddd81 284 }
mbed_official 126:549ba18ddd81 285
mbed_official 126:549ba18ddd81 286 /* Write to USART BRR */
mbed_official 126:549ba18ddd81 287 USARTx->BRR = (uint16_t)tmpreg;
mbed_official 126:549ba18ddd81 288 }
mbed_official 126:549ba18ddd81 289
mbed_official 126:549ba18ddd81 290 /**
mbed_official 126:549ba18ddd81 291 * @brief Fills each USART_InitStruct member with its default value.
mbed_official 126:549ba18ddd81 292 * @param USART_InitStruct: pointer to a USART_InitTypeDef structure
mbed_official 126:549ba18ddd81 293 * which will be initialized.
mbed_official 126:549ba18ddd81 294 * @retval None
mbed_official 126:549ba18ddd81 295 */
mbed_official 126:549ba18ddd81 296 void USART_StructInit(USART_InitTypeDef* USART_InitStruct)
mbed_official 126:549ba18ddd81 297 {
mbed_official 126:549ba18ddd81 298 /* USART_InitStruct members default value */
mbed_official 126:549ba18ddd81 299 USART_InitStruct->USART_BaudRate = 9600;
mbed_official 126:549ba18ddd81 300 USART_InitStruct->USART_WordLength = USART_WordLength_8b;
mbed_official 126:549ba18ddd81 301 USART_InitStruct->USART_StopBits = USART_StopBits_1;
mbed_official 126:549ba18ddd81 302 USART_InitStruct->USART_Parity = USART_Parity_No ;
mbed_official 126:549ba18ddd81 303 USART_InitStruct->USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
mbed_official 126:549ba18ddd81 304 USART_InitStruct->USART_HardwareFlowControl = USART_HardwareFlowControl_None;
mbed_official 126:549ba18ddd81 305 }
mbed_official 126:549ba18ddd81 306
mbed_official 126:549ba18ddd81 307 /**
mbed_official 126:549ba18ddd81 308 * @brief Initializes the USARTx peripheral Clock according to the
mbed_official 126:549ba18ddd81 309 * specified parameters in the USART_ClockInitStruct .
mbed_official 126:549ba18ddd81 310 * @param USARTx: where x can be 1, 2, 3 to select the USART peripheral.
mbed_official 126:549ba18ddd81 311 * @param USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef
mbed_official 126:549ba18ddd81 312 * structure that contains the configuration information for the specified
mbed_official 126:549ba18ddd81 313 * USART peripheral.
mbed_official 126:549ba18ddd81 314 * @note The Smart Card and Synchronous modes are not available for UART4 and UART5.
mbed_official 126:549ba18ddd81 315 * @retval None
mbed_official 126:549ba18ddd81 316 */
mbed_official 126:549ba18ddd81 317 void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct)
mbed_official 126:549ba18ddd81 318 {
mbed_official 126:549ba18ddd81 319 uint32_t tmpreg = 0x00;
mbed_official 126:549ba18ddd81 320 /* Check the parameters */
mbed_official 126:549ba18ddd81 321 assert_param(IS_USART_123_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 322 assert_param(IS_USART_CLOCK(USART_ClockInitStruct->USART_Clock));
mbed_official 126:549ba18ddd81 323 assert_param(IS_USART_CPOL(USART_ClockInitStruct->USART_CPOL));
mbed_official 126:549ba18ddd81 324 assert_param(IS_USART_CPHA(USART_ClockInitStruct->USART_CPHA));
mbed_official 126:549ba18ddd81 325 assert_param(IS_USART_LASTBIT(USART_ClockInitStruct->USART_LastBit));
mbed_official 126:549ba18ddd81 326
mbed_official 126:549ba18ddd81 327 /*---------------------------- USART CR2 Configuration -----------------------*/
mbed_official 126:549ba18ddd81 328 tmpreg = USARTx->CR2;
mbed_official 126:549ba18ddd81 329 /* Clear CLKEN, CPOL, CPHA and LBCL bits */
mbed_official 126:549ba18ddd81 330 tmpreg &= CR2_CLOCK_CLEAR_Mask;
mbed_official 126:549ba18ddd81 331 /* Configure the USART Clock, CPOL, CPHA and LastBit ------------*/
mbed_official 126:549ba18ddd81 332 /* Set CLKEN bit according to USART_Clock value */
mbed_official 126:549ba18ddd81 333 /* Set CPOL bit according to USART_CPOL value */
mbed_official 126:549ba18ddd81 334 /* Set CPHA bit according to USART_CPHA value */
mbed_official 126:549ba18ddd81 335 /* Set LBCL bit according to USART_LastBit value */
mbed_official 126:549ba18ddd81 336 tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL |
mbed_official 126:549ba18ddd81 337 USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit;
mbed_official 126:549ba18ddd81 338 /* Write to USART CR2 */
mbed_official 126:549ba18ddd81 339 USARTx->CR2 = (uint16_t)tmpreg;
mbed_official 126:549ba18ddd81 340 }
mbed_official 126:549ba18ddd81 341
mbed_official 126:549ba18ddd81 342 /**
mbed_official 126:549ba18ddd81 343 * @brief Fills each USART_ClockInitStruct member with its default value.
mbed_official 126:549ba18ddd81 344 * @param USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef
mbed_official 126:549ba18ddd81 345 * structure which will be initialized.
mbed_official 126:549ba18ddd81 346 * @retval None
mbed_official 126:549ba18ddd81 347 */
mbed_official 126:549ba18ddd81 348 void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct)
mbed_official 126:549ba18ddd81 349 {
mbed_official 126:549ba18ddd81 350 /* USART_ClockInitStruct members default value */
mbed_official 126:549ba18ddd81 351 USART_ClockInitStruct->USART_Clock = USART_Clock_Disable;
mbed_official 126:549ba18ddd81 352 USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low;
mbed_official 126:549ba18ddd81 353 USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge;
mbed_official 126:549ba18ddd81 354 USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable;
mbed_official 126:549ba18ddd81 355 }
mbed_official 126:549ba18ddd81 356
mbed_official 126:549ba18ddd81 357 /**
mbed_official 126:549ba18ddd81 358 * @brief Enables or disables the specified USART peripheral.
mbed_official 126:549ba18ddd81 359 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 360 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 361 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 362 * @param NewState: new state of the USARTx peripheral.
mbed_official 126:549ba18ddd81 363 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 364 * @retval None
mbed_official 126:549ba18ddd81 365 */
mbed_official 126:549ba18ddd81 366 void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
mbed_official 126:549ba18ddd81 367 {
mbed_official 126:549ba18ddd81 368 /* Check the parameters */
mbed_official 126:549ba18ddd81 369 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 370 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 371
mbed_official 126:549ba18ddd81 372 if (NewState != DISABLE)
mbed_official 126:549ba18ddd81 373 {
mbed_official 126:549ba18ddd81 374 /* Enable the selected USART by setting the UE bit in the CR1 register */
mbed_official 126:549ba18ddd81 375 USARTx->CR1 |= CR1_UE_Set;
mbed_official 126:549ba18ddd81 376 }
mbed_official 126:549ba18ddd81 377 else
mbed_official 126:549ba18ddd81 378 {
mbed_official 126:549ba18ddd81 379 /* Disable the selected USART by clearing the UE bit in the CR1 register */
mbed_official 126:549ba18ddd81 380 USARTx->CR1 &= CR1_UE_Reset;
mbed_official 126:549ba18ddd81 381 }
mbed_official 126:549ba18ddd81 382 }
mbed_official 126:549ba18ddd81 383
mbed_official 126:549ba18ddd81 384 /**
mbed_official 126:549ba18ddd81 385 * @brief Enables or disables the specified USART interrupts.
mbed_official 126:549ba18ddd81 386 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 387 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 388 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 389 * @param USART_IT: specifies the USART interrupt sources to be enabled or disabled.
mbed_official 126:549ba18ddd81 390 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 391 * @arg USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5)
mbed_official 126:549ba18ddd81 392 * @arg USART_IT_LBD: LIN Break detection interrupt
mbed_official 126:549ba18ddd81 393 * @arg USART_IT_TXE: Transmit Data Register empty interrupt
mbed_official 126:549ba18ddd81 394 * @arg USART_IT_TC: Transmission complete interrupt
mbed_official 126:549ba18ddd81 395 * @arg USART_IT_RXNE: Receive Data register not empty interrupt
mbed_official 126:549ba18ddd81 396 * @arg USART_IT_IDLE: Idle line detection interrupt
mbed_official 126:549ba18ddd81 397 * @arg USART_IT_PE: Parity Error interrupt
mbed_official 126:549ba18ddd81 398 * @arg USART_IT_ERR: Error interrupt(Frame error, noise error, overrun error)
mbed_official 126:549ba18ddd81 399 * @param NewState: new state of the specified USARTx interrupts.
mbed_official 126:549ba18ddd81 400 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 401 * @retval None
mbed_official 126:549ba18ddd81 402 */
mbed_official 126:549ba18ddd81 403 void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
mbed_official 126:549ba18ddd81 404 {
mbed_official 126:549ba18ddd81 405 uint32_t usartreg = 0x00, itpos = 0x00, itmask = 0x00;
mbed_official 126:549ba18ddd81 406 uint32_t usartxbase = 0x00;
mbed_official 126:549ba18ddd81 407 /* Check the parameters */
mbed_official 126:549ba18ddd81 408 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 409 assert_param(IS_USART_CONFIG_IT(USART_IT));
mbed_official 126:549ba18ddd81 410 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 411 /* The CTS interrupt is not available for UART4 and UART5 */
mbed_official 126:549ba18ddd81 412 if (USART_IT == USART_IT_CTS)
mbed_official 126:549ba18ddd81 413 {
mbed_official 126:549ba18ddd81 414 assert_param(IS_USART_123_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 415 }
mbed_official 126:549ba18ddd81 416
mbed_official 126:549ba18ddd81 417 usartxbase = (uint32_t)USARTx;
mbed_official 126:549ba18ddd81 418
mbed_official 126:549ba18ddd81 419 /* Get the USART register index */
mbed_official 126:549ba18ddd81 420 usartreg = (((uint8_t)USART_IT) >> 0x05);
mbed_official 126:549ba18ddd81 421
mbed_official 126:549ba18ddd81 422 /* Get the interrupt position */
mbed_official 126:549ba18ddd81 423 itpos = USART_IT & IT_Mask;
mbed_official 126:549ba18ddd81 424 itmask = (((uint32_t)0x01) << itpos);
mbed_official 126:549ba18ddd81 425
mbed_official 126:549ba18ddd81 426 if (usartreg == 0x01) /* The IT is in CR1 register */
mbed_official 126:549ba18ddd81 427 {
mbed_official 126:549ba18ddd81 428 usartxbase += 0x0C;
mbed_official 126:549ba18ddd81 429 }
mbed_official 126:549ba18ddd81 430 else if (usartreg == 0x02) /* The IT is in CR2 register */
mbed_official 126:549ba18ddd81 431 {
mbed_official 126:549ba18ddd81 432 usartxbase += 0x10;
mbed_official 126:549ba18ddd81 433 }
mbed_official 126:549ba18ddd81 434 else /* The IT is in CR3 register */
mbed_official 126:549ba18ddd81 435 {
mbed_official 126:549ba18ddd81 436 usartxbase += 0x14;
mbed_official 126:549ba18ddd81 437 }
mbed_official 126:549ba18ddd81 438 if (NewState != DISABLE)
mbed_official 126:549ba18ddd81 439 {
mbed_official 126:549ba18ddd81 440 *(__IO uint32_t*)usartxbase |= itmask;
mbed_official 126:549ba18ddd81 441 }
mbed_official 126:549ba18ddd81 442 else
mbed_official 126:549ba18ddd81 443 {
mbed_official 126:549ba18ddd81 444 *(__IO uint32_t*)usartxbase &= ~itmask;
mbed_official 126:549ba18ddd81 445 }
mbed_official 126:549ba18ddd81 446 }
mbed_official 126:549ba18ddd81 447
mbed_official 126:549ba18ddd81 448 /**
mbed_official 126:549ba18ddd81 449 * @brief Enables or disables the USART’s DMA interface.
mbed_official 126:549ba18ddd81 450 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 451 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 452 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 453 * @param USART_DMAReq: specifies the DMA request.
mbed_official 126:549ba18ddd81 454 * This parameter can be any combination of the following values:
mbed_official 126:549ba18ddd81 455 * @arg USART_DMAReq_Tx: USART DMA transmit request
mbed_official 126:549ba18ddd81 456 * @arg USART_DMAReq_Rx: USART DMA receive request
mbed_official 126:549ba18ddd81 457 * @param NewState: new state of the DMA Request sources.
mbed_official 126:549ba18ddd81 458 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 459 * @note The DMA mode is not available for UART5 except in the STM32
mbed_official 126:549ba18ddd81 460 * High density value line devices(STM32F10X_HD_VL).
mbed_official 126:549ba18ddd81 461 * @retval None
mbed_official 126:549ba18ddd81 462 */
mbed_official 126:549ba18ddd81 463 void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState)
mbed_official 126:549ba18ddd81 464 {
mbed_official 126:549ba18ddd81 465 /* Check the parameters */
mbed_official 126:549ba18ddd81 466 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 467 assert_param(IS_USART_DMAREQ(USART_DMAReq));
mbed_official 126:549ba18ddd81 468 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 469 if (NewState != DISABLE)
mbed_official 126:549ba18ddd81 470 {
mbed_official 126:549ba18ddd81 471 /* Enable the DMA transfer for selected requests by setting the DMAT and/or
mbed_official 126:549ba18ddd81 472 DMAR bits in the USART CR3 register */
mbed_official 126:549ba18ddd81 473 USARTx->CR3 |= USART_DMAReq;
mbed_official 126:549ba18ddd81 474 }
mbed_official 126:549ba18ddd81 475 else
mbed_official 126:549ba18ddd81 476 {
mbed_official 126:549ba18ddd81 477 /* Disable the DMA transfer for selected requests by clearing the DMAT and/or
mbed_official 126:549ba18ddd81 478 DMAR bits in the USART CR3 register */
mbed_official 126:549ba18ddd81 479 USARTx->CR3 &= (uint16_t)~USART_DMAReq;
mbed_official 126:549ba18ddd81 480 }
mbed_official 126:549ba18ddd81 481 }
mbed_official 126:549ba18ddd81 482
mbed_official 126:549ba18ddd81 483 /**
mbed_official 126:549ba18ddd81 484 * @brief Sets the address of the USART node.
mbed_official 126:549ba18ddd81 485 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 486 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 487 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 488 * @param USART_Address: Indicates the address of the USART node.
mbed_official 126:549ba18ddd81 489 * @retval None
mbed_official 126:549ba18ddd81 490 */
mbed_official 126:549ba18ddd81 491 void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address)
mbed_official 126:549ba18ddd81 492 {
mbed_official 126:549ba18ddd81 493 /* Check the parameters */
mbed_official 126:549ba18ddd81 494 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 495 assert_param(IS_USART_ADDRESS(USART_Address));
mbed_official 126:549ba18ddd81 496
mbed_official 126:549ba18ddd81 497 /* Clear the USART address */
mbed_official 126:549ba18ddd81 498 USARTx->CR2 &= CR2_Address_Mask;
mbed_official 126:549ba18ddd81 499 /* Set the USART address node */
mbed_official 126:549ba18ddd81 500 USARTx->CR2 |= USART_Address;
mbed_official 126:549ba18ddd81 501 }
mbed_official 126:549ba18ddd81 502
mbed_official 126:549ba18ddd81 503 /**
mbed_official 126:549ba18ddd81 504 * @brief Selects the USART WakeUp method.
mbed_official 126:549ba18ddd81 505 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 506 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 507 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 508 * @param USART_WakeUp: specifies the USART wakeup method.
mbed_official 126:549ba18ddd81 509 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 510 * @arg USART_WakeUp_IdleLine: WakeUp by an idle line detection
mbed_official 126:549ba18ddd81 511 * @arg USART_WakeUp_AddressMark: WakeUp by an address mark
mbed_official 126:549ba18ddd81 512 * @retval None
mbed_official 126:549ba18ddd81 513 */
mbed_official 126:549ba18ddd81 514 void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp)
mbed_official 126:549ba18ddd81 515 {
mbed_official 126:549ba18ddd81 516 /* Check the parameters */
mbed_official 126:549ba18ddd81 517 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 518 assert_param(IS_USART_WAKEUP(USART_WakeUp));
mbed_official 126:549ba18ddd81 519
mbed_official 126:549ba18ddd81 520 USARTx->CR1 &= CR1_WAKE_Mask;
mbed_official 126:549ba18ddd81 521 USARTx->CR1 |= USART_WakeUp;
mbed_official 126:549ba18ddd81 522 }
mbed_official 126:549ba18ddd81 523
mbed_official 126:549ba18ddd81 524 /**
mbed_official 126:549ba18ddd81 525 * @brief Determines if the USART is in mute mode or not.
mbed_official 126:549ba18ddd81 526 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 527 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 528 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 529 * @param NewState: new state of the USART mute mode.
mbed_official 126:549ba18ddd81 530 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 531 * @retval None
mbed_official 126:549ba18ddd81 532 */
mbed_official 126:549ba18ddd81 533 void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState)
mbed_official 126:549ba18ddd81 534 {
mbed_official 126:549ba18ddd81 535 /* Check the parameters */
mbed_official 126:549ba18ddd81 536 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 537 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 538
mbed_official 126:549ba18ddd81 539 if (NewState != DISABLE)
mbed_official 126:549ba18ddd81 540 {
mbed_official 126:549ba18ddd81 541 /* Enable the USART mute mode by setting the RWU bit in the CR1 register */
mbed_official 126:549ba18ddd81 542 USARTx->CR1 |= CR1_RWU_Set;
mbed_official 126:549ba18ddd81 543 }
mbed_official 126:549ba18ddd81 544 else
mbed_official 126:549ba18ddd81 545 {
mbed_official 126:549ba18ddd81 546 /* Disable the USART mute mode by clearing the RWU bit in the CR1 register */
mbed_official 126:549ba18ddd81 547 USARTx->CR1 &= CR1_RWU_Reset;
mbed_official 126:549ba18ddd81 548 }
mbed_official 126:549ba18ddd81 549 }
mbed_official 126:549ba18ddd81 550
mbed_official 126:549ba18ddd81 551 /**
mbed_official 126:549ba18ddd81 552 * @brief Sets the USART LIN Break detection length.
mbed_official 126:549ba18ddd81 553 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 554 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 555 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 556 * @param USART_LINBreakDetectLength: specifies the LIN break detection length.
mbed_official 126:549ba18ddd81 557 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 558 * @arg USART_LINBreakDetectLength_10b: 10-bit break detection
mbed_official 126:549ba18ddd81 559 * @arg USART_LINBreakDetectLength_11b: 11-bit break detection
mbed_official 126:549ba18ddd81 560 * @retval None
mbed_official 126:549ba18ddd81 561 */
mbed_official 126:549ba18ddd81 562 void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength)
mbed_official 126:549ba18ddd81 563 {
mbed_official 126:549ba18ddd81 564 /* Check the parameters */
mbed_official 126:549ba18ddd81 565 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 566 assert_param(IS_USART_LIN_BREAK_DETECT_LENGTH(USART_LINBreakDetectLength));
mbed_official 126:549ba18ddd81 567
mbed_official 126:549ba18ddd81 568 USARTx->CR2 &= CR2_LBDL_Mask;
mbed_official 126:549ba18ddd81 569 USARTx->CR2 |= USART_LINBreakDetectLength;
mbed_official 126:549ba18ddd81 570 }
mbed_official 126:549ba18ddd81 571
mbed_official 126:549ba18ddd81 572 /**
mbed_official 126:549ba18ddd81 573 * @brief Enables or disables the USART’s LIN mode.
mbed_official 126:549ba18ddd81 574 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 575 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 576 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 577 * @param NewState: new state of the USART LIN mode.
mbed_official 126:549ba18ddd81 578 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 579 * @retval None
mbed_official 126:549ba18ddd81 580 */
mbed_official 126:549ba18ddd81 581 void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState)
mbed_official 126:549ba18ddd81 582 {
mbed_official 126:549ba18ddd81 583 /* Check the parameters */
mbed_official 126:549ba18ddd81 584 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 585 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 586
mbed_official 126:549ba18ddd81 587 if (NewState != DISABLE)
mbed_official 126:549ba18ddd81 588 {
mbed_official 126:549ba18ddd81 589 /* Enable the LIN mode by setting the LINEN bit in the CR2 register */
mbed_official 126:549ba18ddd81 590 USARTx->CR2 |= CR2_LINEN_Set;
mbed_official 126:549ba18ddd81 591 }
mbed_official 126:549ba18ddd81 592 else
mbed_official 126:549ba18ddd81 593 {
mbed_official 126:549ba18ddd81 594 /* Disable the LIN mode by clearing the LINEN bit in the CR2 register */
mbed_official 126:549ba18ddd81 595 USARTx->CR2 &= CR2_LINEN_Reset;
mbed_official 126:549ba18ddd81 596 }
mbed_official 126:549ba18ddd81 597 }
mbed_official 126:549ba18ddd81 598
mbed_official 126:549ba18ddd81 599 /**
mbed_official 126:549ba18ddd81 600 * @brief Transmits single data through the USARTx peripheral.
mbed_official 126:549ba18ddd81 601 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 602 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 603 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 604 * @param Data: the data to transmit.
mbed_official 126:549ba18ddd81 605 * @retval None
mbed_official 126:549ba18ddd81 606 */
mbed_official 126:549ba18ddd81 607 void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
mbed_official 126:549ba18ddd81 608 {
mbed_official 126:549ba18ddd81 609 /* Check the parameters */
mbed_official 126:549ba18ddd81 610 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 611 assert_param(IS_USART_DATA(Data));
mbed_official 126:549ba18ddd81 612
mbed_official 126:549ba18ddd81 613 /* Transmit Data */
mbed_official 126:549ba18ddd81 614 USARTx->DR = (Data & (uint16_t)0x01FF);
mbed_official 126:549ba18ddd81 615 }
mbed_official 126:549ba18ddd81 616
mbed_official 126:549ba18ddd81 617 /**
mbed_official 126:549ba18ddd81 618 * @brief Returns the most recent received data by the USARTx peripheral.
mbed_official 126:549ba18ddd81 619 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 620 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 621 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 622 * @retval The received data.
mbed_official 126:549ba18ddd81 623 */
mbed_official 126:549ba18ddd81 624 uint16_t USART_ReceiveData(USART_TypeDef* USARTx)
mbed_official 126:549ba18ddd81 625 {
mbed_official 126:549ba18ddd81 626 /* Check the parameters */
mbed_official 126:549ba18ddd81 627 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 628
mbed_official 126:549ba18ddd81 629 /* Receive Data */
mbed_official 126:549ba18ddd81 630 return (uint16_t)(USARTx->DR & (uint16_t)0x01FF);
mbed_official 126:549ba18ddd81 631 }
mbed_official 126:549ba18ddd81 632
mbed_official 126:549ba18ddd81 633 /**
mbed_official 126:549ba18ddd81 634 * @brief Transmits break characters.
mbed_official 126:549ba18ddd81 635 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 636 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 637 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 638 * @retval None
mbed_official 126:549ba18ddd81 639 */
mbed_official 126:549ba18ddd81 640 void USART_SendBreak(USART_TypeDef* USARTx)
mbed_official 126:549ba18ddd81 641 {
mbed_official 126:549ba18ddd81 642 /* Check the parameters */
mbed_official 126:549ba18ddd81 643 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 644
mbed_official 126:549ba18ddd81 645 /* Send break characters */
mbed_official 126:549ba18ddd81 646 USARTx->CR1 |= CR1_SBK_Set;
mbed_official 126:549ba18ddd81 647 }
mbed_official 126:549ba18ddd81 648
mbed_official 126:549ba18ddd81 649 /**
mbed_official 126:549ba18ddd81 650 * @brief Sets the specified USART guard time.
mbed_official 126:549ba18ddd81 651 * @param USARTx: where x can be 1, 2 or 3 to select the USART peripheral.
mbed_official 126:549ba18ddd81 652 * @param USART_GuardTime: specifies the guard time.
mbed_official 126:549ba18ddd81 653 * @note The guard time bits are not available for UART4 and UART5.
mbed_official 126:549ba18ddd81 654 * @retval None
mbed_official 126:549ba18ddd81 655 */
mbed_official 126:549ba18ddd81 656 void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime)
mbed_official 126:549ba18ddd81 657 {
mbed_official 126:549ba18ddd81 658 /* Check the parameters */
mbed_official 126:549ba18ddd81 659 assert_param(IS_USART_123_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 660
mbed_official 126:549ba18ddd81 661 /* Clear the USART Guard time */
mbed_official 126:549ba18ddd81 662 USARTx->GTPR &= GTPR_LSB_Mask;
mbed_official 126:549ba18ddd81 663 /* Set the USART guard time */
mbed_official 126:549ba18ddd81 664 USARTx->GTPR |= (uint16_t)((uint16_t)USART_GuardTime << 0x08);
mbed_official 126:549ba18ddd81 665 }
mbed_official 126:549ba18ddd81 666
mbed_official 126:549ba18ddd81 667 /**
mbed_official 126:549ba18ddd81 668 * @brief Sets the system clock prescaler.
mbed_official 126:549ba18ddd81 669 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 670 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 671 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 672 * @param USART_Prescaler: specifies the prescaler clock.
mbed_official 126:549ba18ddd81 673 * @note The function is used for IrDA mode with UART4 and UART5.
mbed_official 126:549ba18ddd81 674 * @retval None
mbed_official 126:549ba18ddd81 675 */
mbed_official 126:549ba18ddd81 676 void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler)
mbed_official 126:549ba18ddd81 677 {
mbed_official 126:549ba18ddd81 678 /* Check the parameters */
mbed_official 126:549ba18ddd81 679 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 680
mbed_official 126:549ba18ddd81 681 /* Clear the USART prescaler */
mbed_official 126:549ba18ddd81 682 USARTx->GTPR &= GTPR_MSB_Mask;
mbed_official 126:549ba18ddd81 683 /* Set the USART prescaler */
mbed_official 126:549ba18ddd81 684 USARTx->GTPR |= USART_Prescaler;
mbed_official 126:549ba18ddd81 685 }
mbed_official 126:549ba18ddd81 686
mbed_official 126:549ba18ddd81 687 /**
mbed_official 126:549ba18ddd81 688 * @brief Enables or disables the USART’s Smart Card mode.
mbed_official 126:549ba18ddd81 689 * @param USARTx: where x can be 1, 2 or 3 to select the USART peripheral.
mbed_official 126:549ba18ddd81 690 * @param NewState: new state of the Smart Card mode.
mbed_official 126:549ba18ddd81 691 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 692 * @note The Smart Card mode is not available for UART4 and UART5.
mbed_official 126:549ba18ddd81 693 * @retval None
mbed_official 126:549ba18ddd81 694 */
mbed_official 126:549ba18ddd81 695 void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState)
mbed_official 126:549ba18ddd81 696 {
mbed_official 126:549ba18ddd81 697 /* Check the parameters */
mbed_official 126:549ba18ddd81 698 assert_param(IS_USART_123_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 699 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 700 if (NewState != DISABLE)
mbed_official 126:549ba18ddd81 701 {
mbed_official 126:549ba18ddd81 702 /* Enable the SC mode by setting the SCEN bit in the CR3 register */
mbed_official 126:549ba18ddd81 703 USARTx->CR3 |= CR3_SCEN_Set;
mbed_official 126:549ba18ddd81 704 }
mbed_official 126:549ba18ddd81 705 else
mbed_official 126:549ba18ddd81 706 {
mbed_official 126:549ba18ddd81 707 /* Disable the SC mode by clearing the SCEN bit in the CR3 register */
mbed_official 126:549ba18ddd81 708 USARTx->CR3 &= CR3_SCEN_Reset;
mbed_official 126:549ba18ddd81 709 }
mbed_official 126:549ba18ddd81 710 }
mbed_official 126:549ba18ddd81 711
mbed_official 126:549ba18ddd81 712 /**
mbed_official 126:549ba18ddd81 713 * @brief Enables or disables NACK transmission.
mbed_official 126:549ba18ddd81 714 * @param USARTx: where x can be 1, 2 or 3 to select the USART peripheral.
mbed_official 126:549ba18ddd81 715 * @param NewState: new state of the NACK transmission.
mbed_official 126:549ba18ddd81 716 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 717 * @note The Smart Card mode is not available for UART4 and UART5.
mbed_official 126:549ba18ddd81 718 * @retval None
mbed_official 126:549ba18ddd81 719 */
mbed_official 126:549ba18ddd81 720 void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState)
mbed_official 126:549ba18ddd81 721 {
mbed_official 126:549ba18ddd81 722 /* Check the parameters */
mbed_official 126:549ba18ddd81 723 assert_param(IS_USART_123_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 724 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 725 if (NewState != DISABLE)
mbed_official 126:549ba18ddd81 726 {
mbed_official 126:549ba18ddd81 727 /* Enable the NACK transmission by setting the NACK bit in the CR3 register */
mbed_official 126:549ba18ddd81 728 USARTx->CR3 |= CR3_NACK_Set;
mbed_official 126:549ba18ddd81 729 }
mbed_official 126:549ba18ddd81 730 else
mbed_official 126:549ba18ddd81 731 {
mbed_official 126:549ba18ddd81 732 /* Disable the NACK transmission by clearing the NACK bit in the CR3 register */
mbed_official 126:549ba18ddd81 733 USARTx->CR3 &= CR3_NACK_Reset;
mbed_official 126:549ba18ddd81 734 }
mbed_official 126:549ba18ddd81 735 }
mbed_official 126:549ba18ddd81 736
mbed_official 126:549ba18ddd81 737 /**
mbed_official 126:549ba18ddd81 738 * @brief Enables or disables the USART’s Half Duplex communication.
mbed_official 126:549ba18ddd81 739 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 740 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 741 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 742 * @param NewState: new state of the USART Communication.
mbed_official 126:549ba18ddd81 743 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 744 * @retval None
mbed_official 126:549ba18ddd81 745 */
mbed_official 126:549ba18ddd81 746 void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState)
mbed_official 126:549ba18ddd81 747 {
mbed_official 126:549ba18ddd81 748 /* Check the parameters */
mbed_official 126:549ba18ddd81 749 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 750 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 751
mbed_official 126:549ba18ddd81 752 if (NewState != DISABLE)
mbed_official 126:549ba18ddd81 753 {
mbed_official 126:549ba18ddd81 754 /* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */
mbed_official 126:549ba18ddd81 755 USARTx->CR3 |= CR3_HDSEL_Set;
mbed_official 126:549ba18ddd81 756 }
mbed_official 126:549ba18ddd81 757 else
mbed_official 126:549ba18ddd81 758 {
mbed_official 126:549ba18ddd81 759 /* Disable the Half-Duplex mode by clearing the HDSEL bit in the CR3 register */
mbed_official 126:549ba18ddd81 760 USARTx->CR3 &= CR3_HDSEL_Reset;
mbed_official 126:549ba18ddd81 761 }
mbed_official 126:549ba18ddd81 762 }
mbed_official 126:549ba18ddd81 763
mbed_official 126:549ba18ddd81 764
mbed_official 126:549ba18ddd81 765 /**
mbed_official 126:549ba18ddd81 766 * @brief Enables or disables the USART's 8x oversampling mode.
mbed_official 126:549ba18ddd81 767 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 768 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 769 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 770 * @param NewState: new state of the USART one bit sampling method.
mbed_official 126:549ba18ddd81 771 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 772 * @note
mbed_official 126:549ba18ddd81 773 * This function has to be called before calling USART_Init()
mbed_official 126:549ba18ddd81 774 * function in order to have correct baudrate Divider value.
mbed_official 126:549ba18ddd81 775 * @retval None
mbed_official 126:549ba18ddd81 776 */
mbed_official 126:549ba18ddd81 777 void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState)
mbed_official 126:549ba18ddd81 778 {
mbed_official 126:549ba18ddd81 779 /* Check the parameters */
mbed_official 126:549ba18ddd81 780 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 781 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 782
mbed_official 126:549ba18ddd81 783 if (NewState != DISABLE)
mbed_official 126:549ba18ddd81 784 {
mbed_official 126:549ba18ddd81 785 /* Enable the 8x Oversampling mode by setting the OVER8 bit in the CR1 register */
mbed_official 126:549ba18ddd81 786 USARTx->CR1 |= CR1_OVER8_Set;
mbed_official 126:549ba18ddd81 787 }
mbed_official 126:549ba18ddd81 788 else
mbed_official 126:549ba18ddd81 789 {
mbed_official 126:549ba18ddd81 790 /* Disable the 8x Oversampling mode by clearing the OVER8 bit in the CR1 register */
mbed_official 126:549ba18ddd81 791 USARTx->CR1 &= CR1_OVER8_Reset;
mbed_official 126:549ba18ddd81 792 }
mbed_official 126:549ba18ddd81 793 }
mbed_official 126:549ba18ddd81 794
mbed_official 126:549ba18ddd81 795 /**
mbed_official 126:549ba18ddd81 796 * @brief Enables or disables the USART's one bit sampling method.
mbed_official 126:549ba18ddd81 797 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 798 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 799 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 800 * @param NewState: new state of the USART one bit sampling method.
mbed_official 126:549ba18ddd81 801 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 802 * @retval None
mbed_official 126:549ba18ddd81 803 */
mbed_official 126:549ba18ddd81 804 void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState)
mbed_official 126:549ba18ddd81 805 {
mbed_official 126:549ba18ddd81 806 /* Check the parameters */
mbed_official 126:549ba18ddd81 807 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 808 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 809
mbed_official 126:549ba18ddd81 810 if (NewState != DISABLE)
mbed_official 126:549ba18ddd81 811 {
mbed_official 126:549ba18ddd81 812 /* Enable the one bit method by setting the ONEBITE bit in the CR3 register */
mbed_official 126:549ba18ddd81 813 USARTx->CR3 |= CR3_ONEBITE_Set;
mbed_official 126:549ba18ddd81 814 }
mbed_official 126:549ba18ddd81 815 else
mbed_official 126:549ba18ddd81 816 {
mbed_official 126:549ba18ddd81 817 /* Disable tthe one bit method by clearing the ONEBITE bit in the CR3 register */
mbed_official 126:549ba18ddd81 818 USARTx->CR3 &= CR3_ONEBITE_Reset;
mbed_official 126:549ba18ddd81 819 }
mbed_official 126:549ba18ddd81 820 }
mbed_official 126:549ba18ddd81 821
mbed_official 126:549ba18ddd81 822 /**
mbed_official 126:549ba18ddd81 823 * @brief Configures the USART's IrDA interface.
mbed_official 126:549ba18ddd81 824 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 825 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 826 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 827 * @param USART_IrDAMode: specifies the IrDA mode.
mbed_official 126:549ba18ddd81 828 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 829 * @arg USART_IrDAMode_LowPower
mbed_official 126:549ba18ddd81 830 * @arg USART_IrDAMode_Normal
mbed_official 126:549ba18ddd81 831 * @retval None
mbed_official 126:549ba18ddd81 832 */
mbed_official 126:549ba18ddd81 833 void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode)
mbed_official 126:549ba18ddd81 834 {
mbed_official 126:549ba18ddd81 835 /* Check the parameters */
mbed_official 126:549ba18ddd81 836 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 837 assert_param(IS_USART_IRDA_MODE(USART_IrDAMode));
mbed_official 126:549ba18ddd81 838
mbed_official 126:549ba18ddd81 839 USARTx->CR3 &= CR3_IRLP_Mask;
mbed_official 126:549ba18ddd81 840 USARTx->CR3 |= USART_IrDAMode;
mbed_official 126:549ba18ddd81 841 }
mbed_official 126:549ba18ddd81 842
mbed_official 126:549ba18ddd81 843 /**
mbed_official 126:549ba18ddd81 844 * @brief Enables or disables the USART's IrDA interface.
mbed_official 126:549ba18ddd81 845 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 846 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 847 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 848 * @param NewState: new state of the IrDA mode.
mbed_official 126:549ba18ddd81 849 * This parameter can be: ENABLE or DISABLE.
mbed_official 126:549ba18ddd81 850 * @retval None
mbed_official 126:549ba18ddd81 851 */
mbed_official 126:549ba18ddd81 852 void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState)
mbed_official 126:549ba18ddd81 853 {
mbed_official 126:549ba18ddd81 854 /* Check the parameters */
mbed_official 126:549ba18ddd81 855 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 856 assert_param(IS_FUNCTIONAL_STATE(NewState));
mbed_official 126:549ba18ddd81 857
mbed_official 126:549ba18ddd81 858 if (NewState != DISABLE)
mbed_official 126:549ba18ddd81 859 {
mbed_official 126:549ba18ddd81 860 /* Enable the IrDA mode by setting the IREN bit in the CR3 register */
mbed_official 126:549ba18ddd81 861 USARTx->CR3 |= CR3_IREN_Set;
mbed_official 126:549ba18ddd81 862 }
mbed_official 126:549ba18ddd81 863 else
mbed_official 126:549ba18ddd81 864 {
mbed_official 126:549ba18ddd81 865 /* Disable the IrDA mode by clearing the IREN bit in the CR3 register */
mbed_official 126:549ba18ddd81 866 USARTx->CR3 &= CR3_IREN_Reset;
mbed_official 126:549ba18ddd81 867 }
mbed_official 126:549ba18ddd81 868 }
mbed_official 126:549ba18ddd81 869
mbed_official 126:549ba18ddd81 870 /**
mbed_official 126:549ba18ddd81 871 * @brief Checks whether the specified USART flag is set or not.
mbed_official 126:549ba18ddd81 872 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 873 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 874 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 875 * @param USART_FLAG: specifies the flag to check.
mbed_official 126:549ba18ddd81 876 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 877 * @arg USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5)
mbed_official 126:549ba18ddd81 878 * @arg USART_FLAG_LBD: LIN Break detection flag
mbed_official 126:549ba18ddd81 879 * @arg USART_FLAG_TXE: Transmit data register empty flag
mbed_official 126:549ba18ddd81 880 * @arg USART_FLAG_TC: Transmission Complete flag
mbed_official 126:549ba18ddd81 881 * @arg USART_FLAG_RXNE: Receive data register not empty flag
mbed_official 126:549ba18ddd81 882 * @arg USART_FLAG_IDLE: Idle Line detection flag
mbed_official 126:549ba18ddd81 883 * @arg USART_FLAG_ORE: OverRun Error flag
mbed_official 126:549ba18ddd81 884 * @arg USART_FLAG_NE: Noise Error flag
mbed_official 126:549ba18ddd81 885 * @arg USART_FLAG_FE: Framing Error flag
mbed_official 126:549ba18ddd81 886 * @arg USART_FLAG_PE: Parity Error flag
mbed_official 126:549ba18ddd81 887 * @retval The new state of USART_FLAG (SET or RESET).
mbed_official 126:549ba18ddd81 888 */
mbed_official 126:549ba18ddd81 889 FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)
mbed_official 126:549ba18ddd81 890 {
mbed_official 126:549ba18ddd81 891 FlagStatus bitstatus = RESET;
mbed_official 126:549ba18ddd81 892 /* Check the parameters */
mbed_official 126:549ba18ddd81 893 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 894 assert_param(IS_USART_FLAG(USART_FLAG));
mbed_official 126:549ba18ddd81 895 /* The CTS flag is not available for UART4 and UART5 */
mbed_official 126:549ba18ddd81 896 if (USART_FLAG == USART_FLAG_CTS)
mbed_official 126:549ba18ddd81 897 {
mbed_official 126:549ba18ddd81 898 assert_param(IS_USART_123_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 899 }
mbed_official 126:549ba18ddd81 900
mbed_official 126:549ba18ddd81 901 if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET)
mbed_official 126:549ba18ddd81 902 {
mbed_official 126:549ba18ddd81 903 bitstatus = SET;
mbed_official 126:549ba18ddd81 904 }
mbed_official 126:549ba18ddd81 905 else
mbed_official 126:549ba18ddd81 906 {
mbed_official 126:549ba18ddd81 907 bitstatus = RESET;
mbed_official 126:549ba18ddd81 908 }
mbed_official 126:549ba18ddd81 909 return bitstatus;
mbed_official 126:549ba18ddd81 910 }
mbed_official 126:549ba18ddd81 911
mbed_official 126:549ba18ddd81 912 /**
mbed_official 126:549ba18ddd81 913 * @brief Clears the USARTx's pending flags.
mbed_official 126:549ba18ddd81 914 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 915 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 916 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 917 * @param USART_FLAG: specifies the flag to clear.
mbed_official 126:549ba18ddd81 918 * This parameter can be any combination of the following values:
mbed_official 126:549ba18ddd81 919 * @arg USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5).
mbed_official 126:549ba18ddd81 920 * @arg USART_FLAG_LBD: LIN Break detection flag.
mbed_official 126:549ba18ddd81 921 * @arg USART_FLAG_TC: Transmission Complete flag.
mbed_official 126:549ba18ddd81 922 * @arg USART_FLAG_RXNE: Receive data register not empty flag.
mbed_official 126:549ba18ddd81 923 *
mbed_official 126:549ba18ddd81 924 * @note
mbed_official 126:549ba18ddd81 925 * - PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun
mbed_official 126:549ba18ddd81 926 * error) and IDLE (Idle line detected) flags are cleared by software
mbed_official 126:549ba18ddd81 927 * sequence: a read operation to USART_SR register (USART_GetFlagStatus())
mbed_official 126:549ba18ddd81 928 * followed by a read operation to USART_DR register (USART_ReceiveData()).
mbed_official 126:549ba18ddd81 929 * - RXNE flag can be also cleared by a read to the USART_DR register
mbed_official 126:549ba18ddd81 930 * (USART_ReceiveData()).
mbed_official 126:549ba18ddd81 931 * - TC flag can be also cleared by software sequence: a read operation to
mbed_official 126:549ba18ddd81 932 * USART_SR register (USART_GetFlagStatus()) followed by a write operation
mbed_official 126:549ba18ddd81 933 * to USART_DR register (USART_SendData()).
mbed_official 126:549ba18ddd81 934 * - TXE flag is cleared only by a write to the USART_DR register
mbed_official 126:549ba18ddd81 935 * (USART_SendData()).
mbed_official 126:549ba18ddd81 936 * @retval None
mbed_official 126:549ba18ddd81 937 */
mbed_official 126:549ba18ddd81 938 void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG)
mbed_official 126:549ba18ddd81 939 {
mbed_official 126:549ba18ddd81 940 /* Check the parameters */
mbed_official 126:549ba18ddd81 941 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 942 assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));
mbed_official 126:549ba18ddd81 943 /* The CTS flag is not available for UART4 and UART5 */
mbed_official 126:549ba18ddd81 944 if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS)
mbed_official 126:549ba18ddd81 945 {
mbed_official 126:549ba18ddd81 946 assert_param(IS_USART_123_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 947 }
mbed_official 126:549ba18ddd81 948
mbed_official 126:549ba18ddd81 949 USARTx->SR = (uint16_t)~USART_FLAG;
mbed_official 126:549ba18ddd81 950 }
mbed_official 126:549ba18ddd81 951
mbed_official 126:549ba18ddd81 952 /**
mbed_official 126:549ba18ddd81 953 * @brief Checks whether the specified USART interrupt has occurred or not.
mbed_official 126:549ba18ddd81 954 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 955 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 956 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 957 * @param USART_IT: specifies the USART interrupt source to check.
mbed_official 126:549ba18ddd81 958 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 959 * @arg USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5)
mbed_official 126:549ba18ddd81 960 * @arg USART_IT_LBD: LIN Break detection interrupt
mbed_official 126:549ba18ddd81 961 * @arg USART_IT_TXE: Tansmit Data Register empty interrupt
mbed_official 126:549ba18ddd81 962 * @arg USART_IT_TC: Transmission complete interrupt
mbed_official 126:549ba18ddd81 963 * @arg USART_IT_RXNE: Receive Data register not empty interrupt
mbed_official 126:549ba18ddd81 964 * @arg USART_IT_IDLE: Idle line detection interrupt
mbed_official 126:549ba18ddd81 965 * @arg USART_IT_ORE_RX : OverRun Error interrupt if the RXNEIE bit is set
mbed_official 126:549ba18ddd81 966 * @arg USART_IT_ORE_ER : OverRun Error interrupt if the EIE bit is set
mbed_official 126:549ba18ddd81 967 * @arg USART_IT_NE: Noise Error interrupt
mbed_official 126:549ba18ddd81 968 * @arg USART_IT_FE: Framing Error interrupt
mbed_official 126:549ba18ddd81 969 * @arg USART_IT_PE: Parity Error interrupt
mbed_official 126:549ba18ddd81 970 * @retval The new state of USART_IT (SET or RESET).
mbed_official 126:549ba18ddd81 971 */
mbed_official 126:549ba18ddd81 972 ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
mbed_official 126:549ba18ddd81 973 {
mbed_official 126:549ba18ddd81 974 uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;
mbed_official 126:549ba18ddd81 975 ITStatus bitstatus = RESET;
mbed_official 126:549ba18ddd81 976 /* Check the parameters */
mbed_official 126:549ba18ddd81 977 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 978 assert_param(IS_USART_GET_IT(USART_IT));
mbed_official 126:549ba18ddd81 979 /* The CTS interrupt is not available for UART4 and UART5 */
mbed_official 126:549ba18ddd81 980 if (USART_IT == USART_IT_CTS)
mbed_official 126:549ba18ddd81 981 {
mbed_official 126:549ba18ddd81 982 assert_param(IS_USART_123_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 983 }
mbed_official 126:549ba18ddd81 984
mbed_official 126:549ba18ddd81 985 /* Get the USART register index */
mbed_official 126:549ba18ddd81 986 usartreg = (((uint8_t)USART_IT) >> 0x05);
mbed_official 126:549ba18ddd81 987 /* Get the interrupt position */
mbed_official 126:549ba18ddd81 988 itmask = USART_IT & IT_Mask;
mbed_official 126:549ba18ddd81 989 itmask = (uint32_t)0x01 << itmask;
mbed_official 126:549ba18ddd81 990
mbed_official 126:549ba18ddd81 991 if (usartreg == 0x01) /* The IT is in CR1 register */
mbed_official 126:549ba18ddd81 992 {
mbed_official 126:549ba18ddd81 993 itmask &= USARTx->CR1;
mbed_official 126:549ba18ddd81 994 }
mbed_official 126:549ba18ddd81 995 else if (usartreg == 0x02) /* The IT is in CR2 register */
mbed_official 126:549ba18ddd81 996 {
mbed_official 126:549ba18ddd81 997 itmask &= USARTx->CR2;
mbed_official 126:549ba18ddd81 998 }
mbed_official 126:549ba18ddd81 999 else /* The IT is in CR3 register */
mbed_official 126:549ba18ddd81 1000 {
mbed_official 126:549ba18ddd81 1001 itmask &= USARTx->CR3;
mbed_official 126:549ba18ddd81 1002 }
mbed_official 126:549ba18ddd81 1003
mbed_official 126:549ba18ddd81 1004 bitpos = USART_IT >> 0x08;
mbed_official 126:549ba18ddd81 1005 bitpos = (uint32_t)0x01 << bitpos;
mbed_official 126:549ba18ddd81 1006 bitpos &= USARTx->SR;
mbed_official 126:549ba18ddd81 1007 if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))
mbed_official 126:549ba18ddd81 1008 {
mbed_official 126:549ba18ddd81 1009 bitstatus = SET;
mbed_official 126:549ba18ddd81 1010 }
mbed_official 126:549ba18ddd81 1011 else
mbed_official 126:549ba18ddd81 1012 {
mbed_official 126:549ba18ddd81 1013 bitstatus = RESET;
mbed_official 126:549ba18ddd81 1014 }
mbed_official 126:549ba18ddd81 1015
mbed_official 126:549ba18ddd81 1016 return bitstatus;
mbed_official 126:549ba18ddd81 1017 }
mbed_official 126:549ba18ddd81 1018
mbed_official 126:549ba18ddd81 1019 /**
mbed_official 126:549ba18ddd81 1020 * @brief Clears the USARTx's interrupt pending bits.
mbed_official 126:549ba18ddd81 1021 * @param USARTx: Select the USART or the UART peripheral.
mbed_official 126:549ba18ddd81 1022 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 1023 * USART1, USART2, USART3, UART4 or UART5.
mbed_official 126:549ba18ddd81 1024 * @param USART_IT: specifies the interrupt pending bit to clear.
mbed_official 126:549ba18ddd81 1025 * This parameter can be one of the following values:
mbed_official 126:549ba18ddd81 1026 * @arg USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5)
mbed_official 126:549ba18ddd81 1027 * @arg USART_IT_LBD: LIN Break detection interrupt
mbed_official 126:549ba18ddd81 1028 * @arg USART_IT_TC: Transmission complete interrupt.
mbed_official 126:549ba18ddd81 1029 * @arg USART_IT_RXNE: Receive Data register not empty interrupt.
mbed_official 126:549ba18ddd81 1030 *
mbed_official 126:549ba18ddd81 1031 * @note
mbed_official 126:549ba18ddd81 1032 * - PE (Parity error), FE (Framing error), NE (Noise error), ORE (OverRun
mbed_official 126:549ba18ddd81 1033 * error) and IDLE (Idle line detected) pending bits are cleared by
mbed_official 126:549ba18ddd81 1034 * software sequence: a read operation to USART_SR register
mbed_official 126:549ba18ddd81 1035 * (USART_GetITStatus()) followed by a read operation to USART_DR register
mbed_official 126:549ba18ddd81 1036 * (USART_ReceiveData()).
mbed_official 126:549ba18ddd81 1037 * - RXNE pending bit can be also cleared by a read to the USART_DR register
mbed_official 126:549ba18ddd81 1038 * (USART_ReceiveData()).
mbed_official 126:549ba18ddd81 1039 * - TC pending bit can be also cleared by software sequence: a read
mbed_official 126:549ba18ddd81 1040 * operation to USART_SR register (USART_GetITStatus()) followed by a write
mbed_official 126:549ba18ddd81 1041 * operation to USART_DR register (USART_SendData()).
mbed_official 126:549ba18ddd81 1042 * - TXE pending bit is cleared only by a write to the USART_DR register
mbed_official 126:549ba18ddd81 1043 * (USART_SendData()).
mbed_official 126:549ba18ddd81 1044 * @retval None
mbed_official 126:549ba18ddd81 1045 */
mbed_official 126:549ba18ddd81 1046 void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT)
mbed_official 126:549ba18ddd81 1047 {
mbed_official 126:549ba18ddd81 1048 uint16_t bitpos = 0x00, itmask = 0x00;
mbed_official 126:549ba18ddd81 1049 /* Check the parameters */
mbed_official 126:549ba18ddd81 1050 assert_param(IS_USART_ALL_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 1051 assert_param(IS_USART_CLEAR_IT(USART_IT));
mbed_official 126:549ba18ddd81 1052 /* The CTS interrupt is not available for UART4 and UART5 */
mbed_official 126:549ba18ddd81 1053 if (USART_IT == USART_IT_CTS)
mbed_official 126:549ba18ddd81 1054 {
mbed_official 126:549ba18ddd81 1055 assert_param(IS_USART_123_PERIPH(USARTx));
mbed_official 126:549ba18ddd81 1056 }
mbed_official 126:549ba18ddd81 1057
mbed_official 126:549ba18ddd81 1058 bitpos = USART_IT >> 0x08;
mbed_official 126:549ba18ddd81 1059 itmask = ((uint16_t)0x01 << (uint16_t)bitpos);
mbed_official 126:549ba18ddd81 1060 USARTx->SR = (uint16_t)~itmask;
mbed_official 126:549ba18ddd81 1061 }
mbed_official 126:549ba18ddd81 1062 /**
mbed_official 126:549ba18ddd81 1063 * @}
mbed_official 126:549ba18ddd81 1064 */
mbed_official 126:549ba18ddd81 1065
mbed_official 126:549ba18ddd81 1066 /**
mbed_official 126:549ba18ddd81 1067 * @}
mbed_official 126:549ba18ddd81 1068 */
mbed_official 126:549ba18ddd81 1069
mbed_official 126:549ba18ddd81 1070 /**
mbed_official 126:549ba18ddd81 1071 * @}
mbed_official 126:549ba18ddd81 1072 */
mbed_official 126:549ba18ddd81 1073
mbed_official 126:549ba18ddd81 1074 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/