Разбираюсь с камнем STM32F100. Изучаю инициализацию. Т.в. стандартная библиотека инициализации stm32f10x_gpio не понравилась, а конкретнее void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
Мои желания были следующие – максимальная быстрота инициализации GPIO, максимальное удобство. Насчёт быстроты понятно – слишком много операторов, не комильфо, а цикл поиска вообще убил. Ладно, попробовал воспользоваться. Т.в. удобством тоже не пахнет. От количества структур в глазах начало рябить, и это только от инициализации одного порта. Сделал свою инициализацию. Меня устраивает и скорость и наглядность. Покритикуйте.
CODE
//**************GPIO mode*************
#define Input 0
#define Output_10MHz 1
#define Output_2MHz 2
#define Output_50MHz 3
//**************GPIO config***********
#define Analog 0
#define Floating 1
#define Pull_up_down 2
#define Push_pull 0
#define Open_drain 1
#define Alternate_fun_Push_pull 2
#define Alternate_fun_Open_drain 3
//PORTA************************************************
GPIOA.CRL=
//Pin0----
(Output_2MHz << 0) |(Push_pull << 2)| //no
//Pin1----
(Output_2MHz << 4) |(Push_pull << 6)| //no
//Pin2----
(Output_2MHz << 8) |(Push_pull << 10)| //no
//Pin3----
(Output_2MHz << 12)|(Push_pull << 14)| //no
//Pin4----
(Output_2MHz << 16)|(Push_pull << 18)| //no
//Pin5----
(Output_2MHz << 20)|(Push_pull << 22)| //no
//Pin6----
(Output_2MHz << 24)|(Push_pull << 26)| //no
//Pin7----
(Output_2MHz << 28)|(Push_pull << 30); //no
//--------
GPIOA.CRH=
//Pin8----
(Output_2MHz << 0) |(Push_pull << 2)| //GSM_Pwr_key
//Pin9----
(Input << 4) |(Floating << 6)| //RX
//Pin10----
(Input << 8) |(Floating << 10)| //TX
//Pin11----
(Output_2MHz << 12)|(Push_pull << 14)| //non func
//Pin12----
(Output_2MHz << 16)|(Push_pull << 18)| //Pow_GSM
//Pin13----
(Output_2MHz << 20)|(Push_pull << 22)| //no
//Pin14----
(Output_2MHz << 24)|(Push_pull << 26)| //no
//Pin15----
(Output_2MHz << 28)|(Push_pull << 30); //no
//====================
GPIOA.ODR = (0<<0)|
(0<<1)|
(0<<2)|
(0<<3)|
(0<<4)|
(0<<5)|
(0<<6)|
(0<<7)|
(0<<8)|
(0<<9)|
(0<<10)|
(0<<11)|
(0<<12)|
(0<<13)|
(0<<14)|
(0<<15);
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!