mbed library with additional peripherals for ST F401 board

Fork of mbed-src by mbed official

This mbed LIB has additional peripherals for ST F401 board

  • UART2 : PA_3 rx, PA_2 tx
  • UART3 : PC_7 rx, PC_6 tx
  • I2C2 : PB_3 SDA, PB_10 SCL
  • I2C3 : PB_4 SDA, PA_8 SCL
Committer:
mbed_official
Date:
Mon Jan 27 14:30:07 2014 +0000
Revision:
76:aeb1df146756
Child:
80:66393a7b209d
Synchronized with git revision a31ec9c5f7bcb5c8a1b2eced103f6a1dfa921abd

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

Add NUCLEO_L152RE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 76:aeb1df146756 1 /**
mbed_official 76:aeb1df146756 2 ******************************************************************************
mbed_official 76:aeb1df146756 3 * @file stm32l1xx_gpio.c
mbed_official 76:aeb1df146756 4 * @author MCD Application Team
mbed_official 76:aeb1df146756 5 * @version V1.2.0
mbed_official 76:aeb1df146756 6 * @date 22-February-2013
mbed_official 76:aeb1df146756 7 * @brief This file provides firmware functions to manage the following
mbed_official 76:aeb1df146756 8 * functionalities of the GPIO peripheral:
mbed_official 76:aeb1df146756 9 * + Initialization and Configuration
mbed_official 76:aeb1df146756 10 * + GPIO Read and Write
mbed_official 76:aeb1df146756 11 * + GPIO Alternate functions configuration
mbed_official 76:aeb1df146756 12 *
mbed_official 76:aeb1df146756 13 * @verbatim
mbed_official 76:aeb1df146756 14 ===========================================================================
mbed_official 76:aeb1df146756 15 ##### How to use this driver #####
mbed_official 76:aeb1df146756 16 ===========================================================================
mbed_official 76:aeb1df146756 17 [..]
mbed_official 76:aeb1df146756 18 (#) Enable the GPIO AHB clock using RCC_AHBPeriphClockCmd()
mbed_official 76:aeb1df146756 19 (#) Configure the GPIO pin(s) using GPIO_Init()
mbed_official 76:aeb1df146756 20 Four possible configuration are available for each pin:
mbed_official 76:aeb1df146756 21 (++) Input: Floating, Pull-up, Pull-down.
mbed_official 76:aeb1df146756 22 (++) Output: Push-Pull (Pull-up, Pull-down or no Pull)
mbed_official 76:aeb1df146756 23 Open Drain (Pull-up, Pull-down or no Pull).
mbed_official 76:aeb1df146756 24 In output mode, the speed is configurable: Very Low, Low,
mbed_official 76:aeb1df146756 25 Medium or High.
mbed_official 76:aeb1df146756 26 (++) Alternate Function: Push-Pull (Pull-up, Pull-down or no Pull)
mbed_official 76:aeb1df146756 27 Open Drain (Pull-up, Pull-down or no Pull).
mbed_official 76:aeb1df146756 28 (++) Analog: required mode when a pin is to be used as ADC channel,
mbed_official 76:aeb1df146756 29 DAC output or comparator input.
mbed_official 76:aeb1df146756 30 (#) Peripherals alternate function:
mbed_official 76:aeb1df146756 31 (++) For ADC, DAC and comparators, configure the desired pin in
mbed_official 76:aeb1df146756 32 analog mode using GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AN
mbed_official 76:aeb1df146756 33 (++) For other peripherals (TIM, USART...):
mbed_official 76:aeb1df146756 34 (+++) Connect the pin to the desired peripherals' Alternate
mbed_official 76:aeb1df146756 35 Function (AF) using GPIO_PinAFConfig() function.
mbed_official 76:aeb1df146756 36 (+++) Configure the desired pin in alternate function mode using
mbed_official 76:aeb1df146756 37 GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF
mbed_official 76:aeb1df146756 38 (+++) Select the type, pull-up/pull-down and output speed via
mbed_official 76:aeb1df146756 39 GPIO_PuPd, GPIO_OType and GPIO_Speed members.
mbed_official 76:aeb1df146756 40 (+++) Call GPIO_Init() function.
mbed_official 76:aeb1df146756 41 (#) To get the level of a pin configured in input mode use GPIO_ReadInputDataBit()
mbed_official 76:aeb1df146756 42 (#) To set/reset the level of a pin configured in output mode use
mbed_official 76:aeb1df146756 43 GPIO_SetBits()/GPIO_ResetBits()
mbed_official 76:aeb1df146756 44 (#) During and just after reset, the alternate functions are not
mbed_official 76:aeb1df146756 45 active and the GPIO pins are configured in input floating mode
mbed_official 76:aeb1df146756 46 (except JTAG pins).
mbed_official 76:aeb1df146756 47 (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as
mbed_official 76:aeb1df146756 48 general-purpose (PC14 and PC15, respectively) when the LSE
mbed_official 76:aeb1df146756 49 oscillator is off. The LSE has priority over the GPIO function.
mbed_official 76:aeb1df146756 50 (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as
mbed_official 76:aeb1df146756 51 general-purpose PH0 and PH1, respectively, when the HSE
mbed_official 76:aeb1df146756 52 oscillator is off. The HSE has priority over the GPIO function.
mbed_official 76:aeb1df146756 53 @endverbatim
mbed_official 76:aeb1df146756 54 *
mbed_official 76:aeb1df146756 55 ******************************************************************************
mbed_official 76:aeb1df146756 56 * @attention
mbed_official 76:aeb1df146756 57 *
mbed_official 76:aeb1df146756 58 * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
mbed_official 76:aeb1df146756 59 *
mbed_official 76:aeb1df146756 60 * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
mbed_official 76:aeb1df146756 61 * You may not use this file except in compliance with the License.
mbed_official 76:aeb1df146756 62 * You may obtain a copy of the License at:
mbed_official 76:aeb1df146756 63 *
mbed_official 76:aeb1df146756 64 * http://www.st.com/software_license_agreement_liberty_v2
mbed_official 76:aeb1df146756 65 *
mbed_official 76:aeb1df146756 66 * Unless required by applicable law or agreed to in writing, software
mbed_official 76:aeb1df146756 67 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 76:aeb1df146756 68 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 76:aeb1df146756 69 * See the License for the specific language governing permissions and
mbed_official 76:aeb1df146756 70 * limitations under the License.
mbed_official 76:aeb1df146756 71 *
mbed_official 76:aeb1df146756 72 ******************************************************************************
mbed_official 76:aeb1df146756 73 */
mbed_official 76:aeb1df146756 74
mbed_official 76:aeb1df146756 75 /* Includes ------------------------------------------------------------------*/
mbed_official 76:aeb1df146756 76 #include "stm32l1xx_gpio.h"
mbed_official 76:aeb1df146756 77 #include "stm32l1xx_rcc.h"
mbed_official 76:aeb1df146756 78
mbed_official 76:aeb1df146756 79 /** @addtogroup STM32L1xx_StdPeriph_Driver
mbed_official 76:aeb1df146756 80 * @{
mbed_official 76:aeb1df146756 81 */
mbed_official 76:aeb1df146756 82
mbed_official 76:aeb1df146756 83 /** @defgroup GPIO
mbed_official 76:aeb1df146756 84 * @brief GPIO driver modules
mbed_official 76:aeb1df146756 85 * @{
mbed_official 76:aeb1df146756 86 */
mbed_official 76:aeb1df146756 87
mbed_official 76:aeb1df146756 88 /* Private typedef -----------------------------------------------------------*/
mbed_official 76:aeb1df146756 89 /* Private define ------------------------------------------------------------*/
mbed_official 76:aeb1df146756 90 /* Private macro -------------------------------------------------------------*/
mbed_official 76:aeb1df146756 91 /* Private variables ---------------------------------------------------------*/
mbed_official 76:aeb1df146756 92 /* Private function prototypes -----------------------------------------------*/
mbed_official 76:aeb1df146756 93 /* Private functions ---------------------------------------------------------*/
mbed_official 76:aeb1df146756 94
mbed_official 76:aeb1df146756 95 /** @defgroup GPIO_Private_Functions
mbed_official 76:aeb1df146756 96 * @{
mbed_official 76:aeb1df146756 97 */
mbed_official 76:aeb1df146756 98
mbed_official 76:aeb1df146756 99 /** @defgroup GPIO_Group1 Initialization and Configuration
mbed_official 76:aeb1df146756 100 * @brief Initialization and Configuration
mbed_official 76:aeb1df146756 101 *
mbed_official 76:aeb1df146756 102 @verbatim
mbed_official 76:aeb1df146756 103 ===============================================================================
mbed_official 76:aeb1df146756 104 ##### Initialization and Configuration #####
mbed_official 76:aeb1df146756 105 ===============================================================================
mbed_official 76:aeb1df146756 106
mbed_official 76:aeb1df146756 107 @endverbatim
mbed_official 76:aeb1df146756 108 * @{
mbed_official 76:aeb1df146756 109 */
mbed_official 76:aeb1df146756 110
mbed_official 76:aeb1df146756 111 /**
mbed_official 76:aeb1df146756 112 * @brief Deinitializes the GPIOx peripheral registers to their default reset
mbed_official 76:aeb1df146756 113 * values.
mbed_official 76:aeb1df146756 114 * By default, The GPIO pins are configured in input floating mode
mbed_official 76:aeb1df146756 115 * (except JTAG pins).
mbed_official 76:aeb1df146756 116 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 117 * @retval None
mbed_official 76:aeb1df146756 118 */
mbed_official 76:aeb1df146756 119 void GPIO_DeInit(GPIO_TypeDef* GPIOx)
mbed_official 76:aeb1df146756 120 {
mbed_official 76:aeb1df146756 121 /* Check the parameters */
mbed_official 76:aeb1df146756 122 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 123
mbed_official 76:aeb1df146756 124 if(GPIOx == GPIOA)
mbed_official 76:aeb1df146756 125 {
mbed_official 76:aeb1df146756 126 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOA, ENABLE);
mbed_official 76:aeb1df146756 127 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOA, DISABLE);
mbed_official 76:aeb1df146756 128 }
mbed_official 76:aeb1df146756 129 else if(GPIOx == GPIOB)
mbed_official 76:aeb1df146756 130 {
mbed_official 76:aeb1df146756 131 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOB, ENABLE);
mbed_official 76:aeb1df146756 132 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOB, DISABLE);
mbed_official 76:aeb1df146756 133 }
mbed_official 76:aeb1df146756 134 else if(GPIOx == GPIOC)
mbed_official 76:aeb1df146756 135 {
mbed_official 76:aeb1df146756 136 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOC, ENABLE);
mbed_official 76:aeb1df146756 137 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOC, DISABLE);
mbed_official 76:aeb1df146756 138 }
mbed_official 76:aeb1df146756 139 else if(GPIOx == GPIOD)
mbed_official 76:aeb1df146756 140 {
mbed_official 76:aeb1df146756 141 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOD, ENABLE);
mbed_official 76:aeb1df146756 142 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOD, DISABLE);
mbed_official 76:aeb1df146756 143 }
mbed_official 76:aeb1df146756 144 else if(GPIOx == GPIOE)
mbed_official 76:aeb1df146756 145 {
mbed_official 76:aeb1df146756 146 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOE, ENABLE);
mbed_official 76:aeb1df146756 147 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOE, DISABLE);
mbed_official 76:aeb1df146756 148 }
mbed_official 76:aeb1df146756 149 else if(GPIOx == GPIOF)
mbed_official 76:aeb1df146756 150 {
mbed_official 76:aeb1df146756 151 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOF, ENABLE);
mbed_official 76:aeb1df146756 152 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOF, DISABLE);
mbed_official 76:aeb1df146756 153 }
mbed_official 76:aeb1df146756 154 else if(GPIOx == GPIOG)
mbed_official 76:aeb1df146756 155 {
mbed_official 76:aeb1df146756 156 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOG, ENABLE);
mbed_official 76:aeb1df146756 157 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOG, DISABLE);
mbed_official 76:aeb1df146756 158 }
mbed_official 76:aeb1df146756 159 else
mbed_official 76:aeb1df146756 160 {
mbed_official 76:aeb1df146756 161 if(GPIOx == GPIOH)
mbed_official 76:aeb1df146756 162 {
mbed_official 76:aeb1df146756 163 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOH, ENABLE);
mbed_official 76:aeb1df146756 164 RCC_AHBPeriphResetCmd(RCC_AHBPeriph_GPIOH, DISABLE);
mbed_official 76:aeb1df146756 165 }
mbed_official 76:aeb1df146756 166 }
mbed_official 76:aeb1df146756 167 }
mbed_official 76:aeb1df146756 168
mbed_official 76:aeb1df146756 169 /**
mbed_official 76:aeb1df146756 170 * @brief Initializes the GPIOx peripheral according to the specified
mbed_official 76:aeb1df146756 171 * parameters in the GPIO_InitStruct.
mbed_official 76:aeb1df146756 172 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 173 * @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that
mbed_official 76:aeb1df146756 174 * contains the configuration information for the specified GPIO
mbed_official 76:aeb1df146756 175 * peripheral.
mbed_official 76:aeb1df146756 176
mbed_official 76:aeb1df146756 177 * @retval None
mbed_official 76:aeb1df146756 178 */
mbed_official 76:aeb1df146756 179 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
mbed_official 76:aeb1df146756 180 {
mbed_official 76:aeb1df146756 181 uint32_t pinpos = 0x00, pos = 0x00 , currentpin = 0x00;
mbed_official 76:aeb1df146756 182
mbed_official 76:aeb1df146756 183 /* Check the parameters */
mbed_official 76:aeb1df146756 184 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 185 assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
mbed_official 76:aeb1df146756 186 assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
mbed_official 76:aeb1df146756 187 assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd));
mbed_official 76:aeb1df146756 188
mbed_official 76:aeb1df146756 189 /* -------------------------Configure the port pins---------------- */
mbed_official 76:aeb1df146756 190 /*-- GPIO Mode Configuration --*/
mbed_official 76:aeb1df146756 191 for (pinpos = 0x00; pinpos < 0x10; pinpos++)
mbed_official 76:aeb1df146756 192 {
mbed_official 76:aeb1df146756 193 pos = ((uint32_t)0x01) << pinpos;
mbed_official 76:aeb1df146756 194
mbed_official 76:aeb1df146756 195 /* Get the port pins position */
mbed_official 76:aeb1df146756 196 currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
mbed_official 76:aeb1df146756 197
mbed_official 76:aeb1df146756 198 if (currentpin == pos)
mbed_official 76:aeb1df146756 199 {
mbed_official 76:aeb1df146756 200 GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (pinpos * 2));
mbed_official 76:aeb1df146756 201
mbed_official 76:aeb1df146756 202 GPIOx->MODER |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << (pinpos * 2));
mbed_official 76:aeb1df146756 203
mbed_official 76:aeb1df146756 204 if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF))
mbed_official 76:aeb1df146756 205 {
mbed_official 76:aeb1df146756 206 /* Check Speed mode parameters */
mbed_official 76:aeb1df146756 207 assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
mbed_official 76:aeb1df146756 208
mbed_official 76:aeb1df146756 209 /* Speed mode configuration */
mbed_official 76:aeb1df146756 210 GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2));
mbed_official 76:aeb1df146756 211 GPIOx->OSPEEDR |= ((uint32_t)(GPIO_InitStruct->GPIO_Speed) << (pinpos * 2));
mbed_official 76:aeb1df146756 212
mbed_official 76:aeb1df146756 213 /*Check Output mode parameters */
mbed_official 76:aeb1df146756 214 assert_param(IS_GPIO_OTYPE(GPIO_InitStruct->GPIO_OType));
mbed_official 76:aeb1df146756 215
mbed_official 76:aeb1df146756 216 /* Output mode configuration */
mbed_official 76:aeb1df146756 217 GPIOx->OTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pinpos)) ;
mbed_official 76:aeb1df146756 218 GPIOx->OTYPER |= (uint16_t)(((uint16_t)GPIO_InitStruct->GPIO_OType) << ((uint16_t)pinpos));
mbed_official 76:aeb1df146756 219 }
mbed_official 76:aeb1df146756 220
mbed_official 76:aeb1df146756 221 /* Pull-up Pull down resistor configuration */
mbed_official 76:aeb1df146756 222 GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pinpos * 2));
mbed_official 76:aeb1df146756 223 GPIOx->PUPDR |= (((uint32_t)GPIO_InitStruct->GPIO_PuPd) << (pinpos * 2));
mbed_official 76:aeb1df146756 224 }
mbed_official 76:aeb1df146756 225 }
mbed_official 76:aeb1df146756 226 }
mbed_official 76:aeb1df146756 227
mbed_official 76:aeb1df146756 228 /**
mbed_official 76:aeb1df146756 229 * @brief Fills each GPIO_InitStruct member with its default value.
mbed_official 76:aeb1df146756 230 * @param GPIO_InitStruct : pointer to a GPIO_InitTypeDef structure which will
mbed_official 76:aeb1df146756 231 * be initialized.
mbed_official 76:aeb1df146756 232 * @retval None
mbed_official 76:aeb1df146756 233 */
mbed_official 76:aeb1df146756 234 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
mbed_official 76:aeb1df146756 235 {
mbed_official 76:aeb1df146756 236 /* Reset GPIO init structure parameters values */
mbed_official 76:aeb1df146756 237 GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All;
mbed_official 76:aeb1df146756 238 GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN;
mbed_official 76:aeb1df146756 239 GPIO_InitStruct->GPIO_Speed = GPIO_Speed_400KHz;
mbed_official 76:aeb1df146756 240 GPIO_InitStruct->GPIO_OType = GPIO_OType_PP;
mbed_official 76:aeb1df146756 241 GPIO_InitStruct->GPIO_PuPd = GPIO_PuPd_NOPULL;
mbed_official 76:aeb1df146756 242 }
mbed_official 76:aeb1df146756 243
mbed_official 76:aeb1df146756 244 /**
mbed_official 76:aeb1df146756 245 * @brief Locks GPIO Pins configuration registers.
mbed_official 76:aeb1df146756 246 * The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR,
mbed_official 76:aeb1df146756 247 * GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH.
mbed_official 76:aeb1df146756 248 * The configuration of the locked GPIO pins can no longer be modified
mbed_official 76:aeb1df146756 249 * until the next reset.
mbed_official 76:aeb1df146756 250 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 251 * @param GPIO_Pin: specifies the port bit to be written.
mbed_official 76:aeb1df146756 252 * This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 253 * @retval None
mbed_official 76:aeb1df146756 254 */
mbed_official 76:aeb1df146756 255 void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 256 {
mbed_official 76:aeb1df146756 257 __IO uint32_t tmp = 0x00010000;
mbed_official 76:aeb1df146756 258
mbed_official 76:aeb1df146756 259 /* Check the parameters */
mbed_official 76:aeb1df146756 260 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 261 assert_param(IS_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 262
mbed_official 76:aeb1df146756 263 tmp |= GPIO_Pin;
mbed_official 76:aeb1df146756 264 /* Set LCKK bit */
mbed_official 76:aeb1df146756 265 GPIOx->LCKR = tmp;
mbed_official 76:aeb1df146756 266 /* Reset LCKK bit */
mbed_official 76:aeb1df146756 267 GPIOx->LCKR = GPIO_Pin;
mbed_official 76:aeb1df146756 268 /* Set LCKK bit */
mbed_official 76:aeb1df146756 269 GPIOx->LCKR = tmp;
mbed_official 76:aeb1df146756 270 /* Read LCKK bit*/
mbed_official 76:aeb1df146756 271 tmp = GPIOx->LCKR;
mbed_official 76:aeb1df146756 272 /* Read LCKK bit*/
mbed_official 76:aeb1df146756 273 tmp = GPIOx->LCKR;
mbed_official 76:aeb1df146756 274 }
mbed_official 76:aeb1df146756 275
mbed_official 76:aeb1df146756 276 /**
mbed_official 76:aeb1df146756 277 * @}
mbed_official 76:aeb1df146756 278 */
mbed_official 76:aeb1df146756 279
mbed_official 76:aeb1df146756 280 /** @defgroup GPIO_Group2 GPIO Read and Write
mbed_official 76:aeb1df146756 281 * @brief GPIO Read and Write
mbed_official 76:aeb1df146756 282 *
mbed_official 76:aeb1df146756 283 @verbatim
mbed_official 76:aeb1df146756 284 ===============================================================================
mbed_official 76:aeb1df146756 285 ##### GPIO Read and Write #####
mbed_official 76:aeb1df146756 286 ===============================================================================
mbed_official 76:aeb1df146756 287
mbed_official 76:aeb1df146756 288 @endverbatim
mbed_official 76:aeb1df146756 289 * @{
mbed_official 76:aeb1df146756 290 */
mbed_official 76:aeb1df146756 291
mbed_official 76:aeb1df146756 292 /**
mbed_official 76:aeb1df146756 293 * @brief Reads the specified input port pin.
mbed_official 76:aeb1df146756 294 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 295 * @param GPIO_Pin: specifies the port bit to read.
mbed_official 76:aeb1df146756 296 * This parameter can be GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 297 * @retval The input port pin value.
mbed_official 76:aeb1df146756 298 */
mbed_official 76:aeb1df146756 299 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 300 {
mbed_official 76:aeb1df146756 301 uint8_t bitstatus = 0x00;
mbed_official 76:aeb1df146756 302
mbed_official 76:aeb1df146756 303 /* Check the parameters */
mbed_official 76:aeb1df146756 304 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 305 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 306
mbed_official 76:aeb1df146756 307 if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
mbed_official 76:aeb1df146756 308 {
mbed_official 76:aeb1df146756 309 bitstatus = (uint8_t)Bit_SET;
mbed_official 76:aeb1df146756 310 }
mbed_official 76:aeb1df146756 311 else
mbed_official 76:aeb1df146756 312 {
mbed_official 76:aeb1df146756 313 bitstatus = (uint8_t)Bit_RESET;
mbed_official 76:aeb1df146756 314 }
mbed_official 76:aeb1df146756 315 return bitstatus;
mbed_official 76:aeb1df146756 316 }
mbed_official 76:aeb1df146756 317
mbed_official 76:aeb1df146756 318 /**
mbed_official 76:aeb1df146756 319 * @brief Reads the specified GPIO input data port.
mbed_official 76:aeb1df146756 320 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 321 * @retval GPIO input data port value.
mbed_official 76:aeb1df146756 322 */
mbed_official 76:aeb1df146756 323 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
mbed_official 76:aeb1df146756 324 {
mbed_official 76:aeb1df146756 325 /* Check the parameters */
mbed_official 76:aeb1df146756 326 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 327
mbed_official 76:aeb1df146756 328 return ((uint16_t)GPIOx->IDR);
mbed_official 76:aeb1df146756 329 }
mbed_official 76:aeb1df146756 330
mbed_official 76:aeb1df146756 331 /**
mbed_official 76:aeb1df146756 332 * @brief Reads the specified output data port bit.
mbed_official 76:aeb1df146756 333 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 334 * @param GPIO_Pin: Specifies the port bit to read.
mbed_official 76:aeb1df146756 335 * This parameter can be GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 336 * @retval The output port pin value.
mbed_official 76:aeb1df146756 337 */
mbed_official 76:aeb1df146756 338 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 339 {
mbed_official 76:aeb1df146756 340 uint8_t bitstatus = 0x00;
mbed_official 76:aeb1df146756 341
mbed_official 76:aeb1df146756 342 /* Check the parameters */
mbed_official 76:aeb1df146756 343 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 344 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 345
mbed_official 76:aeb1df146756 346 if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET)
mbed_official 76:aeb1df146756 347 {
mbed_official 76:aeb1df146756 348 bitstatus = (uint8_t)Bit_SET;
mbed_official 76:aeb1df146756 349 }
mbed_official 76:aeb1df146756 350 else
mbed_official 76:aeb1df146756 351 {
mbed_official 76:aeb1df146756 352 bitstatus = (uint8_t)Bit_RESET;
mbed_official 76:aeb1df146756 353 }
mbed_official 76:aeb1df146756 354 return bitstatus;
mbed_official 76:aeb1df146756 355 }
mbed_official 76:aeb1df146756 356
mbed_official 76:aeb1df146756 357 /**
mbed_official 76:aeb1df146756 358 * @brief Reads the specified GPIO output data port.
mbed_official 76:aeb1df146756 359 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 360 * @retval GPIO output data port value.
mbed_official 76:aeb1df146756 361 */
mbed_official 76:aeb1df146756 362 uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
mbed_official 76:aeb1df146756 363 {
mbed_official 76:aeb1df146756 364 /* Check the parameters */
mbed_official 76:aeb1df146756 365 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 366
mbed_official 76:aeb1df146756 367 return ((uint16_t)GPIOx->ODR);
mbed_official 76:aeb1df146756 368 }
mbed_official 76:aeb1df146756 369
mbed_official 76:aeb1df146756 370 /**
mbed_official 76:aeb1df146756 371 * @brief Sets the selected data port bits.
mbed_official 76:aeb1df146756 372 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 373 * @param GPIO_Pin: specifies the port bits to be written.
mbed_official 76:aeb1df146756 374 * This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 375 * @note This functions uses GPIOx_BSRR register to allow atomic read/modify
mbed_official 76:aeb1df146756 376 * accesses. In this way, there is no risk of an IRQ occurring between
mbed_official 76:aeb1df146756 377 * the read and the modify access.
mbed_official 76:aeb1df146756 378 * @retval None
mbed_official 76:aeb1df146756 379 */
mbed_official 76:aeb1df146756 380 void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 381 {
mbed_official 76:aeb1df146756 382 /* Check the parameters */
mbed_official 76:aeb1df146756 383 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 384 assert_param(IS_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 385
mbed_official 76:aeb1df146756 386 GPIOx->BSRRL = GPIO_Pin;
mbed_official 76:aeb1df146756 387 }
mbed_official 76:aeb1df146756 388
mbed_official 76:aeb1df146756 389 /**
mbed_official 76:aeb1df146756 390 * @brief Clears the selected data port bits.
mbed_official 76:aeb1df146756 391 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 392 * @param GPIO_Pin: specifies the port bits to be written.
mbed_official 76:aeb1df146756 393 * This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 394 * @note This functions uses GPIOx_BSRR register to allow atomic read/modify
mbed_official 76:aeb1df146756 395 * accesses. In this way, there is no risk of an IRQ occurring between
mbed_official 76:aeb1df146756 396 * the read and the modify access.
mbed_official 76:aeb1df146756 397 * @retval None
mbed_official 76:aeb1df146756 398 */
mbed_official 76:aeb1df146756 399 void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 400 {
mbed_official 76:aeb1df146756 401 /* Check the parameters */
mbed_official 76:aeb1df146756 402 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 403 assert_param(IS_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 404
mbed_official 76:aeb1df146756 405 GPIOx->BSRRH = GPIO_Pin;
mbed_official 76:aeb1df146756 406 }
mbed_official 76:aeb1df146756 407
mbed_official 76:aeb1df146756 408 /**
mbed_official 76:aeb1df146756 409 * @brief Sets or clears the selected data port bit.
mbed_official 76:aeb1df146756 410 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 411 * @param GPIO_Pin: specifies the port bit to be written.
mbed_official 76:aeb1df146756 412 * This parameter can be one of GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 413 * @param BitVal: specifies the value to be written to the selected bit.
mbed_official 76:aeb1df146756 414 * This parameter can be one of the BitAction enum values:
mbed_official 76:aeb1df146756 415 * @arg Bit_RESET: to clear the port pin
mbed_official 76:aeb1df146756 416 * @arg Bit_SET: to set the port pin
mbed_official 76:aeb1df146756 417 * @retval None
mbed_official 76:aeb1df146756 418 */
mbed_official 76:aeb1df146756 419 void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
mbed_official 76:aeb1df146756 420 {
mbed_official 76:aeb1df146756 421 /* Check the parameters */
mbed_official 76:aeb1df146756 422 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 423 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 424 assert_param(IS_GPIO_BIT_ACTION(BitVal));
mbed_official 76:aeb1df146756 425
mbed_official 76:aeb1df146756 426 if (BitVal != Bit_RESET)
mbed_official 76:aeb1df146756 427 {
mbed_official 76:aeb1df146756 428 GPIOx->BSRRL = GPIO_Pin;
mbed_official 76:aeb1df146756 429 }
mbed_official 76:aeb1df146756 430 else
mbed_official 76:aeb1df146756 431 {
mbed_official 76:aeb1df146756 432 GPIOx->BSRRH = GPIO_Pin ;
mbed_official 76:aeb1df146756 433 }
mbed_official 76:aeb1df146756 434 }
mbed_official 76:aeb1df146756 435
mbed_official 76:aeb1df146756 436 /**
mbed_official 76:aeb1df146756 437 * @brief Writes data to the specified GPIO data port.
mbed_official 76:aeb1df146756 438 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 439 * @param PortVal: specifies the value to be written to the port output data
mbed_official 76:aeb1df146756 440 * register.
mbed_official 76:aeb1df146756 441 * @retval None
mbed_official 76:aeb1df146756 442 */
mbed_official 76:aeb1df146756 443 void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
mbed_official 76:aeb1df146756 444 {
mbed_official 76:aeb1df146756 445 /* Check the parameters */
mbed_official 76:aeb1df146756 446 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 447
mbed_official 76:aeb1df146756 448 GPIOx->ODR = PortVal;
mbed_official 76:aeb1df146756 449 }
mbed_official 76:aeb1df146756 450
mbed_official 76:aeb1df146756 451 /**
mbed_official 76:aeb1df146756 452 * @brief Toggles the specified GPIO pins..
mbed_official 76:aeb1df146756 453 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 454 * @param GPIO_Pin: Specifies the pins to be toggled.
mbed_official 76:aeb1df146756 455 * @retval None
mbed_official 76:aeb1df146756 456 */
mbed_official 76:aeb1df146756 457 void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 458 {
mbed_official 76:aeb1df146756 459 /* Check the parameters */
mbed_official 76:aeb1df146756 460 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 461
mbed_official 76:aeb1df146756 462 GPIOx->ODR ^= GPIO_Pin;
mbed_official 76:aeb1df146756 463 }
mbed_official 76:aeb1df146756 464
mbed_official 76:aeb1df146756 465 /**
mbed_official 76:aeb1df146756 466 * @}
mbed_official 76:aeb1df146756 467 */
mbed_official 76:aeb1df146756 468
mbed_official 76:aeb1df146756 469 /** @defgroup GPIO_Group3 GPIO Alternate functions configuration functions
mbed_official 76:aeb1df146756 470 * @brief GPIO Alternate functions configuration functions
mbed_official 76:aeb1df146756 471 *
mbed_official 76:aeb1df146756 472 @verbatim
mbed_official 76:aeb1df146756 473 ===============================================================================
mbed_official 76:aeb1df146756 474 ##### GPIO Alternate functions configuration functions #####
mbed_official 76:aeb1df146756 475 ===============================================================================
mbed_official 76:aeb1df146756 476
mbed_official 76:aeb1df146756 477 @endverbatim
mbed_official 76:aeb1df146756 478 * @{
mbed_official 76:aeb1df146756 479 */
mbed_official 76:aeb1df146756 480
mbed_official 76:aeb1df146756 481 /**
mbed_official 76:aeb1df146756 482 * @brief Changes the mapping of the specified pin.
mbed_official 76:aeb1df146756 483 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 484 * @param GPIO_PinSource: specifies the pin for the Alternate function.
mbed_official 76:aeb1df146756 485 * This parameter can be GPIO_PinSourcex where x can be (0..15).
mbed_official 76:aeb1df146756 486 * @param GPIO_AFSelection: selects the pin to used as Alternat function.
mbed_official 76:aeb1df146756 487 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 488 * @arg GPIO_AF_RTC_50Hz: RTC 50/60 Hz synchronization
mbed_official 76:aeb1df146756 489 * @arg GPIO_AF_MCO: Microcontroller clock output
mbed_official 76:aeb1df146756 490 * @arg GPIO_AF_RTC_AF1: Time stamp, Tamper, Alarm A out, Alarm B out,
mbed_official 76:aeb1df146756 491 * 512 Hz clock output (with an LSE oscillator of 32.768 kHz)
mbed_official 76:aeb1df146756 492 * @arg GPIO_AF_WKUP: wakeup
mbed_official 76:aeb1df146756 493 * @arg GPIO_AF_SWJ: SWJ (SW and JTAG)
mbed_official 76:aeb1df146756 494 * @arg GPIO_AF_TRACE: Connect TRACE pins to AF0 (default after reset)
mbed_official 76:aeb1df146756 495 * @arg GPIO_AF_TIM2c: Connect TIM2 pins to AF1
mbed_official 76:aeb1df146756 496 * @arg GPIO_AF_TIM3: Connect TIM3 pins to AF2
mbed_official 76:aeb1df146756 497 * @arg GPIO_AF_TIM4: Connect TIM4 pins to AF2
mbed_official 76:aeb1df146756 498 * @arg GPIO_AF_TIM5: Connect TIM5 pins to AF2
mbed_official 76:aeb1df146756 499 * @arg GPIO_AF_TIM9: Connect TIM9 pins to AF3
mbed_official 76:aeb1df146756 500 * @arg GPIO_AF_TIM10: Connect TIM10 pins to AF3
mbed_official 76:aeb1df146756 501 * @arg GPIO_AF_TIM11: Connect TIM11 pins to AF3
mbed_official 76:aeb1df146756 502 * @arg GPIO_AF_I2C1: Connect I2C1 pins to AF4
mbed_official 76:aeb1df146756 503 * @arg GPIO_AF_I2C2: Connect I2C2 pins to AF4
mbed_official 76:aeb1df146756 504 * @arg GPIO_AF_SPI1: Connect SPI1 pins to AF5
mbed_official 76:aeb1df146756 505 * @arg GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5
mbed_official 76:aeb1df146756 506 * @arg GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6
mbed_official 76:aeb1df146756 507 * @arg GPIO_AF_USART1: Connect USART1 pins to AF7
mbed_official 76:aeb1df146756 508 * @arg GPIO_AF_USART2: Connect USART2 pins to AF7
mbed_official 76:aeb1df146756 509 * @arg GPIO_AF_USART3: Connect USART3 pins to AF7
mbed_official 76:aeb1df146756 510 * @arg GPIO_AF_UART4: Connect UART4 pins to AF8
mbed_official 76:aeb1df146756 511 * @arg GPIO_AF_UART5: Connect UART5 pins to AF8
mbed_official 76:aeb1df146756 512 * @arg GPIO_AF_USB: Connect USB pins to AF10
mbed_official 76:aeb1df146756 513 * @arg GPIO_AF_LCD: Connect LCD pins to AF11
mbed_official 76:aeb1df146756 514 * @arg GPIO_AF_FSMC: Connect FSMC pins to AF12
mbed_official 76:aeb1df146756 515 * @arg GPIO_AF_SDIO: Connect SDIO pins to AF12
mbed_official 76:aeb1df146756 516 * @arg GPIO_AF_RI: Connect RI pins to AF14
mbed_official 76:aeb1df146756 517 * @arg GPIO_AF_EVENTOUT: Cortex-M3 EVENTOUT signal
mbed_official 76:aeb1df146756 518 * @note The pin should already been configured in Alternate Function mode(AF)
mbed_official 76:aeb1df146756 519 * using GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF
mbed_official 76:aeb1df146756 520 * @note Please refer to the Alternate function mapping table in the device
mbed_official 76:aeb1df146756 521 * datasheet for the detailed mapping of the system and peripherals'
mbed_official 76:aeb1df146756 522 * alternate function I/O pins.
mbed_official 76:aeb1df146756 523 * @note EVENTOUT is not mapped on PH0, PH1 and PH2.
mbed_official 76:aeb1df146756 524 * @retval None
mbed_official 76:aeb1df146756 525 */
mbed_official 76:aeb1df146756 526 void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
mbed_official 76:aeb1df146756 527 {
mbed_official 76:aeb1df146756 528 uint32_t temp = 0x00;
mbed_official 76:aeb1df146756 529 uint32_t temp_2 = 0x00;
mbed_official 76:aeb1df146756 530
mbed_official 76:aeb1df146756 531 /* Check the parameters */
mbed_official 76:aeb1df146756 532 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 533 assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
mbed_official 76:aeb1df146756 534 assert_param(IS_GPIO_AF(GPIO_AF));
mbed_official 76:aeb1df146756 535
mbed_official 76:aeb1df146756 536 temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
mbed_official 76:aeb1df146756 537 GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
mbed_official 76:aeb1df146756 538 temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp;
mbed_official 76:aeb1df146756 539 GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2;
mbed_official 76:aeb1df146756 540 }
mbed_official 76:aeb1df146756 541
mbed_official 76:aeb1df146756 542 /**
mbed_official 76:aeb1df146756 543 * @}
mbed_official 76:aeb1df146756 544 */
mbed_official 76:aeb1df146756 545
mbed_official 76:aeb1df146756 546 /**
mbed_official 76:aeb1df146756 547 * @}
mbed_official 76:aeb1df146756 548 */
mbed_official 76:aeb1df146756 549
mbed_official 76:aeb1df146756 550 /**
mbed_official 76:aeb1df146756 551 * @}
mbed_official 76:aeb1df146756 552 */
mbed_official 76:aeb1df146756 553
mbed_official 76:aeb1df146756 554 /**
mbed_official 76:aeb1df146756 555 * @}
mbed_official 76:aeb1df146756 556 */
mbed_official 76:aeb1df146756 557 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/