Регистры 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.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| ADC1 | 0x4001 2400 | всех |
| ADC1_COMMON | 0x4001 2708 | всех |
Регистры блока
| Регистр | Смещение | Назначение | После сброса |
|---|---|---|---|
| ADC_ISR | 0x00 | Флаги состояния и прерываний | 0x0000 0000 |
| ADC_IER | 0x04 | Разрешение прерываний | 0x0000 0000 |
| ADC_CR | 0x08 | Включение, калибровка, запуск и остановка | 0x0000 0000 |
| ADC_CFGR1 | 0x0C | Режимы преобразования, запуск, разрядность, DMA | 0x0000 0000 |
| ADC_CFGR2 | 0x10 | Тактирование АЦП и передискретизация | 0x0000 0000 |
| ADC_SMPR | 0x14 | Время выборки | 0x0000 0000 |
| ADC_AWD1TR | 0x20 | Пороги аналогового сторожа 1 | 0x0FFF 0000 |
| ADC_AWD2TR | 0x24 | Пороги аналогового сторожа 2 | 0x0FFF 0000 |
| ADC_CHSELR | 0x28 | Выбор каналов последовательности | 0x0000 0000 |
| ADC_AWD3TR | 0x2C | Пороги аналогового сторожа 3 | 0x0FFF 0000 |
| ADC_DR | 0x40 | Результат преобразования | 0x0000 0000 |
| ADC_AWD2CR | 0xA0 | Каналы аналогового сторожа 2 | 0x0000 0000 |
| ADC_AWD3CR | 0xA4 | Каналы аналогового сторожа 3 | 0x0000 0000 |
| ADC_CALFACT | 0xB4 | Калибровочный коэффициент | 0x0000 0000 |
| ADC_CCR | 0x00 | Внутренние каналы и предделитель | 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | CCRDY | — | EOCAL | — | AWD3 | AWD2 | AWD1 | — | OVR | EOS | EOC | EOSMP | ADRDY | ||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | CCRDYIE | — | EOCALIE | — | AWD3IE | AWD2IE | AWD1IE | — | OVRIE | EOSIE | EOCIE | EOSMPIE | ADRDYIE | ||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| ADCAL | — | ADVREGEN | — | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | ADSTP | — | ADSTART | ADDIS | ADEN | ||||||||||
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | AWD1CH | — | AWD1EN | AWD1SGL | CHSELRMOD | — | DISCEN | ||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| AUTOFF | WAIT | CONT | OVRMOD | EXTEN | — | EXTSEL | ALIGN | RES | SCANDIR | DMACFG | DMAEN | ||||
- 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 Значение 00 12 бит 01 10 бит 10 8 бит 11 6 бит - SCANDIR (бит 2) — Направление обхода каналов: от 0 к 18 или обратно.
- DMACFG (бит 1) — DMA: однократный или циклический режим.
- DMAEN (бит 0) — Запрос DMA после каждого преобразования.
ADC_CFGR2 — тактирование АЦП и передискретизация
Смещение 0x10, адрес 0x4001 2410, 32 бит, после сброса 0x0000 0000. В коде: ADC1->CFGR2.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| CKMODE | LFTRIG | — | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | TOVS | OVSS | OVSR | — | OVSE | ||||||||||
- CKMODE (биты 31:30) — Тактирование: асинхронный ADCCLK или PCLK / 2, PCLK / 4 (у STM32G0 и PCLK / 1).
CKMODE Значение 00 ADCCLK — асинхронный такт из RCC 01 PCLK / 2 10 PCLK / 4 11 PCLK - 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | SMPSEL18 | SMPSEL17 | SMPSEL16 | SMPSEL15 | SMPSEL14 | SMPSEL13 | SMPSEL12 | SMPSEL11 | SMPSEL10 | SMPSEL9 | SMPSEL8 | ||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| SMPSEL7 | SMPSEL6 | SMPSEL5 | SMPSEL4 | SMPSEL3 | SMPSEL2 | SMPSEL1 | SMPSEL0 | — | 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 Значение 000 1,5 такта 001 3,5 такта 010 7,5 такта 011 12,5 такта 100 19,5 такта 101 39,5 такта 110 79,5 такта 111 160,5 такта - SMP1 (биты 2:0) — Время выборки 1: 1,5…160,5 такта АЦП.
SMP1 Значение 000 1,5 такта 001 3,5 такта 010 7,5 такта 011 12,5 такта 100 19,5 такта 101 39,5 такта 110 79,5 такта 111 160,5 такта
ADC_AWD1TR — пороги аналогового сторожа 1
Смещение 0x20, адрес 0x4001 2420, 32 бит, после сброса 0x0FFF 0000. В коде: ADC1->AWD1TR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | HT1 | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | LT1 | ||||||||||||||
- HT1 (биты 27:16) — Верхний порог аналогового сторожа 1.
- LT1 (биты 11:0) — Нижний порог аналогового сторожа 1.
ADC_AWD2TR — пороги аналогового сторожа 2
Смещение 0x24, адрес 0x4001 2424, 32 бит, после сброса 0x0FFF 0000. В коде: ADC1->AWD2TR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | HT2 | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | LT2 | ||||||||||||||
- HT2 (биты 27:16) — Верхний порог аналогового сторожа 2.
- LT2 (биты 11:0) — Нижний порог аналогового сторожа 2.
ADC_CHSELR — выбор каналов последовательности
Смещение 0x28, адрес 0x4001 2428, 32 бит, после сброса 0x0000 0000. В коде: ADC1->CHSELR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| SQ8 | SQ7 | SQ6 | — | CHSEL18 | CHSEL17 | CHSEL16 | |||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| CHSEL15 | CHSEL14 | CHSEL13 | CHSEL12 | CHSEL11 | CHSEL10 | CHSEL9 | CHSEL8 | CHSEL7 | CHSEL6 | CHSEL5 | CHSEL4 | CHSEL3 | CHSEL2 | CHSEL1 | CHSEL0 |
- 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.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | HT3 | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | LT3 | ||||||||||||||
- HT3 (биты 27:16) — Верхний порог аналогового сторожа 3.
- LT3 (биты 11:0) — Нижний порог аналогового сторожа 3.
ADC_DR — результат преобразования
Смещение 0x40, адрес 0x4001 2440, 32 бит, после сброса 0x0000 0000. В коде: ADC1->DR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DATA | |||||||||||||||
- DATA (биты 15:0) — Результат преобразования.
ADC_AWD2CR — каналы аналогового сторожа 2
Смещение 0xA0, адрес 0x4001 24A0, 32 бит, после сброса 0x0000 0000. В коде: ADC1->AWD2CR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | AWD2CH | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| AWD2CH | |||||||||||||||
- AWD2CH (биты 18:0) — Каналы аналогового сторожа 2: по биту на канал.
ADC_AWD3CR — каналы аналогового сторожа 3
Смещение 0xA4, адрес 0x4001 24A4, 32 бит, после сброса 0x0000 0000. В коде: ADC1->AWD3CR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | AWD3CH | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| AWD3CH | |||||||||||||||
- AWD3CH (биты 18:0) — Каналы аналогового сторожа 3: по биту на канал.
ADC_CALFACT — калибровочный коэффициент
Смещение 0xB4, адрес 0x4001 24B4, 32 бит, после сброса 0x0000 0000. В коде: ADC1->CALFACT.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | |||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | CALFACT | ||||||||||||||
- CALFACT (биты 6:0) — Калибровочный коэффициент: читается после калибровки, можно записать сохранённый.
ADC_CCR — внутренние каналы и предделитель
Смещение 0x00, адрес 0x4001 2708, 32 бит, после сброса 0x0000 0000. В коде: ADC1_COMMON->CCR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | LFMEN | VBATEN | TSEN | VREFEN | PRESC | — | |||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
- 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 раз.
Источники
- STMicroelectronics. RM0444: Reference manual (Rev 6) — раздел 15.12: описание регистров, назначение полей и значения после сброса
- 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
- Все регистры STM32G0Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_ICSCR, RCC_CFGR, RCC_PLLCFGR, RCC_CRRCR, RCC_CIER
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_CFGR1, SYSCFG_CFGR2
- EXTI — внешние прерыванияEXTI_RTSR1, EXTI_FTSR1, EXTI_SWIER1, EXTI_RPR1, EXTI_FPR1, EXTI_RTSR2
- USART — последовательные порты USART и LPUARTUSART_CR1, USART_CR2, USART_CR3, USART_BRR, USART_GTPR, USART_RTOR
- SPI — интерфейсы SPI и I2SSPI_CR1, SPI_CR2, SPI_SR, SPI_DR, SPI_CRCPR, SPI_RXCRCR
- I2C — интерфейс I2CI2C_CR1, I2C_CR2, I2C_OAR1, I2C_OAR2, I2C_TIMINGR, I2C_TIMEOUTR
- TIM — таймерыTIMx_CR1, TIMx_CR2, TIMx_SMCR, TIMx_DIER, TIMx_SR, TIMx_EGR
- LPTIM — маломощные таймерыLPTIM_ISR, LPTIM_ICR, LPTIM_IER, LPTIM_CFGR, LPTIM_CR, LPTIM_CMP
- DMA — прямой доступ к памяти и DMAMUXDMA_ISR, DMA_IFCR, DMA_CCR, DMA_CNDTR, DMA_CPAR, DMA_CMAR
- IWDG — независимый сторожевой таймерIWDG_KR, IWDG_PR, IWDG_RLR, IWDG_SR, IWDG_WINR
- WWDG — оконный сторожевой таймерWWDG_CR, WWDG_CFR, WWDG_SR
- CRC — вычислитель CRCCRC_DR, CRC_IDR, CRC_CR, CRC_INIT, CRC_POL
- DBG — блок отладкиDBG_IDCODE, DBG_CR, DBG_APB_FZ1, DBG_APB_FZ2
- PWR — управление питаниемPWR_CR1, PWR_CR2, PWR_CR3, PWR_CR4, PWR_SR1, PWR_SR2
- FLASH — интерфейс флеш-памятиFLASH_ACR, FLASH_KEYR, FLASH_OPTKEYR, FLASH_SR, FLASH_CR, FLASH_ECCR
- RTC — часы реального времени и защита от вмешательстваRTC_TR, RTC_DR, RTC_SSR, RTC_ICSR, RTC_PRER, RTC_WUTR
- DAC — цифро-аналоговый преобразовательDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2