116 #ifdef HAL_GPIO_MODULE_ENABLED
123 #define GPIO_MODE 0x00000003u
124 #define EXTI_MODE 0x10000000u
125 #define GPIO_MODE_IT 0x00010000u
126 #define GPIO_MODE_EVT 0x00020000u
127 #define RISING_EDGE 0x00100000u
128 #define FALLING_EDGE 0x00200000u
129 #define GPIO_OUTPUT_TYPE 0x00000010u
131 #define GPIO_NUMBER 16u
134 #define GPIO_CR_MODE_INPUT 0x00000000u
135 #define GPIO_CR_CNF_ANALOG 0x00000000u
136 #define GPIO_CR_CNF_INPUT_FLOATING 0x00000004u
137 #define GPIO_CR_CNF_INPUT_PU_PD 0x00000008u
138 #define GPIO_CR_CNF_GP_OUTPUT_PP 0x00000000u
139 #define GPIO_CR_CNF_GP_OUTPUT_OD 0x00000004u
140 #define GPIO_CR_CNF_AF_OUTPUT_PP 0x00000008u
141 #define GPIO_CR_CNF_AF_OUTPUT_OD 0x0000000Cu
180 uint32_t position = 0x00u;
184 uint32_t config = 0x00u;
185 __IO uint32_t *configregister;
186 uint32_t registeroffset;
194 while (((GPIO_Init->
Pin) >> position) != 0x00u)
197 ioposition = (0x01uL << position);
200 iocurrent = (uint32_t)(GPIO_Init->
Pin) & ioposition;
202 if (iocurrent == ioposition)
208 switch (GPIO_Init->
Mode)
214 config = GPIO_Init->
Speed + GPIO_CR_CNF_GP_OUTPUT_PP;
221 config = GPIO_Init->
Speed + GPIO_CR_CNF_GP_OUTPUT_OD;
228 config = GPIO_Init->
Speed + GPIO_CR_CNF_AF_OUTPUT_PP;
235 config = GPIO_Init->
Speed + GPIO_CR_CNF_AF_OUTPUT_OD;
250 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_FLOATING;
254 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD;
257 GPIOx->
BSRR = ioposition;
261 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD;
264 GPIOx->
BRR = ioposition;
270 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG;
281 registeroffset = (iocurrent <
GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u);
288 if ((GPIO_Init->
Mode & EXTI_MODE) == EXTI_MODE)
292 temp =
AFIO->EXTICR[position >> 2u];
293 CLEAR_BIT(temp, (0x0Fu) << (4u * (position & 0x03u)));
294 SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4u * (position & 0x03u)));
295 AFIO->EXTICR[position >> 2u] = temp;
299 if ((GPIO_Init->
Mode & GPIO_MODE_IT) == GPIO_MODE_IT)
309 if ((GPIO_Init->
Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT)
319 if ((GPIO_Init->
Mode & RISING_EDGE) == RISING_EDGE)
329 if ((GPIO_Init->
Mode & FALLING_EDGE) == FALLING_EDGE)
353 uint32_t position = 0x00u;
356 __IO uint32_t *configregister;
357 uint32_t registeroffset;
364 while ((GPIO_Pin >> position) != 0u)
367 iocurrent = (GPIO_Pin) & (1uL << position);
374 tmp =
AFIO->EXTICR[position >> 2u];
375 tmp &= 0x0FuL << (4u * (position & 0x03u));
376 if (tmp == (GPIO_GET_INDEX(GPIOx) << (4u * (position & 0x03u))))
378 tmp = 0x0FuL << (4u * (position & 0x03u));
393 registeroffset = (iocurrent <
GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u);
473 GPIOx->
BSRR = GPIO_Pin;
477 GPIOx->
BSRR = (uint32_t)GPIO_Pin << 16u;
498 GPIOx->
BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);
524 GPIOx->
LCKR = GPIO_Pin;