mbed SDK library sources

Fork of mbed-src by mbed official

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

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

Import librarymbed

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

Committer:
mbed_official
Date:
Thu Jan 30 12:15:05 2014 +0000
Revision:
80:66393a7b209d
Parent:
76:aeb1df146756
Synchronized with git revision dba523f83fe09b7fce11fc1299dd1216e9776359

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

Update of I2C, SPI, SLEEP for NUCLEO_F103RB and 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 80:66393a7b209d 5 * @version V1.3.0
mbed_official 80:66393a7b209d 6 * @date 31-January-2014
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 80:66393a7b209d 58 * <h2><center>&copy; COPYRIGHT 2014 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 80:66393a7b209d 182 uint32_t tmpreg = 0x00;
mbed_official 76:aeb1df146756 183
mbed_official 76:aeb1df146756 184 /* Check the parameters */
mbed_official 76:aeb1df146756 185 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 186 assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
mbed_official 76:aeb1df146756 187 assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
mbed_official 76:aeb1df146756 188 assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd));
mbed_official 76:aeb1df146756 189
mbed_official 76:aeb1df146756 190 /* -------------------------Configure the port pins---------------- */
mbed_official 76:aeb1df146756 191 /*-- GPIO Mode Configuration --*/
mbed_official 76:aeb1df146756 192 for (pinpos = 0x00; pinpos < 0x10; pinpos++)
mbed_official 76:aeb1df146756 193 {
mbed_official 76:aeb1df146756 194 pos = ((uint32_t)0x01) << pinpos;
mbed_official 76:aeb1df146756 195
mbed_official 76:aeb1df146756 196 /* Get the port pins position */
mbed_official 76:aeb1df146756 197 currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
mbed_official 76:aeb1df146756 198
mbed_official 76:aeb1df146756 199 if (currentpin == pos)
mbed_official 76:aeb1df146756 200 {
mbed_official 80:66393a7b209d 201 /* Use temporary variable to update MODER register configuration, to avoid
mbed_official 80:66393a7b209d 202 unexpected transition in the GPIO pin configuration. */
mbed_official 80:66393a7b209d 203 tmpreg = GPIOx->MODER;
mbed_official 80:66393a7b209d 204 tmpreg &= ~(GPIO_MODER_MODER0 << (pinpos * 2));
mbed_official 80:66393a7b209d 205 tmpreg |= (((uint32_t)GPIO_InitStruct->GPIO_Mode) << (pinpos * 2));
mbed_official 80:66393a7b209d 206 GPIOx->MODER = tmpreg;
mbed_official 76:aeb1df146756 207
mbed_official 76:aeb1df146756 208 if ((GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT) || (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_AF))
mbed_official 76:aeb1df146756 209 {
mbed_official 76:aeb1df146756 210 /* Check Speed mode parameters */
mbed_official 76:aeb1df146756 211 assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
mbed_official 76:aeb1df146756 212
mbed_official 80:66393a7b209d 213 /* Use temporary variable to update OSPEEDR register configuration, to avoid
mbed_official 80:66393a7b209d 214 unexpected transition in the GPIO pin configuration. */
mbed_official 80:66393a7b209d 215 tmpreg = GPIOx->OSPEEDR;
mbed_official 80:66393a7b209d 216 tmpreg &= ~(GPIO_OSPEEDER_OSPEEDR0 << (pinpos * 2));
mbed_official 80:66393a7b209d 217 tmpreg |= ((uint32_t)(GPIO_InitStruct->GPIO_Speed) << (pinpos * 2));
mbed_official 80:66393a7b209d 218 GPIOx->OSPEEDR = tmpreg;
mbed_official 76:aeb1df146756 219
mbed_official 76:aeb1df146756 220 /*Check Output mode parameters */
mbed_official 76:aeb1df146756 221 assert_param(IS_GPIO_OTYPE(GPIO_InitStruct->GPIO_OType));
mbed_official 76:aeb1df146756 222
mbed_official 80:66393a7b209d 223 /* Use temporary variable to update OTYPER register configuration, to avoid
mbed_official 80:66393a7b209d 224 unexpected transition in the GPIO pin configuration. */
mbed_official 80:66393a7b209d 225 tmpreg = GPIOx->OTYPER;
mbed_official 80:66393a7b209d 226 tmpreg &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pinpos));
mbed_official 80:66393a7b209d 227 tmpreg |= (uint16_t)(((uint16_t)GPIO_InitStruct->GPIO_OType) << ((uint16_t)pinpos));
mbed_official 80:66393a7b209d 228 GPIOx->OTYPER = tmpreg;
mbed_official 76:aeb1df146756 229 }
mbed_official 76:aeb1df146756 230
mbed_official 80:66393a7b209d 231 /* Use temporary variable to update PUPDR register configuration, to avoid
mbed_official 80:66393a7b209d 232 unexpected transition in the GPIO pin configuration. */
mbed_official 80:66393a7b209d 233 tmpreg = GPIOx->PUPDR;
mbed_official 80:66393a7b209d 234 tmpreg &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pinpos * 2));
mbed_official 80:66393a7b209d 235 tmpreg |= (((uint32_t)GPIO_InitStruct->GPIO_PuPd) << (pinpos * 2));
mbed_official 80:66393a7b209d 236 GPIOx->PUPDR = tmpreg;
mbed_official 76:aeb1df146756 237 }
mbed_official 76:aeb1df146756 238 }
mbed_official 76:aeb1df146756 239 }
mbed_official 76:aeb1df146756 240
mbed_official 76:aeb1df146756 241 /**
mbed_official 76:aeb1df146756 242 * @brief Fills each GPIO_InitStruct member with its default value.
mbed_official 76:aeb1df146756 243 * @param GPIO_InitStruct : pointer to a GPIO_InitTypeDef structure which will
mbed_official 76:aeb1df146756 244 * be initialized.
mbed_official 76:aeb1df146756 245 * @retval None
mbed_official 76:aeb1df146756 246 */
mbed_official 76:aeb1df146756 247 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
mbed_official 76:aeb1df146756 248 {
mbed_official 76:aeb1df146756 249 /* Reset GPIO init structure parameters values */
mbed_official 76:aeb1df146756 250 GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All;
mbed_official 76:aeb1df146756 251 GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN;
mbed_official 76:aeb1df146756 252 GPIO_InitStruct->GPIO_Speed = GPIO_Speed_400KHz;
mbed_official 76:aeb1df146756 253 GPIO_InitStruct->GPIO_OType = GPIO_OType_PP;
mbed_official 76:aeb1df146756 254 GPIO_InitStruct->GPIO_PuPd = GPIO_PuPd_NOPULL;
mbed_official 76:aeb1df146756 255 }
mbed_official 76:aeb1df146756 256
mbed_official 76:aeb1df146756 257 /**
mbed_official 76:aeb1df146756 258 * @brief Locks GPIO Pins configuration registers.
mbed_official 76:aeb1df146756 259 * The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR,
mbed_official 76:aeb1df146756 260 * GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH.
mbed_official 76:aeb1df146756 261 * The configuration of the locked GPIO pins can no longer be modified
mbed_official 76:aeb1df146756 262 * until the next reset.
mbed_official 76:aeb1df146756 263 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 264 * @param GPIO_Pin: specifies the port bit to be written.
mbed_official 76:aeb1df146756 265 * This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 266 * @retval None
mbed_official 76:aeb1df146756 267 */
mbed_official 76:aeb1df146756 268 void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 269 {
mbed_official 76:aeb1df146756 270 __IO uint32_t tmp = 0x00010000;
mbed_official 76:aeb1df146756 271
mbed_official 76:aeb1df146756 272 /* Check the parameters */
mbed_official 76:aeb1df146756 273 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 274 assert_param(IS_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 275
mbed_official 76:aeb1df146756 276 tmp |= GPIO_Pin;
mbed_official 76:aeb1df146756 277 /* Set LCKK bit */
mbed_official 76:aeb1df146756 278 GPIOx->LCKR = tmp;
mbed_official 76:aeb1df146756 279 /* Reset LCKK bit */
mbed_official 76:aeb1df146756 280 GPIOx->LCKR = GPIO_Pin;
mbed_official 76:aeb1df146756 281 /* Set LCKK bit */
mbed_official 76:aeb1df146756 282 GPIOx->LCKR = tmp;
mbed_official 76:aeb1df146756 283 /* Read LCKK bit*/
mbed_official 76:aeb1df146756 284 tmp = GPIOx->LCKR;
mbed_official 76:aeb1df146756 285 /* Read LCKK bit*/
mbed_official 76:aeb1df146756 286 tmp = GPIOx->LCKR;
mbed_official 76:aeb1df146756 287 }
mbed_official 76:aeb1df146756 288
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 /** @defgroup GPIO_Group2 GPIO Read and Write
mbed_official 76:aeb1df146756 294 * @brief GPIO Read and Write
mbed_official 76:aeb1df146756 295 *
mbed_official 76:aeb1df146756 296 @verbatim
mbed_official 76:aeb1df146756 297 ===============================================================================
mbed_official 76:aeb1df146756 298 ##### GPIO Read and Write #####
mbed_official 76:aeb1df146756 299 ===============================================================================
mbed_official 76:aeb1df146756 300
mbed_official 76:aeb1df146756 301 @endverbatim
mbed_official 76:aeb1df146756 302 * @{
mbed_official 76:aeb1df146756 303 */
mbed_official 76:aeb1df146756 304
mbed_official 76:aeb1df146756 305 /**
mbed_official 76:aeb1df146756 306 * @brief Reads the specified input port pin.
mbed_official 76:aeb1df146756 307 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 308 * @param GPIO_Pin: specifies the port bit to read.
mbed_official 76:aeb1df146756 309 * This parameter can be GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 310 * @retval The input port pin value.
mbed_official 76:aeb1df146756 311 */
mbed_official 76:aeb1df146756 312 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 313 {
mbed_official 76:aeb1df146756 314 uint8_t bitstatus = 0x00;
mbed_official 76:aeb1df146756 315
mbed_official 76:aeb1df146756 316 /* Check the parameters */
mbed_official 76:aeb1df146756 317 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 318 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 319
mbed_official 76:aeb1df146756 320 if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
mbed_official 76:aeb1df146756 321 {
mbed_official 76:aeb1df146756 322 bitstatus = (uint8_t)Bit_SET;
mbed_official 76:aeb1df146756 323 }
mbed_official 76:aeb1df146756 324 else
mbed_official 76:aeb1df146756 325 {
mbed_official 76:aeb1df146756 326 bitstatus = (uint8_t)Bit_RESET;
mbed_official 76:aeb1df146756 327 }
mbed_official 76:aeb1df146756 328 return bitstatus;
mbed_official 76:aeb1df146756 329 }
mbed_official 76:aeb1df146756 330
mbed_official 76:aeb1df146756 331 /**
mbed_official 76:aeb1df146756 332 * @brief Reads the specified GPIO input data port.
mbed_official 76:aeb1df146756 333 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 334 * @retval GPIO input data port value.
mbed_official 76:aeb1df146756 335 */
mbed_official 76:aeb1df146756 336 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
mbed_official 76:aeb1df146756 337 {
mbed_official 76:aeb1df146756 338 /* Check the parameters */
mbed_official 76:aeb1df146756 339 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 340
mbed_official 76:aeb1df146756 341 return ((uint16_t)GPIOx->IDR);
mbed_official 76:aeb1df146756 342 }
mbed_official 76:aeb1df146756 343
mbed_official 76:aeb1df146756 344 /**
mbed_official 76:aeb1df146756 345 * @brief Reads the specified output data port bit.
mbed_official 76:aeb1df146756 346 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 347 * @param GPIO_Pin: Specifies the port bit to read.
mbed_official 76:aeb1df146756 348 * This parameter can be GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 349 * @retval The output port pin value.
mbed_official 76:aeb1df146756 350 */
mbed_official 76:aeb1df146756 351 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 352 {
mbed_official 76:aeb1df146756 353 uint8_t bitstatus = 0x00;
mbed_official 76:aeb1df146756 354
mbed_official 76:aeb1df146756 355 /* Check the parameters */
mbed_official 76:aeb1df146756 356 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 357 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 358
mbed_official 76:aeb1df146756 359 if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET)
mbed_official 76:aeb1df146756 360 {
mbed_official 76:aeb1df146756 361 bitstatus = (uint8_t)Bit_SET;
mbed_official 76:aeb1df146756 362 }
mbed_official 76:aeb1df146756 363 else
mbed_official 76:aeb1df146756 364 {
mbed_official 76:aeb1df146756 365 bitstatus = (uint8_t)Bit_RESET;
mbed_official 76:aeb1df146756 366 }
mbed_official 76:aeb1df146756 367 return bitstatus;
mbed_official 76:aeb1df146756 368 }
mbed_official 76:aeb1df146756 369
mbed_official 76:aeb1df146756 370 /**
mbed_official 76:aeb1df146756 371 * @brief Reads the specified GPIO output data port.
mbed_official 76:aeb1df146756 372 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 373 * @retval GPIO output data port value.
mbed_official 76:aeb1df146756 374 */
mbed_official 76:aeb1df146756 375 uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
mbed_official 76:aeb1df146756 376 {
mbed_official 76:aeb1df146756 377 /* Check the parameters */
mbed_official 76:aeb1df146756 378 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 379
mbed_official 76:aeb1df146756 380 return ((uint16_t)GPIOx->ODR);
mbed_official 76:aeb1df146756 381 }
mbed_official 76:aeb1df146756 382
mbed_official 76:aeb1df146756 383 /**
mbed_official 76:aeb1df146756 384 * @brief Sets the selected data port bits.
mbed_official 76:aeb1df146756 385 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 386 * @param GPIO_Pin: specifies the port bits to be written.
mbed_official 76:aeb1df146756 387 * This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 388 * @note This functions uses GPIOx_BSRR register to allow atomic read/modify
mbed_official 76:aeb1df146756 389 * accesses. In this way, there is no risk of an IRQ occurring between
mbed_official 76:aeb1df146756 390 * the read and the modify access.
mbed_official 76:aeb1df146756 391 * @retval None
mbed_official 76:aeb1df146756 392 */
mbed_official 76:aeb1df146756 393 void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 394 {
mbed_official 76:aeb1df146756 395 /* Check the parameters */
mbed_official 76:aeb1df146756 396 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 397 assert_param(IS_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 398
mbed_official 76:aeb1df146756 399 GPIOx->BSRRL = GPIO_Pin;
mbed_official 76:aeb1df146756 400 }
mbed_official 76:aeb1df146756 401
mbed_official 76:aeb1df146756 402 /**
mbed_official 76:aeb1df146756 403 * @brief Clears the selected data port bits.
mbed_official 76:aeb1df146756 404 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 405 * @param GPIO_Pin: specifies the port bits to be written.
mbed_official 76:aeb1df146756 406 * This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 407 * @note This functions uses GPIOx_BSRR register to allow atomic read/modify
mbed_official 76:aeb1df146756 408 * accesses. In this way, there is no risk of an IRQ occurring between
mbed_official 76:aeb1df146756 409 * the read and the modify access.
mbed_official 76:aeb1df146756 410 * @retval None
mbed_official 76:aeb1df146756 411 */
mbed_official 76:aeb1df146756 412 void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 413 {
mbed_official 76:aeb1df146756 414 /* Check the parameters */
mbed_official 76:aeb1df146756 415 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 416 assert_param(IS_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 417
mbed_official 76:aeb1df146756 418 GPIOx->BSRRH = GPIO_Pin;
mbed_official 76:aeb1df146756 419 }
mbed_official 76:aeb1df146756 420
mbed_official 76:aeb1df146756 421 /**
mbed_official 76:aeb1df146756 422 * @brief Sets or clears the selected data port bit.
mbed_official 76:aeb1df146756 423 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 424 * @param GPIO_Pin: specifies the port bit to be written.
mbed_official 76:aeb1df146756 425 * This parameter can be one of GPIO_Pin_x where x can be (0..15).
mbed_official 76:aeb1df146756 426 * @param BitVal: specifies the value to be written to the selected bit.
mbed_official 76:aeb1df146756 427 * This parameter can be one of the BitAction enum values:
mbed_official 76:aeb1df146756 428 * @arg Bit_RESET: to clear the port pin
mbed_official 76:aeb1df146756 429 * @arg Bit_SET: to set the port pin
mbed_official 76:aeb1df146756 430 * @retval None
mbed_official 76:aeb1df146756 431 */
mbed_official 76:aeb1df146756 432 void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
mbed_official 76:aeb1df146756 433 {
mbed_official 76:aeb1df146756 434 /* Check the parameters */
mbed_official 76:aeb1df146756 435 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 436 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
mbed_official 76:aeb1df146756 437 assert_param(IS_GPIO_BIT_ACTION(BitVal));
mbed_official 76:aeb1df146756 438
mbed_official 76:aeb1df146756 439 if (BitVal != Bit_RESET)
mbed_official 76:aeb1df146756 440 {
mbed_official 76:aeb1df146756 441 GPIOx->BSRRL = GPIO_Pin;
mbed_official 76:aeb1df146756 442 }
mbed_official 76:aeb1df146756 443 else
mbed_official 76:aeb1df146756 444 {
mbed_official 76:aeb1df146756 445 GPIOx->BSRRH = GPIO_Pin ;
mbed_official 76:aeb1df146756 446 }
mbed_official 76:aeb1df146756 447 }
mbed_official 76:aeb1df146756 448
mbed_official 76:aeb1df146756 449 /**
mbed_official 76:aeb1df146756 450 * @brief Writes data to the specified GPIO data port.
mbed_official 76:aeb1df146756 451 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 452 * @param PortVal: specifies the value to be written to the port output data
mbed_official 76:aeb1df146756 453 * register.
mbed_official 76:aeb1df146756 454 * @retval None
mbed_official 76:aeb1df146756 455 */
mbed_official 76:aeb1df146756 456 void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
mbed_official 76:aeb1df146756 457 {
mbed_official 76:aeb1df146756 458 /* Check the parameters */
mbed_official 76:aeb1df146756 459 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 460
mbed_official 76:aeb1df146756 461 GPIOx->ODR = PortVal;
mbed_official 76:aeb1df146756 462 }
mbed_official 76:aeb1df146756 463
mbed_official 76:aeb1df146756 464 /**
mbed_official 76:aeb1df146756 465 * @brief Toggles the specified GPIO pins..
mbed_official 76:aeb1df146756 466 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 467 * @param GPIO_Pin: Specifies the pins to be toggled.
mbed_official 76:aeb1df146756 468 * @retval None
mbed_official 76:aeb1df146756 469 */
mbed_official 76:aeb1df146756 470 void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
mbed_official 76:aeb1df146756 471 {
mbed_official 76:aeb1df146756 472 /* Check the parameters */
mbed_official 76:aeb1df146756 473 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 474
mbed_official 76:aeb1df146756 475 GPIOx->ODR ^= GPIO_Pin;
mbed_official 76:aeb1df146756 476 }
mbed_official 76:aeb1df146756 477
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 /** @defgroup GPIO_Group3 GPIO Alternate functions configuration functions
mbed_official 76:aeb1df146756 483 * @brief GPIO Alternate functions configuration functions
mbed_official 76:aeb1df146756 484 *
mbed_official 76:aeb1df146756 485 @verbatim
mbed_official 76:aeb1df146756 486 ===============================================================================
mbed_official 76:aeb1df146756 487 ##### GPIO Alternate functions configuration functions #####
mbed_official 76:aeb1df146756 488 ===============================================================================
mbed_official 76:aeb1df146756 489
mbed_official 76:aeb1df146756 490 @endverbatim
mbed_official 76:aeb1df146756 491 * @{
mbed_official 76:aeb1df146756 492 */
mbed_official 76:aeb1df146756 493
mbed_official 76:aeb1df146756 494 /**
mbed_official 76:aeb1df146756 495 * @brief Changes the mapping of the specified pin.
mbed_official 76:aeb1df146756 496 * @param GPIOx: where x can be (A..H) to select the GPIO peripheral.
mbed_official 76:aeb1df146756 497 * @param GPIO_PinSource: specifies the pin for the Alternate function.
mbed_official 76:aeb1df146756 498 * This parameter can be GPIO_PinSourcex where x can be (0..15).
mbed_official 76:aeb1df146756 499 * @param GPIO_AFSelection: selects the pin to used as Alternat function.
mbed_official 76:aeb1df146756 500 * This parameter can be one of the following values:
mbed_official 76:aeb1df146756 501 * @arg GPIO_AF_RTC_50Hz: RTC 50/60 Hz synchronization
mbed_official 76:aeb1df146756 502 * @arg GPIO_AF_MCO: Microcontroller clock output
mbed_official 76:aeb1df146756 503 * @arg GPIO_AF_RTC_AF1: Time stamp, Tamper, Alarm A out, Alarm B out,
mbed_official 76:aeb1df146756 504 * 512 Hz clock output (with an LSE oscillator of 32.768 kHz)
mbed_official 76:aeb1df146756 505 * @arg GPIO_AF_WKUP: wakeup
mbed_official 76:aeb1df146756 506 * @arg GPIO_AF_SWJ: SWJ (SW and JTAG)
mbed_official 76:aeb1df146756 507 * @arg GPIO_AF_TRACE: Connect TRACE pins to AF0 (default after reset)
mbed_official 76:aeb1df146756 508 * @arg GPIO_AF_TIM2c: Connect TIM2 pins to AF1
mbed_official 76:aeb1df146756 509 * @arg GPIO_AF_TIM3: Connect TIM3 pins to AF2
mbed_official 76:aeb1df146756 510 * @arg GPIO_AF_TIM4: Connect TIM4 pins to AF2
mbed_official 76:aeb1df146756 511 * @arg GPIO_AF_TIM5: Connect TIM5 pins to AF2
mbed_official 76:aeb1df146756 512 * @arg GPIO_AF_TIM9: Connect TIM9 pins to AF3
mbed_official 76:aeb1df146756 513 * @arg GPIO_AF_TIM10: Connect TIM10 pins to AF3
mbed_official 76:aeb1df146756 514 * @arg GPIO_AF_TIM11: Connect TIM11 pins to AF3
mbed_official 76:aeb1df146756 515 * @arg GPIO_AF_I2C1: Connect I2C1 pins to AF4
mbed_official 76:aeb1df146756 516 * @arg GPIO_AF_I2C2: Connect I2C2 pins to AF4
mbed_official 76:aeb1df146756 517 * @arg GPIO_AF_SPI1: Connect SPI1 pins to AF5
mbed_official 76:aeb1df146756 518 * @arg GPIO_AF_SPI2: Connect SPI2/I2S2 pins to AF5
mbed_official 76:aeb1df146756 519 * @arg GPIO_AF_SPI3: Connect SPI3/I2S3 pins to AF6
mbed_official 76:aeb1df146756 520 * @arg GPIO_AF_USART1: Connect USART1 pins to AF7
mbed_official 76:aeb1df146756 521 * @arg GPIO_AF_USART2: Connect USART2 pins to AF7
mbed_official 76:aeb1df146756 522 * @arg GPIO_AF_USART3: Connect USART3 pins to AF7
mbed_official 76:aeb1df146756 523 * @arg GPIO_AF_UART4: Connect UART4 pins to AF8
mbed_official 76:aeb1df146756 524 * @arg GPIO_AF_UART5: Connect UART5 pins to AF8
mbed_official 76:aeb1df146756 525 * @arg GPIO_AF_USB: Connect USB pins to AF10
mbed_official 76:aeb1df146756 526 * @arg GPIO_AF_LCD: Connect LCD pins to AF11
mbed_official 76:aeb1df146756 527 * @arg GPIO_AF_FSMC: Connect FSMC pins to AF12
mbed_official 76:aeb1df146756 528 * @arg GPIO_AF_SDIO: Connect SDIO pins to AF12
mbed_official 76:aeb1df146756 529 * @arg GPIO_AF_RI: Connect RI pins to AF14
mbed_official 76:aeb1df146756 530 * @arg GPIO_AF_EVENTOUT: Cortex-M3 EVENTOUT signal
mbed_official 76:aeb1df146756 531 * @note The pin should already been configured in Alternate Function mode(AF)
mbed_official 76:aeb1df146756 532 * using GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF
mbed_official 76:aeb1df146756 533 * @note Please refer to the Alternate function mapping table in the device
mbed_official 76:aeb1df146756 534 * datasheet for the detailed mapping of the system and peripherals'
mbed_official 76:aeb1df146756 535 * alternate function I/O pins.
mbed_official 76:aeb1df146756 536 * @note EVENTOUT is not mapped on PH0, PH1 and PH2.
mbed_official 76:aeb1df146756 537 * @retval None
mbed_official 76:aeb1df146756 538 */
mbed_official 76:aeb1df146756 539 void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
mbed_official 76:aeb1df146756 540 {
mbed_official 76:aeb1df146756 541 uint32_t temp = 0x00;
mbed_official 76:aeb1df146756 542 uint32_t temp_2 = 0x00;
mbed_official 76:aeb1df146756 543
mbed_official 76:aeb1df146756 544 /* Check the parameters */
mbed_official 76:aeb1df146756 545 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
mbed_official 76:aeb1df146756 546 assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
mbed_official 76:aeb1df146756 547 assert_param(IS_GPIO_AF(GPIO_AF));
mbed_official 76:aeb1df146756 548
mbed_official 76:aeb1df146756 549 temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
mbed_official 76:aeb1df146756 550 GPIOx->AFR[GPIO_PinSource >> 0x03] &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
mbed_official 76:aeb1df146756 551 temp_2 = GPIOx->AFR[GPIO_PinSource >> 0x03] | temp;
mbed_official 76:aeb1df146756 552 GPIOx->AFR[GPIO_PinSource >> 0x03] = temp_2;
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 */
mbed_official 76:aeb1df146756 558
mbed_official 76:aeb1df146756 559 /**
mbed_official 76:aeb1df146756 560 * @}
mbed_official 76:aeb1df146756 561 */
mbed_official 76:aeb1df146756 562
mbed_official 76:aeb1df146756 563 /**
mbed_official 76:aeb1df146756 564 * @}
mbed_official 76:aeb1df146756 565 */
mbed_official 76:aeb1df146756 566
mbed_official 76:aeb1df146756 567 /**
mbed_official 76:aeb1df146756 568 * @}
mbed_official 76:aeb1df146756 569 */
mbed_official 76:aeb1df146756 570 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/