Цитата(mihlit @ Sep 1 2018, 13:07)

Записать магическое число 0х50000000 или есть какой-то дефайн? Смотрел stm32f4xx.h, stm32f4_gpio.h - не нашел. Ткните-пните в нужном направлениию
Любое битовое поле в регистре в общем случае записывается в два прохода:
сначала выставляются 1 в нужных позициях
затем 0
Можно наоборот, порядок не важен.
Для этого нужно знать: имя модифицируемого регистра, позицию битового поля внутри регистра, маску этого битового поля и нужное значение.
Оформить эти 2 строчки кода можно в виде макроса
Код
// Макрос записи в регистр reg битовой последовательности val в позицию pos (по младшему разряду)
// msk - маска битового поля
#define TuneBitField(reg,val,pos,msk) \
{(reg) |= (((val) << (pos))&(msk)); \
(reg) &= (((val) << (pos))|~(msk));}
Имена регистров ( в вашем случае это GPIOA->AFRH), позиции и маски битовых полей описываются в .h-файле на конкретный микроконтроллер. Берёте их оттуда и подставляете в качестве аргументов макроса. В качестве значения val подставляете требуемое 5.