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

Регистры ADC STM32F0

Регистры АЦП STM32F0: калибровка, включение и запуск, флаги, выбор каналов маской, время выборки, разрядность 12…6 бит, режимы преобразования, внешний запуск, аналоговый сторож и внутренние каналы.

АЦП STM32F0 — новый блок, не такой, как у STM32F1 и F4: вместо регистров SQR каналы выбираются маской в CHSELR и преобразуются по порядку номеров (или в обратном, SCANDIR = 1). Время выборки одно на все каналы — поле SMP регистра SMPR. Разрядность 12, 10, 8 или 6 бит задаёт RES (RM0091, раздел 13.11).

Порядок включения: калибровка битом ADCAL при выключенном АЦП, затем ADEN и ожидание ADRDY. Тактирование — асинхронный генератор HSI14 или PCLK / 2, PCLK / 4 (CKMODE в CFGR2). Внутренние каналы — датчик температуры (16), VREFINT (17) и VBAT / 2 (18) — включаются битами регистра ADC_CCR.

ЭкземплярБазовый адресЕсть у
ADC10x4001 2400всех
ADC0x4001 2708всех
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_TR10x20Пороги аналогового сторожа0x0FFF 0000
ADC_CHSELR0x28Выбор каналов последовательности0x0000 0000
ADC_DR0x40Результат преобразования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
—AWD1—OVREOSEOCEOSMPADRDY
  • AWD1 (бит 7) — Сработал аналоговый сторож 1.
  • OVR (бит 4) — Переполнение: новый результат, а DR не прочитан.
  • EOS (бит 3) — Окончание последовательности.
  • EOC (бит 2) — Окончание преобразования; сбрасывается чтением DR.
  • EOSMP (бит 1) — Окончание выборки.
  • ADRDY (бит 0) — АЦП готов к преобразованиям.

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

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

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

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

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

31302928272625242322212019181716
—AWD1CH—AWD1ENAWD1SGL—DISCEN
1514131211109876543210
AUTOFFWAITCONTOVRMODEXTEN—EXTSELALIGNRESSCANDIRDMACFGDMAEN
  • AWD1CH (биты 30:26) — Канал аналогового сторожа 1 при AWD1SGL = 1.
  • AWD1EN (бит 23) — Включение аналогового сторожа 1.
  • AWD1SGL (бит 22) — Сторож 1 следит за одним каналом или за всеми.
  • 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
—
  • CKMODE (биты 31:30) — Тактирование: асинхронный ADCCLK или PCLK / 2, PCLK / 4 (у STM32G0 и PCLK / 1).
    CKMODEЗначение
    00ADCCLK — генератор HSI14
    01PCLK / 2
    10PCLK / 4

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

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

31302928272625242322212019181716
—
1514131211109876543210
—SMP
  • SMP (биты 2:0) — Время выборки всех каналов: 1,5…239,5 такта АЦП.
    SMPЗначение
    0001,5 такта
    0017,5 такта
    01013,5 такта
    01128,5 такта
    10041,5 такта
    10155,5 такта
    11071,5 такта
    111239,5 такта

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

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

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

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

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

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

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

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

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

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

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

31302928272625242322212019181716
—VBATENTSENVREFEN—
1514131211109876543210
—
  • VBATEN (бит 24) — Внутренний канал VBAT / 3 (у STM32F0 — VBAT / 2).
  • TSEN (бит 23) — Внутренний канал датчика температуры.
  • VREFEN (бит 22) — Внутренний канал опорного напряжения VREFINT.

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

Как запустить одиночное преобразование канала 0?

Калибровка: ADC1->CR = ADC_CR_ADCAL, ждать сброса бита. Затем CR = ADEN, ждать ISR.ADRDY. CHSELR = ADC_CHSELR_CHSEL0, SMPR = 7 (239,5 такта), CR |= ADSTART, ждать ISR.EOC и читать DR.

Как измерить температуру кристалла STM32F0?

Установите TSEN в ADC_CCR, выберите канал 16 и время выборки не меньше 4 мкс (минимум из даташита STM32F051). Калибровочные значения TS_CAL1 при 30 °C и TS_CAL2 при 110 °C лежат в системной памяти, адреса — в даташите.

Источники

  1. STMicroelectronics. RM0091: Reference manual (Rev 10) — раздел 13.11: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f0 v2.3.8: заголовки CMSIS stm32f031x6.h, stm32f038xx.h, stm32f042x6.h, stm32f048xx.h, stm32f051x8.h, stm32f058xx.h, stm32f071xb.h, stm32f072xb.h, stm32f078xx.h, stm32f091xc.h, stm32f098xx.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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