108 #include "stm32f4xx_hal.h"
119 #ifdef HAL_GPIO_MODULE_ENABLED
126 #define GPIO_MODE 0x00000003U
127 #define EXTI_MODE 0x10000000U
128 #define GPIO_MODE_IT 0x00010000U
129 #define GPIO_MODE_EVT 0x00020000U
130 #define RISING_EDGE 0x00100000U
131 #define FALLING_EDGE 0x00200000U
132 #define GPIO_OUTPUT_TYPE 0x00000010U
134 #define GPIO_NUMBER 16U
174 uint32_t ioposition = 0x00U;
175 uint32_t iocurrent = 0x00U;
176 uint32_t temp = 0x00U;
185 for(position = 0U; position < GPIO_NUMBER; position++)
188 ioposition = 0x01U << position;
190 iocurrent = (uint32_t)(GPIO_Init->
Pin) & ioposition;
192 if(iocurrent == ioposition)
204 temp |= (GPIO_Init->
Speed << (position * 2U));
210 temp |= (((GPIO_Init->
Mode & GPIO_OUTPUT_TYPE) >> 4U) << position);
217 temp |= ((GPIO_Init->
Pull) << (position * 2U));
226 temp = GPIOx->
AFR[position >> 3U];
227 temp &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ;
228 temp |= ((uint32_t)(GPIO_Init->
Alternate) << (((uint32_t)position & 0x07U) * 4U));
229 GPIOx->
AFR[position >> 3U] = temp;
235 temp |= ((GPIO_Init->
Mode & GPIO_MODE) << (position * 2U));
240 if((GPIO_Init->
Mode & EXTI_MODE) == EXTI_MODE)
245 temp =
SYSCFG->EXTICR[position >> 2U];
246 temp &= ~(0x0FU << (4U * (position & 0x03U)));
247 temp |= ((uint32_t)(
GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U)));
248 SYSCFG->EXTICR[position >> 2U] = temp;
252 temp &= ~((uint32_t)iocurrent);
253 if((GPIO_Init->
Mode & GPIO_MODE_IT) == GPIO_MODE_IT)
260 temp &= ~((uint32_t)iocurrent);
261 if((GPIO_Init->
Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT)
269 temp &= ~((uint32_t)iocurrent);
270 if((GPIO_Init->
Mode & RISING_EDGE) == RISING_EDGE)
277 temp &= ~((uint32_t)iocurrent);
278 if((GPIO_Init->
Mode & FALLING_EDGE) == FALLING_EDGE)
299 uint32_t ioposition = 0x00U;
300 uint32_t iocurrent = 0x00U;
301 uint32_t tmp = 0x00U;
307 for(position = 0U; position < GPIO_NUMBER; position++)
310 ioposition = 0x01U << position;
312 iocurrent = (GPIO_Pin) & ioposition;
314 if(iocurrent == ioposition)
317 tmp =
SYSCFG->EXTICR[position >> 2U];
318 tmp &= (0x0FU << (4U * (position & 0x03U)));
319 if(tmp == ((uint32_t)(
GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U))))
322 EXTI->IMR &= ~((uint32_t)iocurrent);
323 EXTI->EMR &= ~((uint32_t)iocurrent);
326 EXTI->RTSR &= ~((uint32_t)iocurrent);
327 EXTI->FTSR &= ~((uint32_t)iocurrent);
330 tmp = 0x0FU << (4U * (position & 0x03U));
331 SYSCFG->EXTICR[position >> 2U] &= ~tmp;
339 GPIOx->
AFR[position >> 3U] &= ~(0xFU << ((uint32_t)(position & 0x07U) * 4U)) ;
420 GPIOx->
BSRR = GPIO_Pin;
424 GPIOx->
BSRR = (uint32_t)GPIO_Pin << 16U;
440 if ((GPIOx->
ODR & GPIO_Pin) == GPIO_Pin)
442 GPIOx->
BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
446 GPIOx->
BSRR = GPIO_Pin;
473 GPIOx->
LCKR = GPIO_Pin;