int main() { __GPIOA_CLK_ENABLE(); auto init_configuration = GPIO_InitTypeDef(); init_configuration.Pin = GPIO_PIN_0; init_configuration.Mode = GPIO_MODE_OUTPUT_PP; init_configuration.Pull = GPIO_NOPULL; init_configuration.Speed = GPIO_SPEED_HIGH; init_configuration.Alternate = 0; HAL_GPIO_Init(GPIOA, &init_configuration); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); return 0; }
GPIOPins::GPIOPins(GPIO_TypeDef *peripheral, std::initializer_list<Pin> pins, Mode mode, Pull pull, Speed speed, AlternateFunction alternate /*= AlternateFunction::None*/) { this->peripheral = peripheral; for (const auto &pin : pins) { pins_bitmask |= std::bitset<16>(static_cast<uint16_t>(pin)); } //if (std::find(initialized_peripherals.begin(), initialized_peripherals.end(), peripheral) == initialized_peripherals.end()) { if (peripheral == GPIOA) __GPIOA_CLK_ENABLE(); else if (peripheral == GPIOB) __GPIOB_CLK_ENABLE(); else if (peripheral == GPIOC) __GPIOC_CLK_ENABLE(); else if (peripheral == GPIOD) __GPIOD_CLK_ENABLE(); else if (peripheral == GPIOE) __GPIOE_CLK_ENABLE(); else if (peripheral == GPIOF) __GPIOF_CLK_ENABLE(); else if (peripheral == GPIOG) __GPIOG_CLK_ENABLE(); else if (peripheral == GPIOH) __GPIOH_CLK_ENABLE(); else if (peripheral == GPIOI) __GPIOI_CLK_ENABLE(); //} //initialized_peripherals.push_back(peripheral); auto init_configuration = GPIO_InitTypeDef(); init_configuration.Pin = pins_bitmask.to_ulong(); init_configuration.Mode = static_cast<uint32_t>(mode); init_configuration.Pull = static_cast<uint32_t>(pull); init_configuration.Speed = static_cast<uint32_t>(speed); if (alternate != AlternateFunction::None) init_configuration.Alternate = static_cast<uint8_t>(alternate); HAL_GPIO_Init(peripheral, &init_configuration); }