Регистры 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.
| Экземпляр | Базовый адрес | Есть у |
|---|---|---|
| ADC1 | 0x4001 2400 | всех |
| ADC | 0x4001 2708 | всех |
| 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_TR1 | 0x20 | Пороги аналогового сторожа | 0x0FFF 0000 |
| ADC_CHSELR | 0x28 | Выбор каналов последовательности | 0x0000 0000 |
| ADC_DR | 0x40 | Результат преобразования | 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 |
| — | AWD1 | — | OVR | EOS | EOC | EOSMP | ADRDY | ||||||||
- 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.
| 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 |
| — | AWD1IE | — | OVRIE | EOSIE | EOCIE | EOSMPIE | ADRDYIE | ||||||||
- 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 | — | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | ADSTP | — | ADSTART | ADDIS | ADEN | ||||||||||
- ADCAL (бит 31) — Запуск калибровки; сбрасывается по окончании. АЦП должен быть выключен.
- 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 | — | 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 следит за одним каналом или за всеми.
- 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 |
| — | |||||||||||||||
- CKMODE (биты 31:30) — Тактирование: асинхронный ADCCLK или PCLK / 2, PCLK / 4 (у STM32G0 и PCLK / 1).
CKMODE Значение 00 ADCCLK — генератор HSI14 01 PCLK / 2 10 PCLK / 4
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…239,5 такта АЦП.
SMP Значение 000 1,5 такта 001 7,5 такта 010 13,5 такта 011 28,5 такта 100 41,5 такта 101 55,5 такта 110 71,5 такта 111 239,5 такта
ADC_TR1 — пороги аналогового сторожа
Смещение 0x20, адрес 0x4001 2420, 32 бит, после сброса 0x0FFF 0000. В коде: ADC1->TR.
| 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_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 | 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 |
- CHSEL1–CHSEL18 (по биту на каждый y, положение — на карте битов) — Канал y в последовательности (при CHSELRMOD = 0).
- CHSEL0 (бит 0) — Канал 0 в последовательности (при CHSELRMOD = 0).
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_CCR — внутренние каналы и предделитель
Смещение 0x00, 32 бит, после сброса 0x0000 0000. В коде: ADC->CCR.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | VBATEN | TSEN | VREFEN | — | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | |||||||||||||||
- 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 лежат в системной памяти, адреса — в даташите.
Источники
- STMicroelectronics. RM0091: Reference manual (Rev 10) — раздел 13.11: описание регистров, назначение полей и значения после сброса
- 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
- Все регистры STM32F0Блоки периферии и заголовки CMSIS
- RCC — тактирование и сбросRCC_CR, RCC_CFGR, RCC_CIR, RCC_APB2RSTR, RCC_APB1RSTR, RCC_AHBENR
- GPIO — порты ввода-выводаGPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_IDR, GPIOx_ODR
- SYSCFG — системная конфигурацияSYSCFG_CFGR1, SYSCFG_EXTICR1, SYSCFG_EXTICR2, SYSCFG_EXTICR3, SYSCFG_EXTICR4, SYSCFG_CFGR2
- EXTI — внешние прерыванияEXTI_IMR, EXTI_EMR, EXTI_RTSR, EXTI_FTSR, EXTI_SWIER, EXTI_PR
- USART — последовательные порты USARTUSART_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
- DMA — прямой доступ к памятиDMA_ISR, DMA_IFCR, DMA_CSELR, DMA_CCR, DMA_CNDTR, DMA_CPAR
- 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
- DBGMCU — блок отладкиDBGMCU_IDCODE, DBGMCU_CR, DBGMCU_APB1_FZ, DBGMCU_APB2_FZ
- PWR — управление питаниемPWR_CR, PWR_CSR
- FLASH — интерфейс флеш-памятиFLASH_ACR, FLASH_KEYR, FLASH_OPTKEYR, FLASH_SR, FLASH_CR, FLASH_AR
- RTC — часы реального времениRTC_TR, RTC_DR, RTC_CR, RTC_ISR, RTC_PRER, RTC_WUTR
- DAC — цифро-аналоговый преобразовательDAC_CR, DAC_SWTRIGR, DAC_DHR12R1, DAC_DHR12L1, DAC_DHR8R1, DAC_DHR12R2
- CAN — контроллер CANCAN_MCR, CAN_MSR, CAN_TSR, CAN_RF0R, CAN_RF1R, CAN_IER