Цитата(dxp @ Aug 15 2014, 08:58)

Чем это лучше, чем просто комментить строку? Закомментированная строка сразу видна в редакторе с подсветкой синтактсиса, что, имхо, является плюсом, т.к. сразу видно, что активно, а что нет. Или вы что-то иное, нежели механизм оперативного включения/выключения битов, имели в виду?
Иное. Хотя и с вашим утверждением не согласен. Умножил на 0, и знаешь, что этот бит в нуле. Нужна 1, заменил 0 на 1. Однообразие.
Имею же в виду следующее, покажу конкретно на примере из сообщения №4.
Код
ADC12_CCR_DELAY_0 * 4 | // Delay between 2 sampling phases: 5
Из stm32f30x.h имеем
Код
#define ADC12_CCR_DELAY_0 ((uint32_t)0x00000100) /*!< DELAY bit 0 */
Из мануала на STM32F303xx
Цитата
Bits 11:8 DELAY: Delay between 2 sampling phases
Set and cleared by software. These bits are used in dual interleaved modes.
...
0100 5 * TADC_CLK
0x00000100 * 0x4 = 0x00000400
Таким образом, умножив маску младшего бита на номер режима, я задаю все нужные биты режима одним махом. Не нужно устанавливать/сбрасывать все биты по-отдельности. Получается не 32 строчки (о чем писалось в начале темы), а намного меньше, столько, сколько есть полей для выбора режимов (в некоторых исключительных случаях поля режимов разбиты на 2, один бит где-то в другом месте болтается, тогда приходится описывать его отдельно).
И тогда - пробежался взглядом по инициализации, и все установки - как на ладони.
Для демонстрации красоты способа, вот другой пример (табуляция сползает, надоело править!):
Код
DAC->CR =
DAC_CR_EN1 * 1 | // DAC channel1 enable
DAC_CR_BOFF1 * 0 | // DAC channel1 output buffer disable
DAC_CR_TEN1 * 1 | // DAC channel1 Trigger enable
DAC_CR_TSEL1_0 * 3 | // DAC channel1 Trigger selection: TIM15
DAC_CR_WAVE1_0 * 2 | // DAC channel1 noise/triangle wave generation
DAC_CR_MAMP1_0 * 11 | // DAC channel1 Mask/Amplitude selector: 12 bit
DAC_CR_DMAEN1 * 0 | // DAC channel1 DMA enable
DAC_CR_EN2 * 1 | // DAC channel2 enable
DAC_CR_BOFF2 * 0 | // DAC channel2 output buffer disable
DAC_CR_TEN2 * 0 | // DAC channel2 Trigger enable
DAC_CR_TSEL2_0 * 7 | // DAC channel2 Trigger selection: Software
DAC_CR_WAVE2_0 * 0 | // DAC channel2 noise/triangle wave generation enable
DAC_CR_MAMP2_0 * 0 | // DAC channel2 Mask/Amplitude selector
DAC_CR_DMAEN2 * 0; // DAC channel2 DMA enable