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

Регистры АЦП STM32L0

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

АЦП STM32L0 — того же семейства, что у STM32F0 и STM32G0: каналы выбираются битовой маской CHSELR и преобразуются по порядку номеров, время выборки одно на все каналы (SMPR), разрядность 12, 10, 8 или 6 бит. Передискретизатор в CFGR2 суммирует до 256 отсчётов со сдвигом и даёт до 16 бит (RM0377, раздел 13.11).

Перед включением АЦП калибруют битом ADCAL, а при частоте АЦП ниже 3,5 МГц включают режим LFMEN в ADC_CCR. Каналы VREFINT и датчика температуры требуют битов VREFEN и TSEN в ADC_CCR и буферов в SYSCFG_CFGR3.

ЭкземплярБазовый адресЕсть у
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_TR0x20Пороги аналогового сторожа0x0FFF 0000
ADC_CHSELR0x28Выбор каналов последовательности0x0000 0000
ADC_DR0x40Результат преобразования0x0000 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
—EOCAL—AWD—OVREOSEQEOCEOSMPADRDY
  • EOCAL (бит 11) — Окончание калибровки.
  • AWD (бит 7) — Флаг аналогового сторожа (сбрасывается записью 1).
  • OVR (бит 4) — Переполнение: новый результат, а DR не прочитан.
  • EOSEQ (бит 3) — Конец последовательности преобразований (сбрасывается записью 1).
  • EOC (бит 2) — Окончание преобразования; сбрасывается чтением DR.
  • EOSMP (бит 1) — Окончание выборки.
  • ADRDY (бит 0) — АЦП готов к преобразованиям.

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

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

31302928272625242322212019181716
—
1514131211109876543210
—EOCALIE—AWDIE—OVRIEEOSEQIEEOCIEEOSMPIEADRDYIE
  • EOCALIE (бит 11) — Прерывание по окончании калибровки.
  • AWDIE (бит 7) — Прерывание аналогового сторожа.
  • OVRIE (бит 4) — Прерывание по переполнению.
  • EOSEQIE (бит 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
—AWDCH—AWDENAWDSGL—DISCEN
1514131211109876543210
AUTOFFWAITCONTOVRMODEXTEN—EXTSELALIGNRESSCANDIRDMACFGDMAEN
  • AWDCH (биты 30:26) — Канал аналогового сторожа при AWDSGL = 1.
  • AWDEN (бит 23) — Включение аналогового сторожа.
  • AWDSGL (бит 22) — Сторож следит за одним каналом AWDCH (1) или за всеми (0).
  • 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
CKMODE—
1514131211109876543210
—TOVSOVSSOVSR—OVSE
  • CKMODE (биты 31:30) — Тактирование: асинхронный ADCCLK (HSI16) или PCLK / 2, PCLK / 4, PCLK.
    CKMODEЗначение
    00ADCCLK — асинхронный такт из RCC
    01PCLK / 2
    10PCLK / 4
    11PCLK
  • TOVS (бит 9) — Передискретизация по одному отсчёту на каждый запуск.
  • OVSS (биты 8:5) — Сдвиг суммы при передискретизации: 0…8 бит.
    OVSSЗначение
    0000Без сдвига
    0001Сдвиг на 1 бит
    0010Сдвиг на 2 бит
    0011Сдвиг на 3 бит
    0100Сдвиг на 4 бит
    0101Сдвиг на 5 бит
    0110Сдвиг на 6 бит
    0111Сдвиг на 7 бит
    1000Сдвиг на 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
—
1514131211109876543210
—SMP
  • SMP (биты 2:0) — Время выборки всех каналов: 1,5…160,5 такта АЦП.
    SMPЗначение
    0001,5 такта
    0013,5 такта
    0107,5 такта
    01112,5 такта
    10019,5 такта
    10139,5 такта
    11079,5 такта
    111160,5 такта

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

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

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

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

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

31302928272625242322212019181716
—CHSEL18CHSEL17—
1514131211109876543210
CHSEL15CHSEL14CHSEL13CHSEL12CHSEL11CHSEL10CHSEL9CHSEL8CHSEL7CHSEL6CHSEL5CHSEL4CHSEL3CHSEL2CHSEL1CHSEL0
  • CHSEL0–CHSEL18 (по биту на каждый y, положение — на карте битов) — Канал y в последовательности преобразований.

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

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

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

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
—LFMEN—TSENVREFENPRESC—
1514131211109876543210
—
  • LFMEN (бит 25) — Режим низкой частоты: нужен при частоте АЦП ниже 3,5 МГц.
  • TSEN (бит 23) — Внутренний канал датчика температуры.
  • VREFEN (бит 22) — Внутренний канал опорного напряжения VREFINT.
  • PRESC (биты 21:18) — Предделитель асинхронного такта АЦП: 1…256.
    PRESCЗначение
    0000Без деления
    0001Деление на 2
    0010Деление на 4
    0011Деление на 6
    0100Деление на 8
    0101Деление на 10
    0110Деление на 12
    0111Деление на 16
    1000Деление на 32
    1001Деление на 64
    1010Деление на 128
    1011Деление на 256

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

Как откалибровать АЦП STM32L0?

При выключенном АЦП (ADEN = 0) установите ADCAL в ADC_CR и дождитесь, пока бит сбросится. Коэффициент сохраняется в ADC_CALFACT; повторять калибровку стоит после смены питания или температуры.

Как получить 16 бит на STM32L0?

Включите передискретизацию: OVSE = 1, OVSR = 256 (код 111) и сдвиг OVSS = 4 бита в ADC_CFGR2. Сумма 256 отсчётов 12-битного АЦП после сдвига на 4 даёт 16-битный результат при соответствующем снижении скорости.

Источники

  1. STMicroelectronics. RM0377: Reference manual (Rev 10) — раздел 13.11: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-l0 v1.9.4: заголовки CMSIS stm32l011xx.h, stm32l021xx.h, stm32l031xx.h, stm32l041xx.h, stm32l051xx.h, stm32l071xx.h, stm32l081xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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