Committer:
Sergunb
Date:
Mon Sep 04 12:04:13 2017 +0000
Revision:
0:8f0d870509fe
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sergunb 0:8f0d870509fe 1 /**
Sergunb 0:8f0d870509fe 2 ******************************************************************************
Sergunb 0:8f0d870509fe 3 * @file stm32f10x_gpio.c
Sergunb 0:8f0d870509fe 4 * @author MCD Application Team
Sergunb 0:8f0d870509fe 5 * @version V3.5.0
Sergunb 0:8f0d870509fe 6 * @date 11-March-2011
Sergunb 0:8f0d870509fe 7 * @brief This file provides all the GPIO firmware functions.
Sergunb 0:8f0d870509fe 8 ******************************************************************************
Sergunb 0:8f0d870509fe 9 * @attention
Sergunb 0:8f0d870509fe 10 *
Sergunb 0:8f0d870509fe 11 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
Sergunb 0:8f0d870509fe 12 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
Sergunb 0:8f0d870509fe 13 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
Sergunb 0:8f0d870509fe 14 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
Sergunb 0:8f0d870509fe 15 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
Sergunb 0:8f0d870509fe 16 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
Sergunb 0:8f0d870509fe 17 *
Sergunb 0:8f0d870509fe 18 * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
Sergunb 0:8f0d870509fe 19 ******************************************************************************
Sergunb 0:8f0d870509fe 20 */
Sergunb 0:8f0d870509fe 21
Sergunb 0:8f0d870509fe 22 /* Includes ------------------------------------------------------------------*/
Sergunb 0:8f0d870509fe 23 #include "stm32f10x_gpio.h"
Sergunb 0:8f0d870509fe 24 #include "stm32f10x_rcc.h"
Sergunb 0:8f0d870509fe 25
Sergunb 0:8f0d870509fe 26 /** @addtogroup STM32F10x_StdPeriph_Driver
Sergunb 0:8f0d870509fe 27 * @{
Sergunb 0:8f0d870509fe 28 */
Sergunb 0:8f0d870509fe 29
Sergunb 0:8f0d870509fe 30 /** @defgroup GPIO
Sergunb 0:8f0d870509fe 31 * @brief GPIO driver modules
Sergunb 0:8f0d870509fe 32 * @{
Sergunb 0:8f0d870509fe 33 */
Sergunb 0:8f0d870509fe 34
Sergunb 0:8f0d870509fe 35 /** @defgroup GPIO_Private_TypesDefinitions
Sergunb 0:8f0d870509fe 36 * @{
Sergunb 0:8f0d870509fe 37 */
Sergunb 0:8f0d870509fe 38
Sergunb 0:8f0d870509fe 39 /**
Sergunb 0:8f0d870509fe 40 * @}
Sergunb 0:8f0d870509fe 41 */
Sergunb 0:8f0d870509fe 42
Sergunb 0:8f0d870509fe 43 /** @defgroup GPIO_Private_Defines
Sergunb 0:8f0d870509fe 44 * @{
Sergunb 0:8f0d870509fe 45 */
Sergunb 0:8f0d870509fe 46
Sergunb 0:8f0d870509fe 47 /* ------------ RCC registers bit address in the alias region ----------------*/
Sergunb 0:8f0d870509fe 48 #define AFIO_OFFSET (AFIO_BASE - PERIPH_BASE)
Sergunb 0:8f0d870509fe 49
Sergunb 0:8f0d870509fe 50 /* --- EVENTCR Register -----*/
Sergunb 0:8f0d870509fe 51
Sergunb 0:8f0d870509fe 52 /* Alias word address of EVOE bit */
Sergunb 0:8f0d870509fe 53 #define EVCR_OFFSET (AFIO_OFFSET + 0x00)
Sergunb 0:8f0d870509fe 54 #define EVOE_BitNumber ((uint8_t)0x07)
Sergunb 0:8f0d870509fe 55 #define EVCR_EVOE_BB (PERIPH_BB_BASE + (EVCR_OFFSET * 32) + (EVOE_BitNumber * 4))
Sergunb 0:8f0d870509fe 56
Sergunb 0:8f0d870509fe 57
Sergunb 0:8f0d870509fe 58 /* --- MAPR Register ---*/
Sergunb 0:8f0d870509fe 59 /* Alias word address of MII_RMII_SEL bit */
Sergunb 0:8f0d870509fe 60 #define MAPR_OFFSET (AFIO_OFFSET + 0x04)
Sergunb 0:8f0d870509fe 61 #define MII_RMII_SEL_BitNumber ((u8)0x17)
Sergunb 0:8f0d870509fe 62 #define MAPR_MII_RMII_SEL_BB (PERIPH_BB_BASE + (MAPR_OFFSET * 32) + (MII_RMII_SEL_BitNumber * 4))
Sergunb 0:8f0d870509fe 63
Sergunb 0:8f0d870509fe 64
Sergunb 0:8f0d870509fe 65 #define EVCR_PORTPINCONFIG_MASK ((uint16_t)0xFF80)
Sergunb 0:8f0d870509fe 66 #define LSB_MASK ((uint16_t)0xFFFF)
Sergunb 0:8f0d870509fe 67 #define DBGAFR_POSITION_MASK ((uint32_t)0x000F0000)
Sergunb 0:8f0d870509fe 68 #define DBGAFR_SWJCFG_MASK ((uint32_t)0xF0FFFFFF)
Sergunb 0:8f0d870509fe 69 #define DBGAFR_LOCATION_MASK ((uint32_t)0x00200000)
Sergunb 0:8f0d870509fe 70 #define DBGAFR_NUMBITS_MASK ((uint32_t)0x00100000)
Sergunb 0:8f0d870509fe 71 /**
Sergunb 0:8f0d870509fe 72 * @}
Sergunb 0:8f0d870509fe 73 */
Sergunb 0:8f0d870509fe 74
Sergunb 0:8f0d870509fe 75 /** @defgroup GPIO_Private_Macros
Sergunb 0:8f0d870509fe 76 * @{
Sergunb 0:8f0d870509fe 77 */
Sergunb 0:8f0d870509fe 78
Sergunb 0:8f0d870509fe 79 /**
Sergunb 0:8f0d870509fe 80 * @}
Sergunb 0:8f0d870509fe 81 */
Sergunb 0:8f0d870509fe 82
Sergunb 0:8f0d870509fe 83 /** @defgroup GPIO_Private_Variables
Sergunb 0:8f0d870509fe 84 * @{
Sergunb 0:8f0d870509fe 85 */
Sergunb 0:8f0d870509fe 86
Sergunb 0:8f0d870509fe 87 /**
Sergunb 0:8f0d870509fe 88 * @}
Sergunb 0:8f0d870509fe 89 */
Sergunb 0:8f0d870509fe 90
Sergunb 0:8f0d870509fe 91 /** @defgroup GPIO_Private_FunctionPrototypes
Sergunb 0:8f0d870509fe 92 * @{
Sergunb 0:8f0d870509fe 93 */
Sergunb 0:8f0d870509fe 94
Sergunb 0:8f0d870509fe 95 /**
Sergunb 0:8f0d870509fe 96 * @}
Sergunb 0:8f0d870509fe 97 */
Sergunb 0:8f0d870509fe 98
Sergunb 0:8f0d870509fe 99 /** @defgroup GPIO_Private_Functions
Sergunb 0:8f0d870509fe 100 * @{
Sergunb 0:8f0d870509fe 101 */
Sergunb 0:8f0d870509fe 102
Sergunb 0:8f0d870509fe 103 /**
Sergunb 0:8f0d870509fe 104 * @brief Deinitializes the GPIOx peripheral registers to their default reset values.
Sergunb 0:8f0d870509fe 105 * @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
Sergunb 0:8f0d870509fe 106 * @retval None
Sergunb 0:8f0d870509fe 107 */
Sergunb 0:8f0d870509fe 108 void GPIO_DeInit(GPIO_TypeDef* GPIOx)
Sergunb 0:8f0d870509fe 109 {
Sergunb 0:8f0d870509fe 110 /* Check the parameters */
Sergunb 0:8f0d870509fe 111 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
Sergunb 0:8f0d870509fe 112
Sergunb 0:8f0d870509fe 113 if (GPIOx == GPIOA)
Sergunb 0:8f0d870509fe 114 {
Sergunb 0:8f0d870509fe 115 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE);
Sergunb 0:8f0d870509fe 116 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE);
Sergunb 0:8f0d870509fe 117 }
Sergunb 0:8f0d870509fe 118 else if (GPIOx == GPIOB)
Sergunb 0:8f0d870509fe 119 {
Sergunb 0:8f0d870509fe 120 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, ENABLE);
Sergunb 0:8f0d870509fe 121 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE);
Sergunb 0:8f0d870509fe 122 }
Sergunb 0:8f0d870509fe 123 else if (GPIOx == GPIOC)
Sergunb 0:8f0d870509fe 124 {
Sergunb 0:8f0d870509fe 125 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, ENABLE);
Sergunb 0:8f0d870509fe 126 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE);
Sergunb 0:8f0d870509fe 127 }
Sergunb 0:8f0d870509fe 128 else if (GPIOx == GPIOD)
Sergunb 0:8f0d870509fe 129 {
Sergunb 0:8f0d870509fe 130 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, ENABLE);
Sergunb 0:8f0d870509fe 131 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOD, DISABLE);
Sergunb 0:8f0d870509fe 132 }
Sergunb 0:8f0d870509fe 133 else if (GPIOx == GPIOE)
Sergunb 0:8f0d870509fe 134 {
Sergunb 0:8f0d870509fe 135 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, ENABLE);
Sergunb 0:8f0d870509fe 136 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOE, DISABLE);
Sergunb 0:8f0d870509fe 137 }
Sergunb 0:8f0d870509fe 138 else if (GPIOx == GPIOF)
Sergunb 0:8f0d870509fe 139 {
Sergunb 0:8f0d870509fe 140 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, ENABLE);
Sergunb 0:8f0d870509fe 141 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOF, DISABLE);
Sergunb 0:8f0d870509fe 142 }
Sergunb 0:8f0d870509fe 143 else
Sergunb 0:8f0d870509fe 144 {
Sergunb 0:8f0d870509fe 145 if (GPIOx == GPIOG)
Sergunb 0:8f0d870509fe 146 {
Sergunb 0:8f0d870509fe 147 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, ENABLE);
Sergunb 0:8f0d870509fe 148 RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOG, DISABLE);
Sergunb 0:8f0d870509fe 149 }
Sergunb 0:8f0d870509fe 150 }
Sergunb 0:8f0d870509fe 151 }
Sergunb 0:8f0d870509fe 152
Sergunb 0:8f0d870509fe 153 /**
Sergunb 0:8f0d870509fe 154 * @brief Deinitializes the Alternate Functions (remap, event control
Sergunb 0:8f0d870509fe 155 * and EXTI configuration) registers to their default reset values.
Sergunb 0:8f0d870509fe 156 * @param None
Sergunb 0:8f0d870509fe 157 * @retval None
Sergunb 0:8f0d870509fe 158 */
Sergunb 0:8f0d870509fe 159 void GPIO_AFIODeInit(void)
Sergunb 0:8f0d870509fe 160 {
Sergunb 0:8f0d870509fe 161 RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, ENABLE);
Sergunb 0:8f0d870509fe 162 RCC_APB2PeriphResetCmd(RCC_APB2Periph_AFIO, DISABLE);
Sergunb 0:8f0d870509fe 163 }
Sergunb 0:8f0d870509fe 164
Sergunb 0:8f0d870509fe 165 /**
Sergunb 0:8f0d870509fe 166 * @brief Initializes the GPIOx peripheral according to the specified
Sergunb 0:8f0d870509fe 167 * parameters in the GPIO_InitStruct.
Sergunb 0:8f0d870509fe 168 * @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
Sergunb 0:8f0d870509fe 169 * @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that
Sergunb 0:8f0d870509fe 170 * contains the configuration information for the specified GPIO peripheral.
Sergunb 0:8f0d870509fe 171 * @retval None
Sergunb 0:8f0d870509fe 172 */
Sergunb 0:8f0d870509fe 173 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
Sergunb 0:8f0d870509fe 174 {
Sergunb 0:8f0d870509fe 175 uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
Sergunb 0:8f0d870509fe 176 uint32_t tmpreg = 0x00, pinmask = 0x00;
Sergunb 0:8f0d870509fe 177 /* Check the parameters */
Sergunb 0:8f0d870509fe 178 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
Sergunb 0:8f0d870509fe 179 assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
Sergunb 0:8f0d870509fe 180 assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
Sergunb 0:8f0d870509fe 181
Sergunb 0:8f0d870509fe 182 /*---------------------------- GPIO Mode Configuration -----------------------*/
Sergunb 0:8f0d870509fe 183 currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);
Sergunb 0:8f0d870509fe 184 if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00)
Sergunb 0:8f0d870509fe 185 {
Sergunb 0:8f0d870509fe 186 /* Check the parameters */
Sergunb 0:8f0d870509fe 187 assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
Sergunb 0:8f0d870509fe 188 /* Output mode */
Sergunb 0:8f0d870509fe 189 currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed;
Sergunb 0:8f0d870509fe 190 }
Sergunb 0:8f0d870509fe 191 /*---------------------------- GPIO CRL Configuration ------------------------*/
Sergunb 0:8f0d870509fe 192 /* Configure the eight low port pins */
Sergunb 0:8f0d870509fe 193 if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00)
Sergunb 0:8f0d870509fe 194 {
Sergunb 0:8f0d870509fe 195 tmpreg = GPIOx->CRL;
Sergunb 0:8f0d870509fe 196 for (pinpos = 0x00; pinpos < 0x08; pinpos++)
Sergunb 0:8f0d870509fe 197 {
Sergunb 0:8f0d870509fe 198 pos = ((uint32_t)0x01) << pinpos;
Sergunb 0:8f0d870509fe 199 /* Get the port pins position */
Sergunb 0:8f0d870509fe 200 currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
Sergunb 0:8f0d870509fe 201 if (currentpin == pos)
Sergunb 0:8f0d870509fe 202 {
Sergunb 0:8f0d870509fe 203 pos = pinpos << 2;
Sergunb 0:8f0d870509fe 204 /* Clear the corresponding low control register bits */
Sergunb 0:8f0d870509fe 205 pinmask = ((uint32_t)0x0F) << pos;
Sergunb 0:8f0d870509fe 206 tmpreg &= ~pinmask;
Sergunb 0:8f0d870509fe 207 /* Write the mode configuration in the corresponding bits */
Sergunb 0:8f0d870509fe 208 tmpreg |= (currentmode << pos);
Sergunb 0:8f0d870509fe 209 /* Reset the corresponding ODR bit */
Sergunb 0:8f0d870509fe 210 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
Sergunb 0:8f0d870509fe 211 {
Sergunb 0:8f0d870509fe 212 GPIOx->BRR = (((uint32_t)0x01) << pinpos);
Sergunb 0:8f0d870509fe 213 }
Sergunb 0:8f0d870509fe 214 else
Sergunb 0:8f0d870509fe 215 {
Sergunb 0:8f0d870509fe 216 /* Set the corresponding ODR bit */
Sergunb 0:8f0d870509fe 217 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
Sergunb 0:8f0d870509fe 218 {
Sergunb 0:8f0d870509fe 219 GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
Sergunb 0:8f0d870509fe 220 }
Sergunb 0:8f0d870509fe 221 }
Sergunb 0:8f0d870509fe 222 }
Sergunb 0:8f0d870509fe 223 }
Sergunb 0:8f0d870509fe 224 GPIOx->CRL = tmpreg;
Sergunb 0:8f0d870509fe 225 }
Sergunb 0:8f0d870509fe 226 /*---------------------------- GPIO CRH Configuration ------------------------*/
Sergunb 0:8f0d870509fe 227 /* Configure the eight high port pins */
Sergunb 0:8f0d870509fe 228 if (GPIO_InitStruct->GPIO_Pin > 0x00FF)
Sergunb 0:8f0d870509fe 229 {
Sergunb 0:8f0d870509fe 230 tmpreg = GPIOx->CRH;
Sergunb 0:8f0d870509fe 231 for (pinpos = 0x00; pinpos < 0x08; pinpos++)
Sergunb 0:8f0d870509fe 232 {
Sergunb 0:8f0d870509fe 233 pos = (((uint32_t)0x01) << (pinpos + 0x08));
Sergunb 0:8f0d870509fe 234 /* Get the port pins position */
Sergunb 0:8f0d870509fe 235 currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos);
Sergunb 0:8f0d870509fe 236 if (currentpin == pos)
Sergunb 0:8f0d870509fe 237 {
Sergunb 0:8f0d870509fe 238 pos = pinpos << 2;
Sergunb 0:8f0d870509fe 239 /* Clear the corresponding high control register bits */
Sergunb 0:8f0d870509fe 240 pinmask = ((uint32_t)0x0F) << pos;
Sergunb 0:8f0d870509fe 241 tmpreg &= ~pinmask;
Sergunb 0:8f0d870509fe 242 /* Write the mode configuration in the corresponding bits */
Sergunb 0:8f0d870509fe 243 tmpreg |= (currentmode << pos);
Sergunb 0:8f0d870509fe 244 /* Reset the corresponding ODR bit */
Sergunb 0:8f0d870509fe 245 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
Sergunb 0:8f0d870509fe 246 {
Sergunb 0:8f0d870509fe 247 GPIOx->BRR = (((uint32_t)0x01) << (pinpos + 0x08));
Sergunb 0:8f0d870509fe 248 }
Sergunb 0:8f0d870509fe 249 /* Set the corresponding ODR bit */
Sergunb 0:8f0d870509fe 250 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
Sergunb 0:8f0d870509fe 251 {
Sergunb 0:8f0d870509fe 252 GPIOx->BSRR = (((uint32_t)0x01) << (pinpos + 0x08));
Sergunb 0:8f0d870509fe 253 }
Sergunb 0:8f0d870509fe 254 }
Sergunb 0:8f0d870509fe 255 }
Sergunb 0:8f0d870509fe 256 GPIOx->CRH = tmpreg;
Sergunb 0:8f0d870509fe 257 }
Sergunb 0:8f0d870509fe 258 }
Sergunb 0:8f0d870509fe 259
Sergunb 0:8f0d870509fe 260 /**
Sergunb 0:8f0d870509fe 261 * @brief Fills each GPIO_InitStruct member with its default value.
Sergunb 0:8f0d870509fe 262 * @param GPIO_InitStruct : pointer to a GPIO_InitTypeDef structure which will
Sergunb 0:8f0d870509fe 263 * be initialized.
Sergunb 0:8f0d870509fe 264 * @retval None
Sergunb 0:8f0d870509fe 265 */
Sergunb 0:8f0d870509fe 266 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
Sergunb 0:8f0d870509fe 267 {
Sergunb 0:8f0d870509fe 268 /* Reset GPIO init structure parameters values */
Sergunb 0:8f0d870509fe 269 GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All;
Sergunb 0:8f0d870509fe 270 GPIO_InitStruct->GPIO_Speed = GPIO_Speed_2MHz;
Sergunb 0:8f0d870509fe 271 GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING;
Sergunb 0:8f0d870509fe 272 }
Sergunb 0:8f0d870509fe 273
Sergunb 0:8f0d870509fe 274 /**
Sergunb 0:8f0d870509fe 275 * @brief Reads the specified input port pin.
Sergunb 0:8f0d870509fe 276 * @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
Sergunb 0:8f0d870509fe 277 * @param GPIO_Pin: specifies the port bit to read.
Sergunb 0:8f0d870509fe 278 * This parameter can be GPIO_Pin_x where x can be (0..15).
Sergunb 0:8f0d870509fe 279 * @retval The input port pin value.
Sergunb 0:8f0d870509fe 280 */
Sergunb 0:8f0d870509fe 281 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
Sergunb 0:8f0d870509fe 282 {
Sergunb 0:8f0d870509fe 283 uint8_t bitstatus = 0x00;
Sergunb 0:8f0d870509fe 284
Sergunb 0:8f0d870509fe 285 /* Check the parameters */
Sergunb 0:8f0d870509fe 286 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
Sergunb 0:8f0d870509fe 287 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
Sergunb 0:8f0d870509fe 288
Sergunb 0:8f0d870509fe 289 if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
Sergunb 0:8f0d870509fe 290 {
Sergunb 0:8f0d870509fe 291 bitstatus = (uint8_t)Bit_SET;
Sergunb 0:8f0d870509fe 292 }
Sergunb 0:8f0d870509fe 293 else
Sergunb 0:8f0d870509fe 294 {
Sergunb 0:8f0d870509fe 295 bitstatus = (uint8_t)Bit_RESET;
Sergunb 0:8f0d870509fe 296 }
Sergunb 0:8f0d870509fe 297 return bitstatus;
Sergunb 0:8f0d870509fe 298 }
Sergunb 0:8f0d870509fe 299
Sergunb 0:8f0d870509fe 300 /**
Sergunb 0:8f0d870509fe 301 * @brief Reads the specified GPIO input data port.
Sergunb 0:8f0d870509fe 302 * @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
Sergunb 0:8f0d870509fe 303 * @retval GPIO input data port value.
Sergunb 0:8f0d870509fe 304 */
Sergunb 0:8f0d870509fe 305 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
Sergunb 0:8f0d870509fe 306 {
Sergunb 0:8f0d870509fe 307 /* Check the parameters */
Sergunb 0:8f0d870509fe 308 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
Sergunb 0:8f0d870509fe 309
Sergunb 0:8f0d870509fe 310 return ((uint16_t)GPIOx->IDR);
Sergunb 0:8f0d870509fe 311 }
Sergunb 0:8f0d870509fe 312
Sergunb 0:8f0d870509fe 313 /**
Sergunb 0:8f0d870509fe 314 * @brief Reads the specified output data port bit.
Sergunb 0:8f0d870509fe 315 * @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
Sergunb 0:8f0d870509fe 316 * @param GPIO_Pin: specifies the port bit to read.
Sergunb 0:8f0d870509fe 317 * This parameter can be GPIO_Pin_x where x can be (0..15).
Sergunb 0:8f0d870509fe 318 * @retval The output port pin value.
Sergunb 0:8f0d870509fe 319 */
Sergunb 0:8f0d870509fe 320 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
Sergunb 0:8f0d870509fe 321 {
Sergunb 0:8f0d870509fe 322 uint8_t bitstatus = 0x00;
Sergunb 0:8f0d870509fe 323 /* Check the parameters */
Sergunb 0:8f0d870509fe 324 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
Sergunb 0:8f0d870509fe 325 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
Sergunb 0:8f0d870509fe 326
Sergunb 0:8f0d870509fe 327 if ((GPIOx->ODR & GPIO_Pin) != (uint32_t)Bit_RESET)
Sergunb 0:8f0d870509fe 328 {
Sergunb 0:8f0d870509fe 329 bitstatus = (uint8_t)Bit_SET;
Sergunb 0:8f0d870509fe 330 }
Sergunb 0:8f0d870509fe 331 else
Sergunb 0:8f0d870509fe 332 {
Sergunb 0:8f0d870509fe 333 bitstatus = (uint8_t)Bit_RESET;
Sergunb 0:8f0d870509fe 334 }
Sergunb 0:8f0d870509fe 335 return bitstatus;
Sergunb 0:8f0d870509fe 336 }
Sergunb 0:8f0d870509fe 337
Sergunb 0:8f0d870509fe 338 /**
Sergunb 0:8f0d870509fe 339 * @brief Reads the specified GPIO output data port.
Sergunb 0:8f0d870509fe 340 * @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
Sergunb 0:8f0d870509fe 341 * @retval GPIO output data port value.
Sergunb 0:8f0d870509fe 342 */
Sergunb 0:8f0d870509fe 343 uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
Sergunb 0:8f0d870509fe 344 {
Sergunb 0:8f0d870509fe 345 /* Check the parameters */
Sergunb 0:8f0d870509fe 346 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
Sergunb 0:8f0d870509fe 347
Sergunb 0:8f0d870509fe 348 return ((uint16_t)GPIOx->ODR);
Sergunb 0:8f0d870509fe 349 }
Sergunb 0:8f0d870509fe 350
Sergunb 0:8f0d870509fe 351 /**
Sergunb 0:8f0d870509fe 352 * @brief Sets the selected data port bits.
Sergunb 0:8f0d870509fe 353 * @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
Sergunb 0:8f0d870509fe 354 * @param GPIO_Pin: specifies the port bits to be written.
Sergunb 0:8f0d870509fe 355 * This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
Sergunb 0:8f0d870509fe 356 * @retval None
Sergunb 0:8f0d870509fe 357 */
Sergunb 0:8f0d870509fe 358 void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
Sergunb 0:8f0d870509fe 359 {
Sergunb 0:8f0d870509fe 360 /* Check the parameters */
Sergunb 0:8f0d870509fe 361 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
Sergunb 0:8f0d870509fe 362 assert_param(IS_GPIO_PIN(GPIO_Pin));
Sergunb 0:8f0d870509fe 363
Sergunb 0:8f0d870509fe 364 GPIOx->BSRR = GPIO_Pin;
Sergunb 0:8f0d870509fe 365 }
Sergunb 0:8f0d870509fe 366
Sergunb 0:8f0d870509fe 367 /**
Sergunb 0:8f0d870509fe 368 * @brief Clears the selected data port bits.
Sergunb 0:8f0d870509fe 369 * @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
Sergunb 0:8f0d870509fe 370 * @param GPIO_Pin: specifies the port bits to be written.
Sergunb 0:8f0d870509fe 371 * This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
Sergunb 0:8f0d870509fe 372 * @retval None
Sergunb 0:8f0d870509fe 373 */
Sergunb 0:8f0d870509fe 374 void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
Sergunb 0:8f0d870509fe 375 {
Sergunb 0:8f0d870509fe 376 /* Check the parameters */
Sergunb 0:8f0d870509fe 377 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
Sergunb 0:8f0d870509fe 378 assert_param(IS_GPIO_PIN(GPIO_Pin));
Sergunb 0:8f0d870509fe 379
Sergunb 0:8f0d870509fe 380 GPIOx->BRR = GPIO_Pin;
Sergunb 0:8f0d870509fe 381 }
Sergunb 0:8f0d870509fe 382
Sergunb 0:8f0d870509fe 383 /**
Sergunb 0:8f0d870509fe 384 * @brief Sets or clears the selected data port bit.
Sergunb 0:8f0d870509fe 385 * @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
Sergunb 0:8f0d870509fe 386 * @param GPIO_Pin: specifies the port bit to be written.
Sergunb 0:8f0d870509fe 387 * This parameter can be one of GPIO_Pin_x where x can be (0..15).
Sergunb 0:8f0d870509fe 388 * @param BitVal: specifies the value to be written to the selected bit.
Sergunb 0:8f0d870509fe 389 * This parameter can be one of the BitAction enum values:
Sergunb 0:8f0d870509fe 390 * @arg Bit_RESET: to clear the port pin
Sergunb 0:8f0d870509fe 391 * @arg Bit_SET: to set the port pin
Sergunb 0:8f0d870509fe 392 * @retval None
Sergunb 0:8f0d870509fe 393 */
Sergunb 0:8f0d870509fe 394 void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
Sergunb 0:8f0d870509fe 395 {
Sergunb 0:8f0d870509fe 396 /* Check the parameters */
Sergunb 0:8f0d870509fe 397 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
Sergunb 0:8f0d870509fe 398 assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
Sergunb 0:8f0d870509fe 399 assert_param(IS_GPIO_BIT_ACTION(BitVal));
Sergunb 0:8f0d870509fe 400
Sergunb 0:8f0d870509fe 401 if (BitVal != Bit_RESET)
Sergunb 0:8f0d870509fe 402 {
Sergunb 0:8f0d870509fe 403 GPIOx->BSRR = GPIO_Pin;
Sergunb 0:8f0d870509fe 404 }
Sergunb 0:8f0d870509fe 405 else
Sergunb 0:8f0d870509fe 406 {
Sergunb 0:8f0d870509fe 407 GPIOx->BRR = GPIO_Pin;
Sergunb 0:8f0d870509fe 408 }
Sergunb 0:8f0d870509fe 409 }
Sergunb 0:8f0d870509fe 410
Sergunb 0:8f0d870509fe 411 /**
Sergunb 0:8f0d870509fe 412 * @brief Writes data to the specified GPIO data port.
Sergunb 0:8f0d870509fe 413 * @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
Sergunb 0:8f0d870509fe 414 * @param PortVal: specifies the value to be written to the port output data register.
Sergunb 0:8f0d870509fe 415 * @retval None
Sergunb 0:8f0d870509fe 416 */
Sergunb 0:8f0d870509fe 417 void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
Sergunb 0:8f0d870509fe 418 {
Sergunb 0:8f0d870509fe 419 /* Check the parameters */
Sergunb 0:8f0d870509fe 420 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
Sergunb 0:8f0d870509fe 421
Sergunb 0:8f0d870509fe 422 GPIOx->ODR = PortVal;
Sergunb 0:8f0d870509fe 423 }
Sergunb 0:8f0d870509fe 424
Sergunb 0:8f0d870509fe 425 /**
Sergunb 0:8f0d870509fe 426 * @brief Locks GPIO Pins configuration registers.
Sergunb 0:8f0d870509fe 427 * @param GPIOx: where x can be (A..G) to select the GPIO peripheral.
Sergunb 0:8f0d870509fe 428 * @param GPIO_Pin: specifies the port bit to be written.
Sergunb 0:8f0d870509fe 429 * This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
Sergunb 0:8f0d870509fe 430 * @retval None
Sergunb 0:8f0d870509fe 431 */
Sergunb 0:8f0d870509fe 432 void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
Sergunb 0:8f0d870509fe 433 {
Sergunb 0:8f0d870509fe 434 uint32_t tmp = 0x00010000;
Sergunb 0:8f0d870509fe 435
Sergunb 0:8f0d870509fe 436 /* Check the parameters */
Sergunb 0:8f0d870509fe 437 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
Sergunb 0:8f0d870509fe 438 assert_param(IS_GPIO_PIN(GPIO_Pin));
Sergunb 0:8f0d870509fe 439
Sergunb 0:8f0d870509fe 440 tmp |= GPIO_Pin;
Sergunb 0:8f0d870509fe 441 /* Set LCKK bit */
Sergunb 0:8f0d870509fe 442 GPIOx->LCKR = tmp;
Sergunb 0:8f0d870509fe 443 /* Reset LCKK bit */
Sergunb 0:8f0d870509fe 444 GPIOx->LCKR = GPIO_Pin;
Sergunb 0:8f0d870509fe 445 /* Set LCKK bit */
Sergunb 0:8f0d870509fe 446 GPIOx->LCKR = tmp;
Sergunb 0:8f0d870509fe 447 /* Read LCKK bit*/
Sergunb 0:8f0d870509fe 448 tmp = GPIOx->LCKR;
Sergunb 0:8f0d870509fe 449 /* Read LCKK bit*/
Sergunb 0:8f0d870509fe 450 tmp = GPIOx->LCKR;
Sergunb 0:8f0d870509fe 451 }
Sergunb 0:8f0d870509fe 452
Sergunb 0:8f0d870509fe 453 /**
Sergunb 0:8f0d870509fe 454 * @brief Selects the GPIO pin used as Event output.
Sergunb 0:8f0d870509fe 455 * @param GPIO_PortSource: selects the GPIO port to be used as source
Sergunb 0:8f0d870509fe 456 * for Event output.
Sergunb 0:8f0d870509fe 457 * This parameter can be GPIO_PortSourceGPIOx where x can be (A..E).
Sergunb 0:8f0d870509fe 458 * @param GPIO_PinSource: specifies the pin for the Event output.
Sergunb 0:8f0d870509fe 459 * This parameter can be GPIO_PinSourcex where x can be (0..15).
Sergunb 0:8f0d870509fe 460 * @retval None
Sergunb 0:8f0d870509fe 461 */
Sergunb 0:8f0d870509fe 462 void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
Sergunb 0:8f0d870509fe 463 {
Sergunb 0:8f0d870509fe 464 uint32_t tmpreg = 0x00;
Sergunb 0:8f0d870509fe 465 /* Check the parameters */
Sergunb 0:8f0d870509fe 466 assert_param(IS_GPIO_EVENTOUT_PORT_SOURCE(GPIO_PortSource));
Sergunb 0:8f0d870509fe 467 assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
Sergunb 0:8f0d870509fe 468
Sergunb 0:8f0d870509fe 469 tmpreg = AFIO->EVCR;
Sergunb 0:8f0d870509fe 470 /* Clear the PORT[6:4] and PIN[3:0] bits */
Sergunb 0:8f0d870509fe 471 tmpreg &= EVCR_PORTPINCONFIG_MASK;
Sergunb 0:8f0d870509fe 472 tmpreg |= (uint32_t)GPIO_PortSource << 0x04;
Sergunb 0:8f0d870509fe 473 tmpreg |= GPIO_PinSource;
Sergunb 0:8f0d870509fe 474 AFIO->EVCR = tmpreg;
Sergunb 0:8f0d870509fe 475 }
Sergunb 0:8f0d870509fe 476
Sergunb 0:8f0d870509fe 477 /**
Sergunb 0:8f0d870509fe 478 * @brief Enables or disables the Event Output.
Sergunb 0:8f0d870509fe 479 * @param NewState: new state of the Event output.
Sergunb 0:8f0d870509fe 480 * This parameter can be: ENABLE or DISABLE.
Sergunb 0:8f0d870509fe 481 * @retval None
Sergunb 0:8f0d870509fe 482 */
Sergunb 0:8f0d870509fe 483 void GPIO_EventOutputCmd(FunctionalState NewState)
Sergunb 0:8f0d870509fe 484 {
Sergunb 0:8f0d870509fe 485 /* Check the parameters */
Sergunb 0:8f0d870509fe 486 assert_param(IS_FUNCTIONAL_STATE(NewState));
Sergunb 0:8f0d870509fe 487
Sergunb 0:8f0d870509fe 488 *(__IO uint32_t *) EVCR_EVOE_BB = (uint32_t)NewState;
Sergunb 0:8f0d870509fe 489 }
Sergunb 0:8f0d870509fe 490
Sergunb 0:8f0d870509fe 491 /**
Sergunb 0:8f0d870509fe 492 * @brief Changes the mapping of the specified pin.
Sergunb 0:8f0d870509fe 493 * @param GPIO_Remap: selects the pin to remap.
Sergunb 0:8f0d870509fe 494 * This parameter can be one of the following values:
Sergunb 0:8f0d870509fe 495 * @arg GPIO_Remap_SPI1 : SPI1 Alternate Function mapping
Sergunb 0:8f0d870509fe 496 * @arg GPIO_Remap_I2C1 : I2C1 Alternate Function mapping
Sergunb 0:8f0d870509fe 497 * @arg GPIO_Remap_USART1 : USART1 Alternate Function mapping
Sergunb 0:8f0d870509fe 498 * @arg GPIO_Remap_USART2 : USART2 Alternate Function mapping
Sergunb 0:8f0d870509fe 499 * @arg GPIO_PartialRemap_USART3 : USART3 Partial Alternate Function mapping
Sergunb 0:8f0d870509fe 500 * @arg GPIO_FullRemap_USART3 : USART3 Full Alternate Function mapping
Sergunb 0:8f0d870509fe 501 * @arg GPIO_PartialRemap_TIM1 : TIM1 Partial Alternate Function mapping
Sergunb 0:8f0d870509fe 502 * @arg GPIO_FullRemap_TIM1 : TIM1 Full Alternate Function mapping
Sergunb 0:8f0d870509fe 503 * @arg GPIO_PartialRemap1_TIM2 : TIM2 Partial1 Alternate Function mapping
Sergunb 0:8f0d870509fe 504 * @arg GPIO_PartialRemap2_TIM2 : TIM2 Partial2 Alternate Function mapping
Sergunb 0:8f0d870509fe 505 * @arg GPIO_FullRemap_TIM2 : TIM2 Full Alternate Function mapping
Sergunb 0:8f0d870509fe 506 * @arg GPIO_PartialRemap_TIM3 : TIM3 Partial Alternate Function mapping
Sergunb 0:8f0d870509fe 507 * @arg GPIO_FullRemap_TIM3 : TIM3 Full Alternate Function mapping
Sergunb 0:8f0d870509fe 508 * @arg GPIO_Remap_TIM4 : TIM4 Alternate Function mapping
Sergunb 0:8f0d870509fe 509 * @arg GPIO_Remap1_CAN1 : CAN1 Alternate Function mapping
Sergunb 0:8f0d870509fe 510 * @arg GPIO_Remap2_CAN1 : CAN1 Alternate Function mapping
Sergunb 0:8f0d870509fe 511 * @arg GPIO_Remap_PD01 : PD01 Alternate Function mapping
Sergunb 0:8f0d870509fe 512 * @arg GPIO_Remap_TIM5CH4_LSI : LSI connected to TIM5 Channel4 input capture for calibration
Sergunb 0:8f0d870509fe 513 * @arg GPIO_Remap_ADC1_ETRGINJ : ADC1 External Trigger Injected Conversion remapping
Sergunb 0:8f0d870509fe 514 * @arg GPIO_Remap_ADC1_ETRGREG : ADC1 External Trigger Regular Conversion remapping
Sergunb 0:8f0d870509fe 515 * @arg GPIO_Remap_ADC2_ETRGINJ : ADC2 External Trigger Injected Conversion remapping
Sergunb 0:8f0d870509fe 516 * @arg GPIO_Remap_ADC2_ETRGREG : ADC2 External Trigger Regular Conversion remapping
Sergunb 0:8f0d870509fe 517 * @arg GPIO_Remap_ETH : Ethernet remapping (only for Connectivity line devices)
Sergunb 0:8f0d870509fe 518 * @arg GPIO_Remap_CAN2 : CAN2 remapping (only for Connectivity line devices)
Sergunb 0:8f0d870509fe 519 * @arg GPIO_Remap_SWJ_NoJTRST : Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST
Sergunb 0:8f0d870509fe 520 * @arg GPIO_Remap_SWJ_JTAGDisable : JTAG-DP Disabled and SW-DP Enabled
Sergunb 0:8f0d870509fe 521 * @arg GPIO_Remap_SWJ_Disable : Full SWJ Disabled (JTAG-DP + SW-DP)
Sergunb 0:8f0d870509fe 522 * @arg GPIO_Remap_SPI3 : SPI3/I2S3 Alternate Function mapping (only for Connectivity line devices)
Sergunb 0:8f0d870509fe 523 * When the SPI3/I2S3 is remapped using this function, the SWJ is configured
Sergunb 0:8f0d870509fe 524 * to Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST.
Sergunb 0:8f0d870509fe 525 * @arg GPIO_Remap_TIM2ITR1_PTP_SOF : Ethernet PTP output or USB OTG SOF (Start of Frame) connected
Sergunb 0:8f0d870509fe 526 * to TIM2 Internal Trigger 1 for calibration (only for Connectivity line devices)
Sergunb 0:8f0d870509fe 527 * If the GPIO_Remap_TIM2ITR1_PTP_SOF is enabled the TIM2 ITR1 is connected to
Sergunb 0:8f0d870509fe 528 * Ethernet PTP output. When Reset TIM2 ITR1 is connected to USB OTG SOF output.
Sergunb 0:8f0d870509fe 529 * @arg GPIO_Remap_PTP_PPS : Ethernet MAC PPS_PTS output on PB05 (only for Connectivity line devices)
Sergunb 0:8f0d870509fe 530 * @arg GPIO_Remap_TIM15 : TIM15 Alternate Function mapping (only for Value line devices)
Sergunb 0:8f0d870509fe 531 * @arg GPIO_Remap_TIM16 : TIM16 Alternate Function mapping (only for Value line devices)
Sergunb 0:8f0d870509fe 532 * @arg GPIO_Remap_TIM17 : TIM17 Alternate Function mapping (only for Value line devices)
Sergunb 0:8f0d870509fe 533 * @arg GPIO_Remap_CEC : CEC Alternate Function mapping (only for Value line devices)
Sergunb 0:8f0d870509fe 534 * @arg GPIO_Remap_TIM1_DMA : TIM1 DMA requests mapping (only for Value line devices)
Sergunb 0:8f0d870509fe 535 * @arg GPIO_Remap_TIM9 : TIM9 Alternate Function mapping (only for XL-density devices)
Sergunb 0:8f0d870509fe 536 * @arg GPIO_Remap_TIM10 : TIM10 Alternate Function mapping (only for XL-density devices)
Sergunb 0:8f0d870509fe 537 * @arg GPIO_Remap_TIM11 : TIM11 Alternate Function mapping (only for XL-density devices)
Sergunb 0:8f0d870509fe 538 * @arg GPIO_Remap_TIM13 : TIM13 Alternate Function mapping (only for High density Value line and XL-density devices)
Sergunb 0:8f0d870509fe 539 * @arg GPIO_Remap_TIM14 : TIM14 Alternate Function mapping (only for High density Value line and XL-density devices)
Sergunb 0:8f0d870509fe 540 * @arg GPIO_Remap_FSMC_NADV : FSMC_NADV Alternate Function mapping (only for High density Value line and XL-density devices)
Sergunb 0:8f0d870509fe 541 * @arg GPIO_Remap_TIM67_DAC_DMA : TIM6/TIM7 and DAC DMA requests remapping (only for High density Value line devices)
Sergunb 0:8f0d870509fe 542 * @arg GPIO_Remap_TIM12 : TIM12 Alternate Function mapping (only for High density Value line devices)
Sergunb 0:8f0d870509fe 543 * @arg GPIO_Remap_MISC : Miscellaneous Remap (DMA2 Channel5 Position and DAC Trigger remapping,
Sergunb 0:8f0d870509fe 544 * only for High density Value line devices)
Sergunb 0:8f0d870509fe 545 * @param NewState: new state of the port pin remapping.
Sergunb 0:8f0d870509fe 546 * This parameter can be: ENABLE or DISABLE.
Sergunb 0:8f0d870509fe 547 * @retval None
Sergunb 0:8f0d870509fe 548 */
Sergunb 0:8f0d870509fe 549 void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
Sergunb 0:8f0d870509fe 550 {
Sergunb 0:8f0d870509fe 551 uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;
Sergunb 0:8f0d870509fe 552
Sergunb 0:8f0d870509fe 553 /* Check the parameters */
Sergunb 0:8f0d870509fe 554 assert_param(IS_GPIO_REMAP(GPIO_Remap));
Sergunb 0:8f0d870509fe 555 assert_param(IS_FUNCTIONAL_STATE(NewState));
Sergunb 0:8f0d870509fe 556
Sergunb 0:8f0d870509fe 557 if((GPIO_Remap & 0x80000000) == 0x80000000)
Sergunb 0:8f0d870509fe 558 {
Sergunb 0:8f0d870509fe 559 tmpreg = AFIO->MAPR2;
Sergunb 0:8f0d870509fe 560 }
Sergunb 0:8f0d870509fe 561 else
Sergunb 0:8f0d870509fe 562 {
Sergunb 0:8f0d870509fe 563 tmpreg = AFIO->MAPR;
Sergunb 0:8f0d870509fe 564 }
Sergunb 0:8f0d870509fe 565
Sergunb 0:8f0d870509fe 566 tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
Sergunb 0:8f0d870509fe 567 tmp = GPIO_Remap & LSB_MASK;
Sergunb 0:8f0d870509fe 568
Sergunb 0:8f0d870509fe 569 if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
Sergunb 0:8f0d870509fe 570 {
Sergunb 0:8f0d870509fe 571 tmpreg &= DBGAFR_SWJCFG_MASK;
Sergunb 0:8f0d870509fe 572 AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
Sergunb 0:8f0d870509fe 573 }
Sergunb 0:8f0d870509fe 574 else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
Sergunb 0:8f0d870509fe 575 {
Sergunb 0:8f0d870509fe 576 tmp1 = ((uint32_t)0x03) << tmpmask;
Sergunb 0:8f0d870509fe 577 tmpreg &= ~tmp1;
Sergunb 0:8f0d870509fe 578 tmpreg |= ~DBGAFR_SWJCFG_MASK;
Sergunb 0:8f0d870509fe 579 }
Sergunb 0:8f0d870509fe 580 else
Sergunb 0:8f0d870509fe 581 {
Sergunb 0:8f0d870509fe 582 tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
Sergunb 0:8f0d870509fe 583 tmpreg |= ~DBGAFR_SWJCFG_MASK;
Sergunb 0:8f0d870509fe 584 }
Sergunb 0:8f0d870509fe 585
Sergunb 0:8f0d870509fe 586 if (NewState != DISABLE)
Sergunb 0:8f0d870509fe 587 {
Sergunb 0:8f0d870509fe 588 tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
Sergunb 0:8f0d870509fe 589 }
Sergunb 0:8f0d870509fe 590
Sergunb 0:8f0d870509fe 591 if((GPIO_Remap & 0x80000000) == 0x80000000)
Sergunb 0:8f0d870509fe 592 {
Sergunb 0:8f0d870509fe 593 AFIO->MAPR2 = tmpreg;
Sergunb 0:8f0d870509fe 594 }
Sergunb 0:8f0d870509fe 595 else
Sergunb 0:8f0d870509fe 596 {
Sergunb 0:8f0d870509fe 597 AFIO->MAPR = tmpreg;
Sergunb 0:8f0d870509fe 598 }
Sergunb 0:8f0d870509fe 599 }
Sergunb 0:8f0d870509fe 600
Sergunb 0:8f0d870509fe 601 /**
Sergunb 0:8f0d870509fe 602 * @brief Selects the GPIO pin used as EXTI Line.
Sergunb 0:8f0d870509fe 603 * @param GPIO_PortSource: selects the GPIO port to be used as source for EXTI lines.
Sergunb 0:8f0d870509fe 604 * This parameter can be GPIO_PortSourceGPIOx where x can be (A..G).
Sergunb 0:8f0d870509fe 605 * @param GPIO_PinSource: specifies the EXTI line to be configured.
Sergunb 0:8f0d870509fe 606 * This parameter can be GPIO_PinSourcex where x can be (0..15).
Sergunb 0:8f0d870509fe 607 * @retval None
Sergunb 0:8f0d870509fe 608 */
Sergunb 0:8f0d870509fe 609 void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
Sergunb 0:8f0d870509fe 610 {
Sergunb 0:8f0d870509fe 611 uint32_t tmp = 0x00;
Sergunb 0:8f0d870509fe 612 /* Check the parameters */
Sergunb 0:8f0d870509fe 613 assert_param(IS_GPIO_EXTI_PORT_SOURCE(GPIO_PortSource));
Sergunb 0:8f0d870509fe 614 assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
Sergunb 0:8f0d870509fe 615
Sergunb 0:8f0d870509fe 616 tmp = ((uint32_t)0x0F) << (0x04 * (GPIO_PinSource & (uint8_t)0x03));
Sergunb 0:8f0d870509fe 617 AFIO->EXTICR[GPIO_PinSource >> 0x02] &= ~tmp;
Sergunb 0:8f0d870509fe 618 AFIO->EXTICR[GPIO_PinSource >> 0x02] |= (((uint32_t)GPIO_PortSource) << (0x04 * (GPIO_PinSource & (uint8_t)0x03)));
Sergunb 0:8f0d870509fe 619 }
Sergunb 0:8f0d870509fe 620
Sergunb 0:8f0d870509fe 621 /**
Sergunb 0:8f0d870509fe 622 * @brief Selects the Ethernet media interface.
Sergunb 0:8f0d870509fe 623 * @note This function applies only to STM32 Connectivity line devices.
Sergunb 0:8f0d870509fe 624 * @param GPIO_ETH_MediaInterface: specifies the Media Interface mode.
Sergunb 0:8f0d870509fe 625 * This parameter can be one of the following values:
Sergunb 0:8f0d870509fe 626 * @arg GPIO_ETH_MediaInterface_MII: MII mode
Sergunb 0:8f0d870509fe 627 * @arg GPIO_ETH_MediaInterface_RMII: RMII mode
Sergunb 0:8f0d870509fe 628 * @retval None
Sergunb 0:8f0d870509fe 629 */
Sergunb 0:8f0d870509fe 630 void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface)
Sergunb 0:8f0d870509fe 631 {
Sergunb 0:8f0d870509fe 632 assert_param(IS_GPIO_ETH_MEDIA_INTERFACE(GPIO_ETH_MediaInterface));
Sergunb 0:8f0d870509fe 633
Sergunb 0:8f0d870509fe 634 /* Configure MII_RMII selection bit */
Sergunb 0:8f0d870509fe 635 *(__IO uint32_t *) MAPR_MII_RMII_SEL_BB = GPIO_ETH_MediaInterface;
Sergunb 0:8f0d870509fe 636 }
Sergunb 0:8f0d870509fe 637
Sergunb 0:8f0d870509fe 638 /**
Sergunb 0:8f0d870509fe 639 * @}
Sergunb 0:8f0d870509fe 640 */
Sergunb 0:8f0d870509fe 641
Sergunb 0:8f0d870509fe 642 /**
Sergunb 0:8f0d870509fe 643 * @}
Sergunb 0:8f0d870509fe 644 */
Sergunb 0:8f0d870509fe 645
Sergunb 0:8f0d870509fe 646 /**
Sergunb 0:8f0d870509fe 647 * @}
Sergunb 0:8f0d870509fe 648 */
Sergunb 0:8f0d870509fe 649
Sergunb 0:8f0d870509fe 650 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/