/*============================================================================== * Инициализация портов с использованием бибилотеки PLIB035 *------------------------------------------------------------------------------ * ЦНИИ СЭТ, Разваляев Алексей *============================================================================== * Конфигурация портов настраивается в gpio.h * ЦНИИ СЭТ *============================================================================== */ //-- Includes ------------------------------------------------------------------ #include "periph_config.h" //-- Defines ------------------------------------------------------------------- //-- Peripheral init functions ------------------------------------------------- void gpio_init(void) { RCU_AHBClkCmd(RCU_AHBClk_GPIOA, ENABLE); RCU_AHBRstCmd(RCU_AHBRst_GPIOA, ENABLE); RCU_AHBClkCmd(RCU_AHBClk_GPIOB, ENABLE); RCU_AHBRstCmd(RCU_AHBRst_GPIOB, ENABLE); /* Сброс пинов */ GPIO_DeInit(GPIOA); GPIO_DeInit(GPIOB); // Инициализация порта A for (int i = 0; i < sizeof(gpioa_config) / sizeof(gpioa_config[0]); i++) { GPIO_Init(GPIOA, &gpioa_config[i]); } // Инициализация порта B for (int i = 0; i < sizeof(gpiob_config) / sizeof(gpiob_config[0]); i++) { GPIO_Init(GPIOB, &gpiob_config[i]); } // GPIO_StructInit(&gpio_init); // gpio_init.Digital = ENABLE; // GPIO_Init(GPIOA, &gpio_init); // GPIO_Init(GPIOB, &gpio_init); // // /* Инициализация выходных пинов Пуш-Пулл */ // gpio_init.Out = ENABLE; // gpio_init.OutMode = GPIO_OutMode_PP; // // gpio_init.Pin = GPIO_OUT_PP_PA_PINS; // GPIO_Init(GPIOA, &gpio_init); // gpio_init.Pin = GPIO_OUT_PP_PB_PINS; // GPIO_Init(GPIOB, &gpio_init); // // /* Инициализация выходных пинов Открытый сток */ // gpio_init.Out = ENABLE; // gpio_init.OutMode = GPIO_OutMode_OD; // // gpio_init.Pin = GPIO_OUT_OD_PA_PINS; // GPIO_Init(GPIOA, &gpio_init); // gpio_init.Pin = GPIO_OUT_OD_PB_PINS; // GPIO_Init(GPIOB, &gpio_init); } GPIO_Init_TypeDef *gpio_get_init(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) { uint8_t pin_index = __builtin_ctz(GPIO_Pin); if (GPIOx == GPIOA) { // Проверяем границы массива if (pin_index < sizeof(gpioa_config) / sizeof(gpioa_config[0])) { return &gpioa_config[pin_index]; } } else if (GPIOx == GPIOB) { // У тебя была опечатка: возвращал gpioa_config вместо gpiob_config if (pin_index < sizeof(gpiob_config) / sizeof(gpiob_config[0])) { return &gpiob_config[pin_index]; } } return NULL; }