Регистры АЦП 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.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| 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_TR | 0x20 | Пороги аналогового сторожа | 0x0FFF 0000 |
| ADC_CHSELR | 0x28 | Выбор каналов последовательности | 0x0000 0000 |
| ADC_DR | 0x40 | Результат преобразования | 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 |
| — | EOCAL | — | AWD | — | OVR | EOSEQ | EOC | EOSMP | ADRDY | ||||||
- 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.
| 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 |
| — | EOCALIE | — | AWDIE | — | OVRIE | EOSEQIE | EOCIE | EOSMPIE | ADRDYIE | ||||||
- EOCALIE (бит 11) — Прерывание по окончании калибровки.
- AWDIE (бит 7) — Прерывание аналогового сторожа.
- OVRIE (бит 4) — Прерывание по переполнению.
- EOSEQIE (бит 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 |
| — | AWDCH | — | AWDEN | AWDSGL | — | 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 | ||||
- 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 Значение 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 | — | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | TOVS | OVSS | OVSR | — | OVSE | ||||||||||
- CKMODE (биты 31:30) — Тактирование: асинхронный ADCCLK (HSI16) или PCLK / 2, PCLK / 4, PCLK.
CKMODE Значение 00 ADCCLK — асинхронный такт из RCC 01 PCLK / 2 10 PCLK / 4 11 PCLK - 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.
| 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 |
| — | SMP | ||||||||||||||
- SMP (биты 2:0) — Время выборки всех каналов: 1,5…160,5 такта АЦП.
SMP Значение 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_TR — пороги аналогового сторожа
Смещение 0x20, адрес 0x4001 2420, 32 бит, после сброса 0x0FFF 0000. В коде: ADC1->TR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | HT | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | LT | ||||||||||||||
- HT (биты 27:16) — Верхний порог аналогового сторожа.
- LT (биты 11:0) — Нижний порог аналогового сторожа.
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 |
| — | CHSEL18 | CHSEL17 | — | ||||||||||||
| 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 |
- CHSEL0–CHSEL18 (по биту на каждый y, положение — на карте битов) — Канал y в последовательности преобразований.
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_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 | — | TSEN | VREFEN | PRESC | — | |||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
- 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-битный результат при соответствующем снижении скорости.
Источники
- STMicroelectronics. RM0377: Reference manual (Rev 10) — раздел 13.11: описание регистров, назначение полей и значения после сброса
- 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
- Все регистры STM32L0Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_ICSCR, RCC_CFGR, RCC_CIER, RCC_CIFR, RCC_CICR
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_CFGR1, SYSCFG_CFGR2, SYSCFG_EXTICR1, SYSCFG_EXTICR2, SYSCFG_EXTICR3, SYSCFG_EXTICR4
- EXTI — контроллер внешних прерываний и событийEXTI_IMR, EXTI_EMR, EXTI_RTSR, EXTI_FTSR, EXTI_SWIER, EXTI_PR
- 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 — контроллер прямого доступа к памятиDMA_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 — поддержка отладкиDBGMCU_IDCODE, DBG_CR, DBG_APB1_FZ, DBG_APB2_FZ
- PWR — управление питаниемPWR_CR, PWR_CSR
- FLASH — интерфейс флеш-памяти и EEPROMFLASH_ACR, FLASH_PECR, FLASH_PDKEYR, FLASH_PEKEYR, FLASH_PRGKEYR, FLASH_OPTKEYR
- RTC — часы реального времениRTC_TR, RTC_DR, RTC_CR, RTC_ISR, RTC_PRER, RTC_WUTR