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

Регистры ADC STM32G0

Регистры АЦП STM32G0: регулятор напряжения, калибровка и запуск, флаги, выбор каналов маской или последовательностью, два времени выборки, разрядность, передискретизация, три аналоговых сторожа и внутренние каналы.

АЦП STM32G0 развивает АЦП STM32F0. Перед включением запускают внутренний регулятор (ADVREGEN) и ждут около 20 мкс, затем калибровка ADCAL и ADEN. Каналы выбираются маской CHSELR (CHSELRMOD = 0) или последовательностью до восьми каналов в любом порядке (CHSELRMOD = 1); у каждого канала одно из двух времён выборки SMP1 или SMP2 (RM0444, раздел 15.3).

Аппаратная передискретизация (OVSE, OVSR, OVSS) суммирует до 256 отсчётов и сдвигает сумму — так получают до 16 бит. Внутренние каналы — датчик температуры (12), VREFINT (13) и VBAT / 3 (14) — включаются в ADC_CCR. После каждого изменения CHSELR дождитесь флага CCRDY.

ЭкземплярБазовый адресЕсть у
ADC10x4001 2400всех
ADC1_COMMON0x4001 2708всех

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

РегистрСмещениеНазначениеПосле сброса
ADC_ISR0x00Флаги состояния и прерываний0x0000 0000
ADC_IER0x04Разрешение прерываний0x0000 0000
ADC_CR0x08Включение, калибровка, запуск и остановка0x0000 0000
ADC_CFGR10x0CРежимы преобразования, запуск, разрядность, DMA0x0000 0000
ADC_CFGR20x10Тактирование АЦП и передискретизация0x0000 0000
ADC_SMPR0x14Время выборки0x0000 0000
ADC_AWD1TR0x20Пороги аналогового сторожа 10x0FFF 0000
ADC_AWD2TR0x24Пороги аналогового сторожа 20x0FFF 0000
ADC_CHSELR0x28Выбор каналов последовательности0x0000 0000
ADC_AWD3TR0x2CПороги аналогового сторожа 30x0FFF 0000
ADC_DR0x40Результат преобразования0x0000 0000
ADC_AWD2CR0xA0Каналы аналогового сторожа 20x0000 0000
ADC_AWD3CR0xA4Каналы аналогового сторожа 30x0000 0000
ADC_CALFACT0xB4Калибровочный коэффициент0x0000 0000
ADC_CCR0x00Внутренние каналы и предделитель0x0000 0000

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

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

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

ADC1->ISR = 0x00000000;

ADC_ISR — флаги состояния и прерываний

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

31302928272625242322212019181716
—
1514131211109876543210
—CCRDY—EOCAL—AWD3AWD2AWD1—OVREOSEOCEOSMPADRDY
  • CCRDY (бит 13) — Новая конфигурация каналов применена.
  • EOCAL (бит 11) — Окончание калибровки.
  • AWD1–AWD3 (по биту на каждый y, положение — на карте битов) — Сработал аналоговый сторож y.
  • OVR (бит 4) — Переполнение: новый результат, а DR не прочитан.
  • EOS (бит 3) — Окончание последовательности.
  • EOC (бит 2) — Окончание преобразования; сбрасывается чтением DR.
  • EOSMP (бит 1) — Окончание выборки.
  • ADRDY (бит 0) — АЦП готов к преобразованиям.

ADC_IER — разрешение прерываний

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

31302928272625242322212019181716
—
1514131211109876543210
—CCRDYIE—EOCALIE—AWD3IEAWD2IEAWD1IE—OVRIEEOSIEEOCIEEOSMPIEADRDYIE
  • CCRDYIE (бит 13) — Прерывание: новая конфигурация каналов применена.
  • EOCALIE (бит 11) — Прерывание по окончании калибровки.
  • AWD3IE (бит 9) — Прерывание аналогового сторожа 3.
  • AWD2IE (бит 8) — Прерывание аналогового сторожа 2.
  • AWD1IE (бит 7) — Прерывание аналогового сторожа 1.
  • OVRIE (бит 4) — Прерывание по переполнению.
  • EOSIE (бит 3) — Прерывание по окончании последовательности.
  • EOCIE (бит 2) — Прерывание по окончании преобразования.
  • EOSMPIE (бит 1) — Прерывание по окончании выборки.
  • ADRDYIE (бит 0) — Прерывание: АЦП готов к преобразованиям.

ADC_CR — включение, калибровка, запуск и остановка

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

31302928272625242322212019181716
ADCAL—ADVREGEN—
1514131211109876543210
—ADSTP—ADSTARTADDISADEN
  • ADCAL (бит 31) — Запуск калибровки; сбрасывается по окончании. АЦП должен быть выключен.
  • ADVREGEN (бит 28) — Включение регулятора напряжения АЦП; после него — пауза tADCVREG_STUP.
  • ADSTP (бит 4) — Остановка преобразований.
  • ADSTART (бит 2) — Запуск преобразований (или ожидание внешнего триггера).
  • ADDIS (бит 1) — Выключение АЦП.
  • ADEN (бит 0) — Включение АЦП; готовность — флаг ADRDY.

ADC_CFGR1 — режимы преобразования, запуск, разрядность, DMA

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

31302928272625242322212019181716
—AWD1CH—AWD1ENAWD1SGLCHSELRMOD—DISCEN
1514131211109876543210
AUTOFFWAITCONTOVRMODEXTEN—EXTSELALIGNRESSCANDIRDMACFGDMAEN
  • AWD1CH (биты 30:26) — Канал аналогового сторожа 1 при AWD1SGL = 1.
  • AWD1EN (бит 23) — Включение аналогового сторожа 1.
  • AWD1SGL (бит 22) — Сторож 1 следит за одним каналом или за всеми.
  • CHSELRMOD (бит 21) — Режим CHSELR: маска каналов или последовательность до 8 каналов SQ1…SQ8.
  • DISCEN (бит 16) — Прерывистый режим: по одному каналу на каждый запуск.
  • AUTOFF (бит 15) — Автовыключение АЦП между преобразованиями.
  • WAIT (бит 14) — Ожидание чтения DR перед следующим преобразованием.
  • CONT (бит 13) — Непрерывное преобразование.
  • OVRMOD (бит 12) — При переполнении: сохранить старый результат или записать новый.
  • EXTEN (биты 11:10) — Внешний запуск: выключен, по нарастающему, спадающему или обоим фронтам.
    EXTENЗначение
    00Программный запуск
    01По нарастающему фронту
    10По спадающему фронту
    11По обоим фронтам
  • EXTSEL (биты 8:6) — Источник внешнего запуска TRG0…TRG7.
  • ALIGN (бит 5) — Выравнивание результата: вправо или влево.
    ALIGNЗначение
    0Вправо
    1Влево
  • RES (биты 4:3) — Разрядность: 12, 10, 8 или 6 бит.
    RESЗначение
    0012 бит
    0110 бит
    108 бит
    116 бит
  • SCANDIR (бит 2) — Направление обхода каналов: от 0 к 18 или обратно.
  • DMACFG (бит 1) — DMA: однократный или циклический режим.
  • DMAEN (бит 0) — Запрос DMA после каждого преобразования.

ADC_CFGR2 — тактирование АЦП и передискретизация

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

31302928272625242322212019181716
CKMODELFTRIG—
1514131211109876543210
—TOVSOVSSOVSR—OVSE
  • CKMODE (биты 31:30) — Тактирование: асинхронный ADCCLK или PCLK / 2, PCLK / 4 (у STM32G0 и PCLK / 1).
    CKMODEЗначение
    00ADCCLK — асинхронный такт из RCC
    01PCLK / 2
    10PCLK / 4
    11PCLK
  • LFTRIG (бит 29) — Режим редкого запуска: если пауза дольше t_idle, перед каждым запуском АЦП перевзводится — из-за утечки данные иначе портятся; запуск на такт позже.
  • TOVS (бит 9) — Передискретизация по одному отсчёту на каждый запуск.
  • OVSS (биты 8:5) — Сдвиг суммы при передискретизации: 0…8 бит.
  • OVSR (биты 4:2) — Коэффициент передискретизации: 2…256 отсчётов.
    OVSRЗначение
    000×2
    001×4
    010×8
    011×16
    100×32
    101×64
    110×128
    111×256
  • OVSE (бит 0) — Включение передискретизации.

ADC_SMPR — время выборки

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

31302928272625242322212019181716
—SMPSEL18SMPSEL17SMPSEL16SMPSEL15SMPSEL14SMPSEL13SMPSEL12SMPSEL11SMPSEL10SMPSEL9SMPSEL8
1514131211109876543210
SMPSEL7SMPSEL6SMPSEL5SMPSEL4SMPSEL3SMPSEL2SMPSEL1SMPSEL0—SMP2—SMP1
  • SMPSEL0–SMPSEL18 (по биту на каждый y, положение — на карте битов) — Время выборки канала y: SMP1 или SMP2.
  • SMPSEL2 (бит 10) — Время выборки канала 2: SMP1 или SMP2.
  • SMPSEL1 (бит 9) — Время выборки канала 1: SMP1 или SMP2.
  • SMP2 (биты 6:4) — Время выборки 2: 1,5…160,5 такта АЦП.
    SMP2Значение
    0001,5 такта
    0013,5 такта
    0107,5 такта
    01112,5 такта
    10019,5 такта
    10139,5 такта
    11079,5 такта
    111160,5 такта
  • SMP1 (биты 2:0) — Время выборки 1: 1,5…160,5 такта АЦП.
    SMP1Значение
    0001,5 такта
    0013,5 такта
    0107,5 такта
    01112,5 такта
    10019,5 такта
    10139,5 такта
    11079,5 такта
    111160,5 такта

ADC_AWD1TR — пороги аналогового сторожа 1

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

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

ADC_AWD2TR — пороги аналогового сторожа 2

Смещение 0x24, адрес 0x4001 2424, 32 бит, после сброса 0x0FFF 0000. В коде: ADC1->AWD2TR.

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

ADC_CHSELR — выбор каналов последовательности

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

31302928272625242322212019181716
SQ8SQ7SQ6—CHSEL18CHSEL17CHSEL16
1514131211109876543210
CHSEL15CHSEL14CHSEL13CHSEL12CHSEL11CHSEL10CHSEL9CHSEL8CHSEL7CHSEL6CHSEL5CHSEL4CHSEL3CHSEL2CHSEL1CHSEL0
  • SQ6–SQ8 (по 4 бита на каждый y, положение — на карте битов) — Канал на y-м месте последовательности; 0xF — конец (при CHSELRMOD = 1).
  • CHSEL1–CHSEL18 (по биту на каждый y, положение — на карте битов) — Канал y в последовательности (при CHSELRMOD = 0).
  • CHSEL0 (бит 0) — Канал 0 в последовательности (при CHSELRMOD = 0).

ADC_AWD3TR — пороги аналогового сторожа 3

Смещение 0x2C, адрес 0x4001 242C, 32 бит, после сброса 0x0FFF 0000. В коде: ADC1->AWD3TR.

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

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

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

31302928272625242322212019181716
—
1514131211109876543210
DATA
  • DATA (биты 15:0) — Результат преобразования.

ADC_AWD2CR — каналы аналогового сторожа 2

Смещение 0xA0, адрес 0x4001 24A0, 32 бит, после сброса 0x0000 0000. В коде: ADC1->AWD2CR.

31302928272625242322212019181716
—AWD2CH
1514131211109876543210
AWD2CH
  • AWD2CH (биты 18:0) — Каналы аналогового сторожа 2: по биту на канал.

ADC_AWD3CR — каналы аналогового сторожа 3

Смещение 0xA4, адрес 0x4001 24A4, 32 бит, после сброса 0x0000 0000. В коде: ADC1->AWD3CR.

31302928272625242322212019181716
—AWD3CH
1514131211109876543210
AWD3CH
  • AWD3CH (биты 18:0) — Каналы аналогового сторожа 3: по биту на канал.

ADC_CALFACT — калибровочный коэффициент

Смещение 0xB4, адрес 0x4001 24B4, 32 бит, после сброса 0x0000 0000. В коде: ADC1->CALFACT.

31302928272625242322212019181716
—
1514131211109876543210
—CALFACT
  • CALFACT (биты 6:0) — Калибровочный коэффициент: читается после калибровки, можно записать сохранённый.

ADC_CCR — внутренние каналы и предделитель

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

31302928272625242322212019181716
—LFMENVBATENTSENVREFENPRESC—
1514131211109876543210
—
  • LFMEN (бит 25) — Устаревший бит режима низкой частоты, у STM32G0 не нужен.
  • VBATEN (бит 24) — Внутренний канал VBAT / 3 (у STM32F0 — VBAT / 2).
  • TSEN (бит 23) — Внутренний канал датчика температуры.
  • VREFEN (бит 22) — Внутренний канал опорного напряжения VREFINT.
  • PRESC (биты 21:18) — Предделитель асинхронного такта АЦП: 1…256.

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

Как включить АЦП STM32G0?

ADC1->CR = ADC_CR_ADVREGEN; пауза 20 мкс; CR |= ADCAL, ждать сброса; затем CR |= ADEN и ждать ISR.ADRDY. Перед ADEN каналы и CFGR1 можно уже настроить; CHSELR — с ожиданием CCRDY.

Как получить 16 бит с 12-битного АЦП?

CFGR2: OVSE = 1, OVSR = 111 (256 отсчётов), OVSS = 0100 (сдвиг на 4): сумма 20 бит превращается в 16-битный результат. Время преобразования растёт в 256 раз.

Источники

  1. STMicroelectronics. RM0444: Reference manual (Rev 6) — раздел 15.12: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-g0 v1.4.5: заголовки CMSIS stm32g031xx.h, stm32g041xx.h, stm32g051xx.h, stm32g061xx.h, stm32g071xx.h, stm32g081xx.h, stm32g0b1xx.h, stm32g0c1xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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