Цитата(andries5 @ Oct 26 2012, 22:24)

Пугает. Так как надо обсчитать каждый регистр. А наглядности нет. Инициализация проводится один раз по включению, и написав ее с использованием ст. библиотек получим уверенную инициализацию без ошибок.
Вот как оно задается. Написано один раз. Ошибок не наблюдал ни разу.

Куда уж больше наглядности?
CODE
/* Port bit configuration table */
typedef enum {
IN_ANALG, GPO_PP10, GPO_PP02, GPO_PP50, // Input Analog, GP Output Push-pull 10-2-50MHz
IN_FLOAT, GPO_OD10, GPO_OD02, GPO_OD50, // Input Float (reset state), GP Output Open-drain 10-2-50MHz
IN_PD_PU, AFO_PP10, AFO_PP02, AFO_PP50, // Input Pull-down/Pull-up, Alt Func Push-pull
CFG_void, AFO_OD10, AFO_OD02, AFO_OD50 // void(illegal), Alt Func Open-drain 10-2-50MHz
} CFG_MODE;
/*!
*******************************************************************************
* @brief Port Low/High byte configuration
* @details Конфигурация байтов порта целиком
* @param PORT - имя порта (A..G)
* @param CM15..CM00 - конфигурация битов 15..0
* @return
* @note Используется перечисляемый тип CFG_MODE
* @note Для IN_PD_PU нужный pull-down, pull-up задается в ODR
*/
#define GPIO_PORTL_CFG(PORT,CM07,CM06,CM05,CM04,CM03,CM02,CM01,CM00) \
GPIO##PORT->CRL = ((uint32_t)CM07<<28|CM06<<24|CM05<<20|CM04<<16|CM03<<12|CM02<<8|CM01<<4|CM00)
#define GPIO_PORTH_CFG(PORT,CM15,CM14,CM13,CM12,CM11,CM10,CM09,CM08) \
GPIO##PORT->CRH = ((uint32_t)CM15<<28|CM14<<24|CM13<<20|CM12<<16|CM11<<12|CM10<<8|CM09<<4|CM08)
/*!
*******************************************************************************
* @brief Bit of Low/High byte Port configuration
* @details Конфигурация одиночного бита порта
* @param PORT - имя порта (A..G)
* @param BIT - номер бита (0..15)
* @param CM - конфигурация бита
* @return
* @note Используется перечисляемый тип CFG_MODE
* @note Для IN_PD_PU нужный pull-down, pull-up задается в ODR
*/
#define GPIO_LBIT_CFG(PORT,BIT,CM) \
GPIO##PORT->CRL = GPIO##PORT->CRL & (~(0xf<<BIT*4)) | (CM<<BIT*4)
#define GPIO_HBIT_CFG(PORT,BIT,CM) \
GPIO##PORT->CRH = GPIO##PORT->CRH & (~(0xf<<(BIT-8)*4)) | (CM<<(BIT-8)*4)
По-прежнему... пугает?