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

Регистры ADC STM32F1

Регистры ADC1–ADC3 STM32F1: включение и калибровка, последовательности каналов регулярной и инжектированной групп, время выборки, внешний запуск, выравнивание, DMA, аналоговый сторож и двойной режим ADC1 и ADC2.

АЦП STM32F1 12-битные: у STM32F101 и F102 один ADC1, у STM32F103, F105 и F107 ещё ADC2, у STM32F103 high- и XL-density — и ADC3. Частота АЦП — PCLK2, делённая полем ADCPRE в RCC, не выше 14 МГц. Преобразование длится время выборки плюс 12,5 такта: при 14 МГц и выборке 1,5 такта — 1 мкс (RM0008, глава 11).

Перед работой АЦП включают битом ADON и запускают калибровку битом CAL — АЦП должен быть включён хотя бы два своих такта. Регулярная группа — до 16 преобразований в порядке SQ1…SQ16, их число L + 1 записывают в SQR1; инжектированная — до 4 (JSQR) и прерывает регулярную. Регистр DR у регулярной группы один, поэтому несколько каналов сканируют с DMA — запросы DMA выдают ADC1 и ADC3, но не ADC2.

Без внешнего события преобразование запускают повторной записью ADON = 1 или битом SWSTART при EXTTRIG = 1 и EXTSEL = 111. Датчик температуры и VREFINT подключены к каналам 16 и 17 ADC1 и включаются битом TSVREFE. В заголовках CMSIS флаги окончания называются EOS и JEOS, в RM0008 — EOC и JEOC.

ЭкземплярБазовый адресЕсть у
ADC10x4001 2400всех
ADC20x4001 2800STM32F103, STM32F105, STM32F107
ADC30x4001 3C00STM32F103xE/xG

Регистры блока

РегистрСмещениеНазначениеПосле сброса
ADC_SR0x00Флаги состояния0x0000 0000
ADC_CR10x04Управление 1: сканирование, сторож, режимы0x0000 0000
ADC_CR20x08Управление 2: включение, запуск, выравнивание, DMA0x0000 0000
ADC_SMPR10x0CВремя выборки каналов от 10-го0x0000 0000
ADC_SMPR20x10Время выборки каналов 0–90x0000 0000
ADC_JOFR10x14Смещение инжектированного канала 10x0000 0000
ADC_JOFR20x18Смещение инжектированного канала 20x0000 0000
ADC_JOFR30x1CСмещение инжектированного канала 30x0000 0000
ADC_JOFR40x20Смещение инжектированного канала 40x0000 0000
ADC_HTR0x24Верхний порог аналогового сторожа0x0000 0FFF
ADC_LTR0x28Нижний порог аналогового сторожа0x0000 0000
ADC_SQR10x2CРегулярная последовательность: длина и места 13–160x0000 0000
ADC_SQR20x30Регулярная последовательность: места 7–120x0000 0000
ADC_SQR30x34Регулярная последовательность: места 1–60x0000 0000
ADC_JSQR0x38Инжектированная последовательность0x0000 0000
ADC_JDR10x3CРезультат инжектированного канала 10x0000 0000
ADC_JDR20x40Результат инжектированного канала 20x0000 0000
ADC_JDR30x44Результат инжектированного канала 30x0000 0000
ADC_JDR40x48Результат инжектированного канала 40x0000 0000
ADC_DR0x4CРезультат регулярного преобразования0x0000 0000

Конструктор значения

Выберите регистр и значения полей — конструктор покажет 32-битное значение и строку на C с макросами CMSIS. Поля, которые вы не меняете, берутся из значения после сброса.

Значение: 0x00000000

0000 0000 0000 0000 0000 0000 0000 0000

ADC1->SR = 0x00000000;

ADC_SR — флаги состояния

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

31302928272625242322212019181716
—
1514131211109876543210
—STRTJSTRTJEOSEOSAWD
  • STRT (бит 4) — Началось преобразование регулярной группы.
  • JSTRT (бит 3) — Началось преобразование инжектированной группы.
  • JEOS (бит 2) — Преобразование инжектированной группы завершено; в RM0008 — JEOC.
  • EOS (бит 1) — Преобразование регулярной группы завершено; в RM0008 — EOC.
  • AWD (бит 0) — Сработал аналоговый сторож: напряжение вне порогов.

ADC_CR1 — управление 1: сканирование, сторож, режимы

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

31302928272625242322212019181716
—AWDENJAWDEN—DUALMOD
1514131211109876543210
DISCNUMJDISCENDISCENJAUTOAWDSGLSCANJEOSIEAWDIEEOSIEAWDCH
  • AWDEN (бит 23) — Аналоговый сторож на регулярных каналах.
  • JAWDEN (бит 22) — Аналоговый сторож на инжектированных каналах.
  • DUALMOD (биты 19:16) — Режим совместной работы ADC1 и ADC2 (поле есть только в ADC1) (только у STM32F103, STM32F105, STM32F107).
    DUALMODЗначение
    0000Независимый режим
    0001Одновременные регулярные + одновременные инжектированные
    0010Одновременные регулярные + поочерёдный запуск
    0011Одновременные инжектированные + быстрое чередование
    0100Одновременные инжектированные + медленное чередование
    0101Только одновременные инжектированные
    0110Только одновременные регулярные
    0111Только быстрое чередование
    1000Только медленное чередование
    1001Только поочерёдный запуск
  • DISCNUM (биты 15:13) — Число каналов за один запуск в прерывистом режиме: DISCNUM + 1.
    DISCNUMЗначение
    0001 канал
    0012 канала
    0103 канала
    0114 канала
    1005 каналов
    1016 каналов
    1107 каналов
    1118 каналов
  • JDISCEN (бит 12) — Прерывистый режим инжектированной группы.
  • DISCEN (бит 11) — Прерывистый режим регулярной группы.
  • JAUTO (бит 10) — Автоматический запуск инжектированной группы после регулярной.
  • AWDSGL (бит 9) — Сторож следит за одним каналом AWDCH или за всеми.
  • SCAN (бит 8) — Сканирование: каналы группы преобразуются по очереди.
  • JEOSIE (бит 7) — Прерывание по окончании инжектированной группы.
  • AWDIE (бит 6) — Прерывание аналогового сторожа.
  • EOSIE (бит 5) — Прерывание по окончании регулярной группы.
  • AWDCH (биты 4:0) — Канал аналогового сторожа при AWDSGL = 1.

ADC_CR2 — управление 2: включение, запуск, выравнивание, DMA

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

31302928272625242322212019181716
—TSVREFESWSTARTJSWSTARTEXTTRIGEXTSEL—
1514131211109876543210
JEXTTRIGJEXTSELALIGN—DMA—RSTCALCALCONTADON
  • TSVREFE (бит 23) — Включение датчика температуры и канала VREFINT.
  • SWSTART (бит 22) — Программный запуск регулярной группы.
  • JSWSTART (бит 21) — Программный запуск инжектированной группы.
  • EXTTRIG (бит 20) — Запуск регулярной группы по внешнему событию.
  • EXTSEL (биты 19:17) — Событие запуска регулярной группы.
    EXTSELЗначение
    000TIM1 CC1 (у ADC3 — TIM3 CC1)
    001TIM1 CC2 (у ADC3 — TIM2 CC3)
    010TIM1 CC3
    011TIM2 CC2 (у ADC3 — TIM8 CC1)
    100TIM3 TRGO (у ADC3 — TIM8 TRGO)
    101TIM4 CC4 (у ADC3 — TIM5 CC1)
    110EXTI11 или TIM8_TRGO (у ADC3 — TIM5 CC3)
    111SWSTART — программный запуск
  • JEXTTRIG (бит 15) — Запуск инжектированной группы по внешнему событию.
  • JEXTSEL (биты 14:12) — Событие запуска инжектированной группы.
    JEXTSELЗначение
    000TIM1 TRGO
    001TIM1 CC4
    010TIM2 TRGO (у ADC3 — TIM4 CC3)
    011TIM2 CC1 (у ADC3 — TIM8 CC2)
    100TIM3 CC4 (у ADC3 — TIM8 CC4)
    101TIM4 TRGO (у ADC3 — TIM5 TRGO)
    110EXTI15 или TIM8_CC4 (у ADC3 — TIM5 CC4)
    111JSWSTART — программный запуск
  • ALIGN (бит 11) — Выравнивание результата в 16-битном регистре.
    ALIGNЗначение
    0По правому краю
    1По левому краю
  • DMA (бит 8) — Запрос DMA после каждого регулярного преобразования.
  • RSTCAL (бит 3) — Сброс регистров калибровки.
  • CAL (бит 2) — Запуск калибровки; бит сбрасывается по её окончании.
  • CONT (бит 1) — Непрерывные преобразования.
  • ADON (бит 0) — Включение АЦП; запись 1 во включённый АЦП запускает преобразование.

ADC_SMPR1 — время выборки каналов от 10-го

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

31302928272625242322212019181716
—SMP17SMP16SMP15
1514131211109876543210
SMP15SMP14SMP13SMP12SMP11SMP10
  • SMP10–SMP17 (по 3 бита на каждый y, положение — на карте битов) — Время выборки канала y.
    SMPyЗначение
    0001,5 такта
    0017,5 такта
    01013,5 такта
    01128,5 такта
    10041,5 такта
    10155,5 такта
    11071,5 такта
    111239,5 такта

ADC_SMPR2 — время выборки каналов 0–9

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

31302928272625242322212019181716
—SMP9SMP8SMP7SMP6SMP5
1514131211109876543210
SMP5SMP4SMP3SMP2SMP1SMP0
  • SMP0–SMP9 (по 3 бита на каждый y, положение — на карте битов) — Время выборки канала y.
    SMPyЗначение
    0001,5 такта
    0017,5 такта
    01013,5 такта
    01128,5 такта
    10041,5 такта
    10155,5 такта
    11071,5 такта
    111239,5 такта

ADC_JOFR1 — смещение инжектированного канала 1

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

31302928272625242322212019181716
—
1514131211109876543210
—JOFFSET1
  • JOFFSET1 (биты 11:0) — Смещение, вычитаемое из результата инжектированного канала 1.

ADC_JOFR2 — смещение инжектированного канала 2

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

31302928272625242322212019181716
—
1514131211109876543210
—JOFFSET2
  • JOFFSET2 (биты 11:0) — Смещение, вычитаемое из результата инжектированного канала 2.

ADC_JOFR3 — смещение инжектированного канала 3

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

31302928272625242322212019181716
—
1514131211109876543210
—JOFFSET3
  • JOFFSET3 (биты 11:0) — Смещение, вычитаемое из результата инжектированного канала 3.

ADC_JOFR4 — смещение инжектированного канала 4

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

31302928272625242322212019181716
—
1514131211109876543210
—JOFFSET4
  • JOFFSET4 (биты 11:0) — Смещение, вычитаемое из результата инжектированного канала 4.

ADC_HTR — верхний порог аналогового сторожа

Смещение 0x24, 32 бит, после сброса 0x0000 0FFF. В коде: ADC1->HTR.

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

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

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

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

ADC_SQR1 — регулярная последовательность: длина и места 13–16

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

31302928272625242322212019181716
—LSQ16
1514131211109876543210
SQ16SQ15SQ14SQ13
  • L (биты 23:20) — Число преобразований регулярной группы: L + 1.
  • SQ13–SQ16 (по 5 бита на каждый y, положение — на карте битов) — Номер канала на y-м месте регулярной последовательности.

ADC_SQR2 — регулярная последовательность: места 7–12

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

31302928272625242322212019181716
—SQ12SQ11SQ10
1514131211109876543210
SQ10SQ9SQ8SQ7
  • SQ7–SQ12 (по 5 бита на каждый y, положение — на карте битов) — Номер канала на y-м месте регулярной последовательности.

ADC_SQR3 — регулярная последовательность: места 1–6

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

31302928272625242322212019181716
—SQ6SQ5SQ4
1514131211109876543210
SQ4SQ3SQ2SQ1
  • SQ1–SQ6 (по 5 бита на каждый y, положение — на карте битов) — Номер канала на y-м месте регулярной последовательности.

ADC_JSQR — инжектированная последовательность

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

31302928272625242322212019181716
—JLJSQ4
1514131211109876543210
JSQ4JSQ3JSQ2JSQ1
  • JL (биты 21:20) — Число преобразований инжектированной группы: JL + 1.
  • JSQ4 (биты 19:15) — Номер канала в поле JSQ4; при JL < 3 последовательность начинается не с JSQ1, а заканчивается на JSQ4.
  • JSQ3 (биты 14:10) — Номер канала в поле JSQ3; при JL < 3 последовательность начинается не с JSQ1, а заканчивается на JSQ4.
  • JSQ2 (биты 9:5) — Номер канала в поле JSQ2; при JL < 3 последовательность начинается не с JSQ1, а заканчивается на JSQ4.
  • JSQ1 (биты 4:0) — Номер канала в поле JSQ1; при JL < 3 последовательность начинается не с JSQ1, а заканчивается на JSQ4.

ADC_JDR1 — результат инжектированного канала 1

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

31302928272625242322212019181716
—
1514131211109876543210
JDATA
  • JDATA (биты 15:0) — Результат инжектированного канала за вычетом смещения JOFFSET.

ADC_JDR2 — результат инжектированного канала 2

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

31302928272625242322212019181716
—
1514131211109876543210
JDATA
  • JDATA (биты 15:0) — Результат инжектированного канала за вычетом смещения JOFFSET.

ADC_JDR3 — результат инжектированного канала 3

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

31302928272625242322212019181716
—
1514131211109876543210
JDATA
  • JDATA (биты 15:0) — Результат инжектированного канала за вычетом смещения JOFFSET.

ADC_JDR4 — результат инжектированного канала 4

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

31302928272625242322212019181716
—
1514131211109876543210
JDATA
  • JDATA (биты 15:0) — Результат инжектированного канала за вычетом смещения JOFFSET.

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

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

31302928272625242322212019181716
ADC2DATA
1514131211109876543210
DATA
  • ADC2DATA (биты 31:16) — В ADC1 при двойном режиме — результат регулярного преобразования ADC2 (только у STM32F103, STM32F105, STM32F107).
  • DATA (биты 15:0) — Результат регулярного преобразования.

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

Как прочитать один канал АЦП на STM32F103?

Включите тактирование ADC1 (ADC1EN в RCC_APB2ENR) и делитель ADCPRE так, чтобы частота была не выше 14 МГц. Включите АЦП (ADON = 1), выполните калибровку (CAL = 1, дождитесь сброса бита), запишите номер канала в SQ1 регистра SQR3 и время выборки в SMPR. Каждое преобразование запускает запись ADON = 1; дождитесь флага EOS (EOC) и прочитайте DR.

Почему результат АЦП «гуляет» на высокоомном источнике?

Конденсатор выборки не успевает зарядиться за короткое время выборки. Увеличьте время в регистрах SMPR — до 239,5 такта — или поставьте буферный усилитель. Допустимое сопротивление источника для каждого времени выборки приведено в даташите микроконтроллера.

Почему инжектированные каналы читаются не в том порядке?

Если инжектированных преобразований меньше четырёх, последовательность заканчивается на JSQ4, а не начинается с JSQ1: при трёх преобразованиях АЦП берёт JSQ2, JSQ3 и JSQ4. Так написано в описании ADC_JSQR в RM0008.

Источники

  1. STMicroelectronics. RM0008: Reference manual (Rev 21) — раздел 11.12: описание регистров, назначение полей и значения после сброса
  2. STMicroelectronics. cmsis-device-f1 v4.3.5: заголовки CMSIS stm32f101x6.h, stm32f101xb.h, stm32f101xe.h, stm32f101xg.h, stm32f102x6.h, stm32f102xb.h, stm32f103x6.h, stm32f103xb.h, stm32f103xe.h, stm32f103xg.h, stm32f105xc.h, stm32f107xc.h — структуры периферии, смещения, адреса экземпляров и макросы полей; лицензия Apache-2.0

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

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

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