Не разбирам какво ти трябва...
GPIOB е порт B, т.е. става дума за пинове PB0-PB15
CRLH е Port configuration register low, т.е. в него са настройките на PB0-PB7 като за всеки пин има по 4 бита.
Младшите 2 бита определят режима:
MODEy[1:0]: Port x mode bits (y= 0 .. 7)
00: Input mode (reset state)
01: Output mode, max speed 10 MHz.
10: Output mode, max speed 2 MHz.
11: Output mode, max speed 50 MHz.
Старшите 2 са CNFy[1:0]: Port x configuration bits (y= 0 .. 7)
In input mode (MODE[1:0]=00):
00: Analog mode
01: Floating input (reset state)
10: Input with pull-up / pull-down
11: Reserved
In output mode (MODE[1:0] > 00):
00: General purpose output push-pull
01: General purpose output Open-drain
10: Alternate function output Push-pull
11: Alternate function output Open-drain
В твоя пример имаш:
GPIOB->CRL&=0X0FFFFFFF - сваля старшите 4 бита, а GPIOB->CRL|=4<<28 им слага стойност. Идеята вероятно е да конфигурират пин PB7 като Input mode + Floating input
във втория макрос идеята им сигурно е Output mode, max speed 50 MHz + General purpose output push-pull
С две думи сетват най-старшите 4 бите на CRL за да програмират PB7 в един или друг режим. Само като забележка, въпросният регистър има не 4 а общо 32 бита. И ако не дай си Боже решиш да ползваш и някой друг пин от PB0-PB6 то трябва да си много внимателен двете конфигурирания да не се застъпват. Т.е. да не би в прекъсване някъде да програмираш един пин, а в друг контекст да програмираш друг пин. Резултатът може и да не ти хареса
