можно и через "?" но мне никогда не требовалось, при любой
оптимизации все на месте.. у меня по такому принципу половина
периферии настраивается вот gpio
#define ADC_KEY_N (gpio_set_t){PINA_0, GPIO_Mode_AIN, DEF_LOW_LVL }
#define ADC_KEY_P (gpio_set_t){PINA_1, GPIO_Mode_AIN, DEF_LOW_LVL }
#define ADC_VBAT (gpio_set_t){PINA_2, GPIO_Mode_AIN, DEF_LOW_LVL }
#define OUT2 (gpio_set_t){PINA_3, GPIO_Mode_Out_PP, DEF_LOW_LVL }
#define LIN2_SLP (gpio_set_t){PINA_4, GPIO_Mode_Out_PP, DEF_LOW_LVL }
#define SPI_SCK (gpio_set_t){PINA_5, GPIO_Mode_AF_PP, DEF_LOW_LVL }
#define SPI_MISO (gpio_set_t){PINA_6, GPIO_Mode_IPU, DEF_LOW_LVL }
#define SPI_MOSI (gpio_set_t){PINA_7, GPIO_Mode_AF_PP, DEF_LOW_LVL }
.....
const gpio_set_t pin_arr[] =
{
// PORT A
ADC_KEY_N,
ADC_KEY_P,
ADC_VBAT,
OUT2,
LIN2_SLP,
SPI_SCK,
SPI_MISO,
SPI_MOSI,
.......
init
for (i = 0; pin_arr[i].port != END_PIN_ARR; i ++)
{
// clock enable
crm_periph_clock_enable(MCU_PORT_RCC(pin_arr[i].port), TRUE);
if (pin_arr[i].port != NC_PIN)
{
pin_init(pin_arr[i]);
set_pin_inactive(pin_arr[i]);
}
}