#pragma once #include /* pin mode */ // MODE_INPUT // MODE_OUTPUT_PP // MODE_OUTPUT_OD // MODE_AF_PP // MODE_AF_OD // MODE_ANALOG // MODE_IT_RISING // MODE_IT_FALLING // MODE_IT_RISING_FALLING // MODE_EVT_RISING // MODE_EVT_FALLING // MODE_EVT_RISING_FALLING /* pin speed */ // SPEED_FREQ_LOW // SPEED_FREQ_MEDIUM // SPEED_FREQ_HIGH // SPEED_FREQ_VERY_HIGH /* pin pulls */ //NOPULL //PULLUP //PULLDOWN /* pin config */ #define GPIO_NOAF (0u) #define EX_PIN_INIT( _PORT, _PIN, _MODE, _PULL, _SPEED, _AF )\ HAL_GPIO_Init( GPIO##_PORT, (GPIO_InitTypeDef[])\ {{\ .Pin = GPIO_PIN_##_PIN,\ .Mode = GPIO_##_MODE,\ .Pull = GPIO_##_PULL,\ .Speed = GPIO_##_SPEED,\ .Alternate = GPIO_##_AF\ }} ) #define PIN_INIT( CONFIG ) EX_PIN_INIT( CONFIG ) #define EX_PIN_DEINIT( _PORT, _PIN, ... ) HAL_GPIO_DeInit( GPIO##_PORT, GPIO_PIN_##_PIN ) #define PIN_DEINIT( CONFIG ) EX_PIN_DEINIT( CONFIG ) /* pin control */ #define EX_GPIO_PIN_STAT( PORT, PIN, ... ) ( (GPIO##PORT->IDR & (1u<IDR & (1u<BSRR = (1u<BSRR = (0x10000u<ODR & (1u<AHB1ENR;\ (void)tmp;\ }while(0) #define PORT_ENABLE_CLOCK1(_1) RCC->AHB1ENR |= RCC_AHB1ENR_GPIO##_1##EN #define PORT_ENABLE_CLOCK2(_1, _2) RCC->AHB1ENR |= RCC_AHB1ENR_GPIO##_1##EN |\ RCC_AHB1ENR_GPIO##_2##EN #define PORT_ENABLE_CLOCK3(_1, _2, _3) RCC->AHB1ENR |= RCC_AHB1ENR_GPIO##_1##EN |\ RCC_AHB1ENR_GPIO##_2##EN |\ RCC_AHB1ENR_GPIO##_3##EN #define PORT_ENABLE_CLOCK4(_1, _2, _3, _4) RCC->AHB1ENR |= RCC_AHB1ENR_GPIO##_1##EN |\ RCC_AHB1ENR_GPIO##_2##EN |\ RCC_AHB1ENR_GPIO##_3##EN |\ RCC_AHB1ENR_GPIO##_4##EN #define PORT_ENABLE_CLOCK5(_1, _2, _3, _4, _5) RCC->AHB1ENR |= RCC_AHB1ENR_GPIO##_1##EN |\ RCC_AHB1ENR_GPIO##_2##EN |\ RCC_AHB1ENR_GPIO##_3##EN |\ RCC_AHB1ENR_GPIO##_4##EN |\ RCC_AHB1ENR_GPIO##_5##EN #define PORT_ENABLE_CLOCK6(_1, _2, _3, _4, _5, _6) RCC->AHB1ENR |= RCC_AHB1ENR_GPIO##_1##EN |\ RCC_AHB1ENR_GPIO##_2##EN |\ RCC_AHB1ENR_GPIO##_3##EN |\ RCC_AHB1ENR_GPIO##_4##EN |\ RCC_AHB1ENR_GPIO##_5##EN |\ RCC_AHB1ENR_GPIO##_6##EN #define PORT_ENABLE_CLOCK7(_1, _2, _3, _4, _5, _6, _7) RCC->AHB1ENR |= RCC_AHB1ENR_GPIO##_1##EN |\ RCC_AHB1ENR_GPIO##_2##EN |\ RCC_AHB1ENR_GPIO##_3##EN |\ RCC_AHB1ENR_GPIO##_4##EN |\ RCC_AHB1ENR_GPIO##_5##EN |\ RCC_AHB1ENR_GPIO##_6##EN |\ RCC_AHB1ENR_GPIO##_7##EN #define PORT_ENABLE_CLOCK8(_1, _2, _3, _4, _5, _6, _7, _8) RCC->AHB1ENR |= RCC_AHB1ENR_GPIO##_1##EN |\ RCC_AHB1ENR_GPIO##_2##EN |\ RCC_AHB1ENR_GPIO##_3##EN |\ RCC_AHB1ENR_GPIO##_4##EN |\ RCC_AHB1ENR_GPIO##_5##EN |\ RCC_AHB1ENR_GPIO##_6##EN |\ RCC_AHB1ENR_GPIO##_7##EN |\ RCC_AHB1ENR_GPIO##_8##EN