Цитата(Метценгерштейн @ Jan 3 2013, 17:53)

#define GPIO_OSPEEDER_OSPEEDR0 ((uint32_t)0x00000003)
#define GPIO_OSPEEDER_OSPEEDR0_0 ((uint32_t)0x00000001)
#define GPIO_OSPEEDER_OSPEEDR0_1 ((uint32_t)0x00000002)
00: 400 kHz Very low speed
01: 2 MHz Low speed
10: 10 MHz Medium speed
11: 40 MHz High speed on 50 pF (50 MHz output max speed on 30 pF)
Здесь больше всего подходит обычное арифметическое умножение.
Если z - это число 0, 1, 2 или 3, которое характеризует желаемую скорость от 400 кГц до 40 МГц, то в регистр нужно записывать GPIO_OSPEEDER_OSPEEDR0_0 * z .
Нужно умножать всегда константу для бита 0 (то есть у которой имя заканчивается на "_0") на число - значение битового поля.
Цитата(Метценгерштейн @ Jan 3 2013, 20:17)

а если я на др cortex перенесу проект? не STM например.
какой стиль программирования легче будет адаптировать?
По любому пргорамму сильно переделывать. Например у другого процессора набор этих частот будет другой. Например (чисто например) если 1 МГц, 3 МГц, 15 МГц и 50 МГц? Тогда если у вас было 2 МГц, то на что его заменить - на 1 МГц или на 3 МГц? Всё равно придётся смотреть конкретно вашу задачу в каждом месте.
Цитата(Метценгерштейн @ Jan 3 2013, 20:17)

И как на скорости сказывается дополнительный вызов ф-ий и прочего при использовании StdPerifLib?
Плохо сказывается на скорости. И ещё плохо сказывается на том, что программу с StdPerifLib трудно сопоставить с даташитом на процессор. В даташите написано, что будет если в определённом регистре выставлены определённые биты. А StdPerifLib этот регистр прячет, какие там биты выставлены - трудно может быть выяснить.