Перейти к содержанию

Регистры ADC STM32F4

Регистры ADC1, ADC2, ADC3 и общих регистров STM32F4: разрядность, последовательности каналов регулярной и инжектированной групп, время выборки, внешний запуск с выбором фронта, DMA, сторож, двойной и тройной режимы.

У STM32F4 три АЦП с разрядностью 12, 10, 8 или 6 бит (поле RES): 12-битное преобразование занимает 15 тактов ADCCLK при минимальной выборке 3 такта. Частота АЦП общая — PCLK2, делённая на 2, 4, 6 или 8 полем ADCPRE регистра ADC_CCR; её предел указан в даташите (RM0090, глава 13).

Регулярная группа — до 16 преобразований SQ1…SQ16, их число L + 1; инжектированная — до 4. Внешний запуск включают выбором фронта в EXTEN, событие — EXTSEL; программный — битом SWSTART. Бит EOCS выбирает, когда ставить флаг EOC — после всей последовательности или после каждого преобразования; переполнение OVR ловится при DMA или EOCS = 1.

Общие регистры ADC_CSR, ADC_CCR и ADC_CDR лежат по адресу ADC1 + 0x300: в ADC_CCR выбирают делитель, двойной или тройной режим, режим DMA и включают датчик температуры с VREFINT (TSVREFE) и канал VBAT (VBATE). У STM32F405/407 датчик температуры подключён к ADC1_IN16, у STM32F42x/43x — к ADC1_IN18 вместе с VBAT.

ЭкземплярБазовый адресЕсть у
ADC10x4001 2000всех
ADC20x4001 2100всех
ADC30x4001 2200всех
ADC123_COMMON0x4001 2300всех

Регистры блока

РегистрСмещениеНазначениеПосле сброса
ADC_SR0x00Флаги состояния0x0000 0000
ADC_CR10x04Управление 1: сканирование, сторож, режимы0x0000 0000
ADC_CR20x08Управление 2: включение, запуск, выравнивание, DMA0x0000 0000
ADC_SMPR10x0CВремя выборки каналов от 10-го0x0000 0000
ADC_SMPR20x10Время выборки каналов 0–90x0000 0000
ADC_JOFR10x14Смещение инжектированного канала 10x0000 0000
ADC_JOFR20x18Смещение инжектированного канала 20x0000 0000
ADC_JOFR30x1CСмещение инжектированного канала 30x0000 0000
ADC_JOFR40x20Смещение инжектированного канала 40x0000 0000
ADC_HTR0x24Верхний порог аналогового сторожа0x0000 0FFF
ADC_LTR0x28Нижний порог аналогового сторожа0x0000 0000
ADC_SQR10x2CРегулярная последовательность: длина и места 13–160x0000 0000
ADC_SQR20x30Регулярная последовательность: места 7–120x0000 0000
ADC_SQR30x34Регулярная последовательность: места 1–60x0000 0000
ADC_JSQR0x38Инжектированная последовательность0x0000 0000
ADC_JDR10x3CРезультат инжектированного канала 10x0000 0000
ADC_JDR20x40Результат инжектированного канала 20x0000 0000
ADC_JDR30x44Результат инжектированного канала 30x0000 0000
ADC_JDR40x48Результат инжектированного канала 40x0000 0000
ADC_DR0x4CРезультат регулярного преобразования0x0000 0000
ADC_CSR0x00Общие флаги трёх АЦП0x0000 0000
ADC_CCR0x04Общие настройки: делитель, режимы, датчики0x0000 0000
ADC_CDR0x08Данные двойного и тройного режимов0x0000 0000

Конструктор значения

Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

ADC1->SR = 0x00000000;

ADC_SR — флаги состояния

Смещение 0x00, 32 бит, после сброса 0x0000 0000. В коде: ADC1->SR.

31302928272625242322212019181716
—
1514131211109876543210
—OVRSTRTJSTRTJEOCEOCAWD
  • OVR (бит 5) — Переполнение: результат не прочитан вовремя.
  • STRT (бит 4) — Началось преобразование регулярной группы.
  • JSTRT (бит 3) — Началось преобразование инжектированной группы.
  • JEOC (бит 2) — Преобразование инжектированной группы завершено.
  • EOC (бит 1) — Преобразование регулярной группы завершено.
  • AWD (бит 0) — Сработал аналоговый сторож: напряжение вне порогов.

ADC_CR1 — управление 1: сканирование, сторож, режимы

Смещение 0x04, 32 бит, после сброса 0x0000 0000. В коде: ADC1->CR1.

31302928272625242322212019181716
—OVRIERESAWDENJAWDEN—
1514131211109876543210
DISCNUMJDISCENDISCENJAUTOAWDSGLSCANJEOCIEAWDIEEOCIEAWDCH
  • OVRIE (бит 26) — Прерывание по переполнению.
  • RES (биты 25:24) — Разрядность преобразования.
    RESЗначение
    0012 бит (15 тактов ADCCLK)
    0110 бит (13 тактов)
    108 бит (11 тактов)
    116 бит (9 тактов)
  • AWDEN (бит 23) — Аналоговый сторож на регулярных каналах.
  • JAWDEN (бит 22) — Аналоговый сторож на инжектированных каналах.
  • DISCNUM (биты 15:13) — Число каналов за один запуск в прерывистом режиме: DISCNUM + 1.
    DISCNUMЗначение
    0001 канал
    0012 канала
    0103 канала
    0114 канала
    1005 каналов
    1016 каналов
    1107 каналов
    1118 каналов
  • JDISCEN (бит 12) — Прерывистый режим инжектированной группы.
  • DISCEN (бит 11) — Прерывистый режим регулярной группы.
  • JAUTO (бит 10) — Автоматический запуск инжектированной группы после регулярной.
  • AWDSGL (бит 9) — Сторож следит за одним каналом AWDCH или за всеми.
  • SCAN (бит 8) — Сканирование: каналы группы преобразуются по очереди.
  • JEOCIE (бит 7) — Прерывание по окончании инжектированной группы.
  • AWDIE (бит 6) — Прерывание аналогового сторожа.
  • EOCIE (бит 5) — Прерывание по окончании регулярной группы.
  • AWDCH (биты 4:0) — Канал аналогового сторожа при AWDSGL = 1.

ADC_CR2 — управление 2: включение, запуск, выравнивание, DMA

Смещение 0x08, 32 бит, после сброса 0x0000 0000. В коде: ADC1->CR2.

31302928272625242322212019181716
—SWSTARTEXTENEXTSEL—JSWSTARTJEXTENJEXTSEL
1514131211109876543210
—ALIGNEOCSDDSDMA—CONTADON
  • SWSTART (бит 30) — Программный запуск регулярной группы.
  • EXTEN (биты 29:28) — Внешний запуск регулярной группы и его фронт.
    EXTENЗначение
    00Внешний запуск выключен
    01Нарастающий фронт
    10Спадающий фронт
    11Оба фронта
  • EXTSEL (биты 27:24) — Событие запуска регулярной группы.
    EXTSELЗначение
    0000TIM1 CC1
    0001TIM1 CC2
    0010TIM1 CC3
    0011TIM2 CC2
    0100TIM2 CC3
    0101TIM2 CC4
    0110TIM2 TRGO
    0111TIM3 CC1
    1000TIM3 TRGO
    1001TIM4 CC4
    1010TIM5 CC1
    1011TIM5 CC2
    1100TIM5 CC3
    1101TIM8 CC1
    1110TIM8 TRGO
    1111EXTI11
  • JSWSTART (бит 22) — Программный запуск инжектированной группы.
  • JEXTEN (биты 21:20) — Внешний запуск инжектированной группы и его фронт.
    JEXTENЗначение
    00Внешний запуск выключен
    01Нарастающий фронт
    10Спадающий фронт
    11Оба фронта
  • JEXTSEL (биты 19:16) — Событие запуска инжектированной группы.
    JEXTSELЗначение
    0000TIM1 CC4
    0001TIM1 TRGO
    0010TIM2 CC1
    0011TIM2 TRGO
    0100TIM3 CC2
    0101TIM3 CC4
    0110TIM4 CC1
    0111TIM4 CC2
    1000TIM4 CC3
    1001TIM4 TRGO
    1010TIM5 CC4
    1011TIM5 TRGO
    1100TIM8 CC2
    1101TIM8 CC3
    1110TIM8 CC4
    1111EXTI15
  • ALIGN (бит 11) — Выравнивание результата в 16-битном регистре.
    ALIGNЗначение
    0По правому краю
    1По левому краю
  • EOCS (бит 10) — Когда ставится флаг EOC.
    EOCSЗначение
    0После всей последовательности
    1После каждого преобразования
  • DDS (бит 9) — Запросы DMA после последней передачи: прекращаются или продолжаются.
  • DMA (бит 8) — Запрос DMA после каждого регулярного преобразования.
  • CONT (бит 1) — Непрерывные преобразования.
  • ADON (бит 0) — Включение АЦП.

ADC_SMPR1 — время выборки каналов от 10-го

Смещение 0x0C, 32 бит, после сброса 0x0000 0000. В коде: ADC1->SMPR1.

31302928272625242322212019181716
—SMP18SMP17SMP16SMP15
1514131211109876543210
SMP15SMP14SMP13SMP12SMP11SMP10
  • SMP10–SMP18 (по 3 бита на каждый y, положение — на карте битов) — Время выборки канала y.
    SMPyЗначение
    0003 тактов
    00115 тактов
    01028 тактов
    01156 тактов
    10084 тактов
    101112 тактов
    110144 тактов
    111480 тактов

ADC_SMPR2 — время выборки каналов 0–9

Смещение 0x10, 32 бит, после сброса 0x0000 0000. В коде: ADC1->SMPR2.

31302928272625242322212019181716
—SMP9SMP8SMP7SMP6SMP5
1514131211109876543210
SMP5SMP4SMP3SMP2SMP1SMP0
  • SMP0–SMP9 (по 3 бита на каждый y, положение — на карте битов) — Время выборки канала y.
    SMPyЗначение
    0003 тактов
    00115 тактов
    01028 тактов
    01156 тактов
    10084 тактов
    101112 тактов
    110144 тактов
    111480 тактов

ADC_JOFR1 — смещение инжектированного канала 1

Смещение 0x14, 32 бит, после сброса 0x0000 0000. В коде: ADC1->JOFR1.

31302928272625242322212019181716
—
1514131211109876543210
—JOFFSET1
  • JOFFSET1 (биты 11:0) — Смещение, вычитаемое из результата инжектированного канала 1.

ADC_JOFR2 — смещение инжектированного канала 2

Смещение 0x18, 32 бит, после сброса 0x0000 0000. В коде: ADC1->JOFR2.

31302928272625242322212019181716
—
1514131211109876543210
—JOFFSET2
  • JOFFSET2 (биты 11:0) — Смещение, вычитаемое из результата инжектированного канала 2.

ADC_JOFR3 — смещение инжектированного канала 3

Смещение 0x1C, 32 бит, после сброса 0x0000 0000. В коде: ADC1->JOFR3.

31302928272625242322212019181716
—
1514131211109876543210
—JOFFSET3
  • JOFFSET3 (биты 11:0) — Смещение, вычитаемое из результата инжектированного канала 3.

ADC_JOFR4 — смещение инжектированного канала 4

Смещение 0x20, 32 бит, после сброса 0x0000 0000. В коде: ADC1->JOFR4.

31302928272625242322212019181716
—
1514131211109876543210
—JOFFSET4
  • JOFFSET4 (биты 11:0) — Смещение, вычитаемое из результата инжектированного канала 4.

ADC_HTR — верхний порог аналогового сторожа

Смещение 0x24, 32 бит, после сброса 0x0000 0FFF. В коде: ADC1->HTR.

31302928272625242322212019181716
—
1514131211109876543210
—HT
  • HT (биты 11:0) — Верхний порог аналогового сторожа.

ADC_LTR — нижний порог аналогового сторожа

Смещение 0x28, 32 бит, после сброса 0x0000 0000. В коде: ADC1->LTR.

31302928272625242322212019181716
—
1514131211109876543210
—LT
  • LT (биты 11:0) — Нижний порог аналогового сторожа.

ADC_SQR1 — регулярная последовательность: длина и места 13–16

Смещение 0x2C, 32 бит, после сброса 0x0000 0000. В коде: ADC1->SQR1.

31302928272625242322212019181716
—LSQ16
1514131211109876543210
SQ16SQ15SQ14SQ13
  • L (биты 23:20) — Число преобразований регулярной группы: L + 1.
  • SQ13–SQ16 (по 5 бита на каждый y, положение — на карте битов) — Номер канала на y-м месте регулярной последовательности.

ADC_SQR2 — регулярная последовательность: места 7–12

Смещение 0x30, 32 бит, после сброса 0x0000 0000. В коде: ADC1->SQR2.

31302928272625242322212019181716
—SQ12SQ11SQ10
1514131211109876543210
SQ10SQ9SQ8SQ7
  • SQ7–SQ12 (по 5 бита на каждый y, положение — на карте битов) — Номер канала на y-м месте регулярной последовательности.

ADC_SQR3 — регулярная последовательность: места 1–6

Смещение 0x34, 32 бит, после сброса 0x0000 0000. В коде: ADC1->SQR3.

31302928272625242322212019181716
—SQ6SQ5SQ4
1514131211109876543210
SQ4SQ3SQ2SQ1
  • SQ1–SQ6 (по 5 бита на каждый y, положение — на карте битов) — Номер канала на y-м месте регулярной последовательности.

ADC_JSQR — инжектированная последовательность

Смещение 0x38, 32 бит, после сброса 0x0000 0000. В коде: ADC1->JSQR.

31302928272625242322212019181716
—JLJSQ4
1514131211109876543210
JSQ4JSQ3JSQ2JSQ1
  • JL (биты 21:20) — Число преобразований инжектированной группы: JL + 1.
  • JSQ4 (биты 19:15) — Номер канала в поле JSQ4; при JL < 3 последовательность начинается не с JSQ1, а заканчивается на JSQ4.
  • JSQ3 (биты 14:10) — Номер канала в поле JSQ3; при JL < 3 последовательность начинается не с JSQ1, а заканчивается на JSQ4.
  • JSQ2 (биты 9:5) — Номер канала в поле JSQ2; при JL < 3 последовательность начинается не с JSQ1, а заканчивается на JSQ4.
  • JSQ1 (биты 4:0) — Номер канала в поле JSQ1; при JL < 3 последовательность начинается не с JSQ1, а заканчивается на JSQ4.

ADC_JDR1 — результат инжектированного канала 1

Смещение 0x3C, 32 бит, после сброса 0x0000 0000. В коде: ADC1->JDR1.

31302928272625242322212019181716
—
1514131211109876543210
JDATA
  • JDATA (биты 15:0) — Результат инжектированного канала за вычетом смещения JOFFSET.

ADC_JDR2 — результат инжектированного канала 2

Смещение 0x40, 32 бит, после сброса 0x0000 0000. В коде: ADC1->JDR2.

31302928272625242322212019181716
—
1514131211109876543210
JDATA
  • JDATA (биты 15:0) — Результат инжектированного канала за вычетом смещения JOFFSET.

ADC_JDR3 — результат инжектированного канала 3

Смещение 0x44, 32 бит, после сброса 0x0000 0000. В коде: ADC1->JDR3.

31302928272625242322212019181716
—
1514131211109876543210
JDATA
  • JDATA (биты 15:0) — Результат инжектированного канала за вычетом смещения JOFFSET.

ADC_JDR4 — результат инжектированного канала 4

Смещение 0x48, 32 бит, после сброса 0x0000 0000. В коде: ADC1->JDR4.

31302928272625242322212019181716
—
1514131211109876543210
JDATA
  • JDATA (биты 15:0) — Результат инжектированного канала за вычетом смещения JOFFSET.

ADC_DR — результат регулярного преобразования

Смещение 0x4C, 32 бит, после сброса 0x0000 0000. В коде: ADC1->DR.

31302928272625242322212019181716
ADC2DATA
1514131211109876543210
DATA
  • ADC2DATA (биты 31:16) — По RM0090 биты зарезервированы; данные ADC2 в двойном режиме — в ADC_CDR.
  • DATA (биты 15:0) — Результат регулярного преобразования.

ADC_CSR — общие флаги трёх АЦП

Смещение 0x00, адрес 0x4001 2300, 32 бит, после сброса 0x0000 0000. В коде: ADC123_COMMON->CSR.

31302928272625242322212019181716
—OVR3STRT3JSTRT3JEOC3EOC3AWD3
1514131211109876543210
—OVR2STRT2JSTRT2JEOC2EOC2AWD2—OVR1STRT1JSTRT1JEOC1EOC1AWD1
  • OVR1–OVR3 (по биту на каждый y, положение — на карте битов) — Переполнение: результат не прочитан вовремя (АЦПy).
  • STRT1–STRT3 (по биту на каждый y, положение — на карте битов) — Началось преобразование регулярной группы (АЦПy).
  • JSTRT1–JSTRT3 (по биту на каждый y, положение — на карте битов) — Началось преобразование инжектированной группы (АЦПy).
  • JEOC1–JEOC3 (по биту на каждый y, положение — на карте битов) — Преобразование инжектированной группы завершено (АЦПy).
  • EOC1–EOC3 (по биту на каждый y, положение — на карте битов) — Преобразование регулярной группы завершено (АЦПy).
  • AWD1–AWD3 (по биту на каждый y, положение — на карте битов) — Сработал аналоговый сторож АЦПy: напряжение вне порогов.

ADC_CCR — общие настройки: делитель, режимы, датчики

Смещение 0x04, адрес 0x4001 2304, 32 бит, после сброса 0x0000 0000. В коде: ADC123_COMMON->CCR.

31302928272625242322212019181716
—TSVREFEVBATE—ADCPRE
1514131211109876543210
DMADDS—DELAY—MULTI
  • TSVREFE (бит 23) — Включение датчика температуры и канала VREFINT.
  • VBATE (бит 22) — Включение канала VBAT.
  • ADCPRE (биты 17:16) — Делитель частоты всех АЦП от PCLK2.
    ADCPREЗначение
    00PCLK2 / 2
    01PCLK2 / 4
    10PCLK2 / 6
    11PCLK2 / 8
  • DMA (биты 15:14) — Режим DMA в двойном и тройном режимах.
    DMAЗначение
    00Выключен
    01Режим 1: полуслова по одному
    10Режим 2: полуслова парами
    11Режим 3: байты парами
  • DDS (бит 13) — Запросы DMA многоканального режима после последней передачи: прекращаются или продолжаются.
  • DELAY (биты 11:8) — Пауза между выборками в чередующемся режиме: 5–20 тактов ADCCLK.
    DELAYЗначение
    00005 тактов ADCCLK
    00016 тактов ADCCLK
    00107 тактов ADCCLK
    00118 тактов ADCCLK
    01009 тактов ADCCLK
    010110 тактов ADCCLK
    011011 тактов ADCCLK
    011112 тактов ADCCLK
    100013 тактов ADCCLK
    100114 тактов ADCCLK
    101015 тактов ADCCLK
    101116 тактов ADCCLK
    110017 тактов ADCCLK
    110118 тактов ADCCLK
    111019 тактов ADCCLK
    111120 тактов ADCCLK
  • MULTI (биты 4:0) — Совместная работа АЦП: независимо, двойной или тройной режим.
    MULTIЗначение
    00000Все АЦП независимы
    00001Двойной: одновременные регулярные + одновременные инжектированные
    00010Двойной: одновременные регулярные + поочерёдный запуск
    00101Двойной: только одновременные инжектированные
    00110Двойной: только одновременные регулярные
    00111Двойной: только чередование
    01001Двойной: только поочерёдный запуск
    10001Тройной: одновременные регулярные + одновременные инжектированные
    10010Тройной: одновременные регулярные + поочерёдный запуск
    10101Тройной: только одновременные инжектированные
    10110Тройной: только одновременные регулярные
    10111Тройной: только чередование
    11001Тройной: только поочерёдный запуск

ADC_CDR — данные двойного и тройного режимов

Смещение 0x08, адрес 0x4001 2308, 32 бит, после сброса 0x0000 0000. В коде: ADC123_COMMON->CDR.

31302928272625242322212019181716
DATA2
1514131211109876543210
DATA1
  • DATA2 (биты 31:16) — Второе значение пары: в двойном режиме — данные ADC2.
  • DATA1 (биты 15:0) — Первое значение пары: в двойном режиме — данные ADC1.

Частые вопросы

Как запустить преобразование на STM32F407 программно?

Включите тактирование ADC1 (RCC_APB2ENR), задайте делитель ADCPRE в ADC->CCR, включите АЦП (ADON = 1), запишите канал в SQ1 регистра SQR3 и время выборки в SMPR. Запуск — битом SWSTART в ADC1->CR2, готовность — флаг EOC в SR, результат — в DR.

Как запускать АЦП от таймера?

Выберите событие в EXTSEL — например, 0110 для TRGO таймера TIM2 — и фронт в EXTEN (01 — нарастающий). В таймере настройте выход TRGO полем MMS регистра CR2, например событие обновления (010). Каждое переполнение таймера запустит преобразование.

Где взять результат в двойном режиме?

В регистре ADC_CDR: младшие 16 бит — данные ADC1, старшие — ADC2. Режим DMA для пар данных выбирают полем DMA регистра ADC_CCR; биты 31:16 регистра ADC_DR в RM0090 зарезервированы.

Источники

  1. STMicroelectronics. RM0090: Reference manual (Rev 22) — раздел 13.13: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f4 v2.6.11: заголовки CMSIS stm32f405xx.h, stm32f407xx.h, stm32f415xx.h, stm32f417xx.h, stm32f427xx.h, stm32f429xx.h, stm32f437xx.h, stm32f439xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

Нашли ошибку в регистрах?

Другие регистры STM32F4

Калькуляторы и статьи