В микроконтроллер STM32F429 встроено 3 аналого-цифровых преобразователя (analog-to-digital converters, ADC). Каждый ADC поддерживает разрешающую способность до 12 бит, и может оцифровывать сигнал, поступающий по 16 внешним каналам, выполняя преобразования в одиночном режиме (single-shot mode) или режиме сканирования (scan mode). В режим сканирования автоматическое преобразование выполняется на выбранной группе аналоговых входов. Непонятные термины и сокращения см. в Словарике [3].
Дополнительные логические функции, встроенные в интерфейс ADC:
• Одновременные выборка и хранение (simultaneous sample and hold). • Выборка и хранение с чередованием (interleaved sample and hold).
ADC может поддерживаться контроллером DMA. Функция analog watchdog позволяет очень точно мониторить преобразуемое напряжение на одном, нескольких или всех выбранных каналах. Прерывание генерируется, когда преобразуемое напряжение выходит за пределы запрограммированных порогов. Для синхронизации аналого-цифрового преобразования на нужную частоту дискретизации сигнала ADC должен запускаться от одного из таймеров TIM1, TIM2, TIM3, TIM4, TIM5 или TIM8.
(1). Имя в этой колонке обозначает функцию вывода по умолчанию, работающую после сброса. Доступность функции зависит от выбранной модели микроконтроллера, см. его даташит.
(5) FT = 5V tolerant (входы допускают уровень 5V), за исключением случая, когда активен аналоговый режим или режим генератора (для PC14, PC15, PH0 и PH1). S обозначает вывод для подачи питания.
(6) Если микроконтроллер поставляется в корпусах WLCSP143, UFBGA169, UFBGA176, LQFP176 или TFBGA216, и вывод BYPASS_REG установлен на VDD (режим Regulator OFF/internal reset ON), то ножка PA0 используется как внутренний сброс Reset (с активным уровнем лог. 0).
[Общее описание ADC]
ADC работает по принципу последовательного приближения (successive approximation). У него всего может быть до 19 мультиплексированных каналов, позволяющих измерять сигналы от 16 внешних источников, двух внутренних источников и от канала VBAT. Аналого-цифровое преобразование каналов может производиться в режимах single, continuous, scan или discontinuous. Результат ADC сохраняется в 16-битном регистре данных с выравниванием этих данных влево или вправо.
Функция analog watchdog позволяет приложению детектировать ситуацию, когда входное напряжение выходит за пределы верхнего или нижнего порогов, определяемых пользователем.
Основные функции и возможности ADC:
• Программируемая разрешающая способность 12, 10, 8 или 6 бит. • Генерация прерывания по завершению преобразования, окончанию injected-преобразования, а также в случае событий analog watchdog или overrun. • Режимы одиночного и непрерывного преобразования (single и continuous conversion modes). • Режим сканирования для автоматического преобразования от канала 0 до канала n. • Выравнивание данных со встроенной когерентностью. • Программируемое время выборки на каждом канале. • Опция внешнего триггера с конфигурируемой полярностью для преобразований regular и injected. • Прерывистый режим (discontinuous mode). • Режим Dual/Triple (на микроконтроллерах, у которых 2 или большее количество ADC). • Конфигурируемое хранилище данных DMA в режиме Dual/Triple ADC. • Конфигурируемая задержка между преобразованиями в режиме Dual/Triple interleaved. • Типы преобразования ADC (см. [2]). • Требования к напряжению питания ADC: 2.4V .. 3.6V на полной скорости и при снижении до 1.8V на меньшей скорости. • Диапазон входных уровней ADC VIN от VREF– до VREF+. • Генерация запроса DMA при regular преобразовании канала.
Примечание: вывод VREF–, если он присутствует (в зависимости от типа корпуса микроконтроллера), должен быть подтянут к VSSA.
[Важные замечания по использованию АЦП STM32]
1. В микроконтроллере STM32 может быть от 1 до 3 блоков ADC, в зависимости от модели. У STM32F4x их три: ADC1, ADC2 и ADC3 (в описании для обозначения произвольного блока АЦП используется аббревиатура ADCx).
2. Блок ADCx может через мультиплексор подключаться к какому-либо входному каналу. Всего есть 16 внешних каналов от IN0 до IN15 (для ссылки на произвольный канал здесь используется аббревиатура INy), которые могут быть привязаны к ножкам GPIO микроконтроллера. Кроме этих внешних каналов есть еще внутренние дополнительные, через которые можно опрашивать встроенный датчик температуры, VREFINT или VBAT.
Обратите внимание, что каждый блок ADCx имеет свой набор каналов, к которым его можно привязать. Т. е. нельзя к любому ADCx привязать любой канал INy. Поэтому ножки портов GPIO, которые могут быть назначены как входы ADC, обозначаются довольно хитрым, не сразу понятным способом. Например, для STM32F4x в корпусе LQFP144 (см. врезку выше):
- ADC3_IN4, ADC3_IN5, ADC3_IN6, ADC3_IN7, ADC3_IN8, ADC3_IN9, ADC3_IN14, ADC3_IN15 Эти имена ножек означают, что они могут быть привязаны к блоку ADC3 в качестве каналов 4 .. 9, 14, 15. - ADC12_IN4, ADC12_IN5, ADC12_IN6, ADC12_IN7, ADC12_IN8, ADC12_IN9, ADC12_IN14, ADC12_IN15 Эти имена ножек означают, что они могут быть привязаны к блоку ADC1 или ADC2 (одновременно только к одному из них, по выбору) в качестве каналов 4 .. 9, 14, 15. - ADC123_IN0, ADC123_IN1, ADC123_IN2, ADC123_IN3, ADC123_IN10, ADC123_IN11, ADC123_IN12, ADC123_IN13. Эти имена ножек означают, что они могут быть привязаны к блоку ADC1, ADC2 или ADC3 (одновременно только к одному из них, по выбору) в качестве каналов 0 .. 3, 10 .. 13.
3. Имеется встроенный источник опорного напряжения VREFINT (типовая величина напряжения 1.21V), однако для АЦП всегда используется только внешнее опорное напряжение VREF. Таким образом, VREFINT может использоваться только для калибровки внешнего опорного напряжения, если необходимо точно измерять уровень сигнала на входе АЦП.
Для внешнего опорного напряжения используются отдельные выводы VREF- и VREF+ (их наличие зависит от модели и корпуса микроконтроллера). Однако их уровни имеют жесткие ограничения, привязанные сооветственно к GND и VDD/VDDA (обычно 3.3V). Поэтому разработчики часто VREF- накоротко замыкают на GND, а VREF+ соединяют c VDD (в простейшем случае напрямую, либо при особых требованиях через RC-цепочку или фильтр). В этом случае, если VDD установлено с невысокой точностью, но требуется повышенная точность измерения абсолютного уровня, то применяют калибровку VREF по внутреннему напряжению VREFINT с учетом калибровочных данных, запрограммированных производителем на заводе. У STM32F4 это ячейка памяти из двух байт по адресам 0x1FFF7A2A и 0x1FFF7A2B, где записаны сырые данные преобразования ADC, снятые при определенных условиях. См. ниже врезку "Параметры ADC", таблицы 83 и 84.
4. Каналы АЦП бывают двух типов: регулярные (regular) и инжектированные (injected). Название "инжектированный" означает, что запуск преобразования этого канала может быть "вставлено" между преобразованиями регулярных каналов, т. е. обработка регулярных каналов при этом приостанавливается. Инжектированные каналы опрашиваются между регулярными.
Особенность инжектированного канала заключается в том, что у него есть свой отдельный регистр для сохранения результата. То есть если каналы IN0, IN1, IN2, IN3 настроить как инжектированные, то их результаты преобразования будут сохранены в четыре разных регистра (ADCx_JDR1, ADCx_JDR2, ADCx_JDR3, ADCx_JDR4). Инжектированных каналов для ADCx не может быть больше четырёх. Любой доступный аналоговый вход (доступность зависит от модели и корпуса микроконтроллера) можно настроить как инжектированный канал.
Регулярные каналы предназначены для обработки входных сигналов поочередно, с определенной периодичностью. Поэтому они и называются регулярными. У регулярных каналов есть только один регистр для забора результатов, выделенный на все каналы - ADCx_DR. То есть если каналы РА0, РА1, РА2, РА3 настроить как регулярные для какого-то из ADCx, то результат работы каждого канала будет записываться в один и тот же регистр, затирая предыдущие данные. Т. е. если не успели своевременно забрать данные, то они будут потеряны. Эту проблему позволяет решить функция DMA.
5. Используя режим сдвоенных преобразований, можно превратить два ADC в один, работающий на более высокой скорости преобразования.
6. Результат преобразования ADCx имеет беззнаковый тип. Это не всегда удобно для приложений DSP, которые часто применяют числа со знаком. Возможность выравнивания результата влево (в старшие разряды) удобно использовать для получения значения выборки в формате 16-битного числа со знаком (двоичное дополнение, тип short).
Подсистема АЦП STM32 намного сложнее в сравнении с традиционными 8-битными микроконтроллерами AVR. По этой причине документация документация обширная, и в ней довольно трудно разобраться. Целесообразно пользоваться готовыми примерами кода, которые можно найти в библиотеке STM32Cube, и на основе их создавать собственные приложения.
Самое нижнее/отрицательное опорное напряжение ADC, VREF– = VSSA
VSSA
Вход, минус напряжения питания аналоговых схем.
Земля для аналогового питания, по уровню потенциала равная VSS
ADCx_IN[15:0]
Аналоговые входные сигналы.
16 аналоговых входных каналов.
Примечание (1): на корпусе LQFP144 вывода VREF- нет, он соединен внутри кристалла с выводом VSSA.
Управление включением и выключением ADC. ADC включается путем установки бита ADON в регистре ADC_CR2. Когда бит ADON установлен первый раз, это выводит ADC из режима выключения (Power-down mode).
Преобразование запускается, когда установлен либо бит SWSTART, либо бит JSWSTART.
Вы можете остановить преобразование и перевести ADC в режим выключения (power down mode) очисткой бита ADON. В этом режиме ADC почти не потребляет тока (только несколько микроампер).
Тактирование ADC. Существует две схемы тактирования:
• Тактирование аналоговых схем: ADCCLK, это общее тактирование для всех ADC. Эти такты генерируются из тактов APB2, поделенных программируемым прескалером, который позволяет ADC работать на частотах fPCLK2/2, /4, /6 или /8. См. даташит для того, чтобы узнать максимальное значение ADCCLK. • Тактирование для цифрового интерфейса (используется для доступа к регистрам на чтение/запись). Эта тактовая частота равна частоте APB2. Тактирование цифрового интерфейса может быть индивидуально разрешено/запрещено для каждого ADC через регистр управления тактированием периферии RCC APB2 (RCC_APB2ENR).
Выбор канала. Имеется 16 мультиплексированных каналов. Их можно организовать в 2 группы: regular и injected. Группа состоит из последовательности преобразований, которые могут быть выполнены на любом канале и в любом порядке. Например, можно реализовать последовательность преобразования в следующем порядке: ADC_IN3, ADC_IN8, ADC_IN2, ADC_IN2, ADC_IN0, ADC_IN2, ADC_IN2, ADC_IN15.
• В группу regular может входить до 16 преобразований. Каналы regular и их порядок в последовательности преобразований должны быть выбраны в регистрах ADC_SQRx. Общее количество преобразований в группе regular должно быть записано в биты L[3:0] регистра ADC_SQR1. • В группу injected входит до 4 преобразований. Каналы injected и их порядок должны быть выбраны в регистре ADC_JSQR. Общее количество преобразований должно быть записано в биты L[1:0] регистра ADC_JSQR.
Если регистры ADC_SQRx или ADC_JSQR модифицируются во время преобразования, то текущее преобразование сбрасывается, и в ADC отправляется новый импульс запуска для преобразования новой выбранной группы.
• В микроконтроллерах STM32F40x и STM32F41x датчик температуры (temperature sensor) подключен внутри кристалла к каналу ADC1_IN16. Внутреннее опорное напряжение VREFINT подключено к ADC1_IN17. • В микроконтроллерах STM32F42x и STM32F43x датчик температуры подключен внутри кристалла к каналу ADC1_IN18, который совмещен с VBAT. В любой момент времени должен быть выбран только один источник сигнала преобразования, от датчика температуры или от VBAT. Когда установлены одновременно преобразование датчика температуры и преобразование VBAT, то будет выполнено только преобразование VBAT. Внутреннее опорное напряжение VREFINT подключено к ADC1_IN17.
Канал VBAT (подключенный к каналу ADC1_IN18) может быть также преобразован как канал injected или канал regular.
Примечание: каналы датчика температуры, VREFINT и VBAT доступны только на периферии ADC1.
Режим одиночного преобразования (single conversion mode). В этом режиме ADC после запуска делает только одно преобразование. Этот режим запускается с битом CONT, равным 0, от одного из следующих сигналов:
• Установка бита SWSTART в регистре ADC_CR2 (только для канала regular). • Установка бита JSWSTART (для канала injected). • Внешний триггер (для канала regular или injected).
Таблица 80. Характеристики датчика температуры.
Символ
Параметр
MIN
Typ
MAX
Ед.
TL(1)
Линейность VSENSE по отношению к температуре
-
±1
±2
°C
Avg_Slope(1)
Средний наклон
-
2.5
mV/°C
V25(1)
Напряжение при 25°C
-
0.76
V
tSTART(2)
Время запуска
-
6
10
мкс
TS_temp(2)
Время выборки ADC (sampling time) при чтении температуры (точность 1°C)
10
-
-
Примечания:
(1) Гарантируется результатами испытаний характеристик. (2) Гарантируется дизайном.
Таблица 81. Значения калибровки датчика температуры.
Символ
Параметр
Адрес памяти
TS_CAL1
Сырые значения данных ADC датчика температуры (TS), снятые при температуре 30°C, VDDA = 3.3V.
0x1FFF7A2C - 0x1FFF7A2D
TS_CAL2
Сырые значения данных ADC датчика температуры (TS), снятые при температуре 110°C, VDDA = 3.3V.
0x1FFF7A2E - 0x1FFF7A2F
Таблица 82. Характеристики мониторинга VBAT.
Символ
Параметр
MIN
Typ
MAX
Ед.
R
Резисторный мост для VBAT
-
50
-
кОм
Q
Коэффициент измерения VBAT
-
4
-
Er(1)
Ошибка коэффициента Q
-1
-
+1
%
TS_vbat(2)
Время выборки ADC, когда осуществляется чтение VBAT с точностью 1 mV
5
-
-
мкс
Примечания:
(1) Гарантируется дизайном. (2) Самое короткое время выборки может быть определено в приложении несколькими итерациями.
Когда выполнится преобразование выбранного канала:
• Если был преобразован канал regular:
– Преобразованные данные сохраняются в 16-битный регистр ADC_DR. – Установится флаг EOC (end of conversion, окончание преобразования). – Генерируется прерывание, если установлен бит EOCIE.
• Если был преобразован канал injected:
– Преобразованные данные сохраняются в 16-битный регистр ADC_JDR1. – Установится флаг JEOC (end of conversion injected, окончание инжектированного преобразования). – Генерируется прерывание, если установлен бит JEOCIE.
После этого ADC останавливается.
Режим непрерывных преобразований (сontinuous conversion mode). В этом режиме ADC немедленно запустит новое преобразование сразу после завершения текущего. Этот режим запускается с битом CONT, равным 1, либо от внешнего триггера, либо установкой бита SWSTRT в регистре ADC_CR2 (только для каналов regular).
После каждого преобразования (если преобразовалась группа каналов regular):
– Последние преобразованные данные сохраняются в 16-битный регистр ADC_DR. – Установится флаг окончания преобразования EOC. – Генерируется прерывание, если установлен бит EOCIE.
Примечание: каналы injected не могут преобразовываться в режиме continuous. Единственное исключение - когда канал injected сконфигурирован для автоматического преобразования после каналов regular в режиме continuous (с помощью бита JAUTO), см. секцию Auto-injection).
Диаграмма времени. Как показано на рис. 45, для ADC требуется время стабилизации tSTAB перед тем, как он сможет точно выполнить преобразование. После старта преобразования ADC и после 15 тактовых импульсов установится флаг EOC, и в 16-битном регистре данных ADC появится результат преобразования.
Рис. 45. Диаграмма времени работы ADC.
Analog watchdog. Бит статуса AWD для analog watchdog установится, если аналоговое напряжение, преобразуемое ADC, окажется ниже нижнего порога или выше верхнего порога. Эти пороги программируются в 12 младших битах 16-битных регистров ADC_HTR и ADC_LTR. Прерывание может быть разрешено битом AWDIE в регистре ADC_CR1.
Значение порога не зависит от выравнивания, выбранного битом ALIGN в регистре ADC_CR2. Аналоговое напряжение сравнивается с нижним и верхним порогами перед выравниванием.
Рис. 46. Защищенная область analog watchdog.
Таблица 66 показывает, как должен быть сконфигурирован регистр ADC_CR1, чтобы разрешить analog watchdog на одном или большем количестве каналов.
Таблица 66. Выбор канала analog watchdog.
Каналы, защищенные Analog Watchdog
Управляющие биты регистра ADC_CR1 (x - не имеет значения)
AWDSGL
AWDEN
JAWDEN
Нет защиты
x
0
0
Все injected каналы
0
0
1
Все regular каналы
0
1
0
Все regular и injected каналы
0
1
1
Один(1) injected канал
1
0
1
Один(1) regular канал
1
1
0
Один(1) regular или injected канал
1
1
1
Примечание (1): выбирается битами AWDCH[4:0].
Режим сканирования. Этот режим используется для сканирования группы аналоговых каналов. Режим сканирования выбирается установкой бита SCAN в регистре ADC_CR1. Как только этот бит установлен, ADC сканирует все каналы, выбранные регистрами ADC_SQRx (для каналов regular) или в регистре ADC_JSQR (для каналов injected). Одиночное преобразование выполняется для каждого канала группы. После каждого окончания преобразования, автоматически преобразуется следующий канал в группе. Если установлен бит CONT, то преобразование канала regular не останавливается на последнем выбранном канале группы, вместо этого снова запускается преобразование на первом выбранном канале группы.
Если установлен бит DMA, то контроллер прямого доступа к памяти (direct memory access, DMA) используется для переноса данных, преобразованных из группы каналов regular (сохраненных в регистре ADC_DR) в SRAM после преобразования каждого канала regular.
В регистре ADC_SR установится бит EOC:
• По окончании каждой последовательности группы regular, если бит EOCS сброшен в 0. • По окончании преобразования каждого regular канала, если бит EOCS установлен в 1.
Данные, преобразованные из injected-канала всегда сохраняются в регистрах ADC_JDRx.
[Управление инжектированными каналами]
Инжектирование по триггеру. Для triggered injection бит JAUTO в регистре ADC_CR1 должен быть сброшен в 0.
1. Запуск преобразования группы каналов regular осуществляется либо внешним триггером, либо установкой бита SWSTART в регистре ADC_CR2. 2. Если происходит внешний injected-триггер, или если установлен бит JSWSTART во время преобразования regular группы каналов, то текущее преобразование сбрасывается и последовательность injected-канала переключается в режим однократного сканирования. 3. Затем преобразование regular группы каналов возобновится от последнего прерванного regular-преобразования. Если событие regular произойдет во время injected-преобразования, то injected-преобразование не прерывается, вместо этого последовательность regular выполняется по окончании последовательности injected. Рис. 47 показывает соответствующую диаграмму времени.
Примечание: при использовании triggered injection необходимо убедиться, что интервал между событиями триггера больше, чем последовательность injection. Например, если длина последовательности 30 тактов ADC (т. е. 2 преобразования со временем выборки 3 тактовых периода), то минимальный интервал между триггерами должен быть 31 такт ADC.
Рис. 47. Латентность injected-преобразования.
Примечание (1): максимальное значение латентности можно найти в электрических характеристиках даташитов на микроконтроллеры STM32F4xx.
Auto-injection. Если установлен бит JAUTO, то каналы в группе injected автоматически преобразуются после regular-группы каналов. Это может использоваться для преобразования последовательности до 20 преобразований, запрограммированных регистрами ADC_SQRx и ADC_JSQR.
В этом режиме должен быть запрещен внешний триггер на injected-каналах.
Если в дополнение к биту JAUTO также установлен бит CONT, то regular-каналы, за которыми идут injected-каналы, будут непрерывно преобразовываться.
Примечание: невозможно использовать одновременно режимы auto-injected и discontinuous.
[Прерывистый (discontinuous) режим]
Группа regular. Этот режим разрешается установкой бита DISCEN в регистре ADC_CR1. Режим может использоваться для преобразования короткой последовательности из n преобразований (n ≤ 8), это часть последовательности преобразований, выбранных в регистрах ADC_SQRx. Значение n задается записью в биты DISCNUM[2:0] регистра ADC_CR1.
Когда срабатывает внешний триггер, это запускает следующие n преобразований, выбранных регистрами ADC_SQRx, пока не выполнятся все преобразования в последовательности. Общая длина последовательности определяется битами L[3:0] регистра ADC_SQR1.
Пример:
• n = 3, каналы для преобразования 0, 1, 2, 3, 6, 7, 9, 10. • 1-й триггер: преобразуется последовательность 0, 1, 2. Событие EOC генерируется на каждом преобразовании. • 2-й триггер: преобразуется последовательность 3, 6, 7. Событие EOC генерируется на каждом преобразовании. • 3-й триггер: преобразуется последовательность 9, 10. Событие EOC генерируется на каждом преобразовании. • 4-й триггер: преобразуется последовательность 0, 1, 2. Событие EOC генерируется на каждом преобразовании.
Примечание: когда группа regular преобразуется в режиме discontinuous, пролонгация не происходит. Когда все подгруппы преобразованы, следующий триггер запустит преобразование первой подгруппы. В показанном выше примере 4-й триггер заново преобразует каналы 0, 1 и 2 в 1-й подгруппе.
Группа injected. Этот режим разрешается установкой бита JDISCEN в регистре ADC_CR1. Режим может использоваться для преобразования последовательности, выбранной регистром ADC_JSQR, канал за каналом, после события внешнего триггера.
Когда происходит событие внешнего триггера, оно запускает преобразования следующего канала, выбранного в регистре ADC_JSQR, пока не выполнятся все преобразования в последовательности. Общая длина последовательности определяется битами JL[1:0] в регистре ADC_JSQR.
Пример:
n = 1, каналы для преобразования 1, 2, 3.
• 1-й триггер: преобразуется канал 1. • 2-й триггер: преобразуется канал 2. • 3-й триггер: преобразуется канал 3, и генерируется событие JEOC. • 3-й триггер: преобразуется канал 1.
Примечание: когда все injected-каналы преобразованы, следующий триггер запустит преобразование первого injected-канала. В показанном выше примере 4-й триггер снова преобразует 1-й injected канал 1. Невозможно использовать одновременно оба режима auto-injected и discontinuous. Режим discontinuous не должен одновременно устанавливаться для regular-группы и injected-группы. Режим discontinuous должен быть разрешен только для преобразования одной группы каналов.
[Выравнивание данных]
Бит ALIGN в регистре ADC_CR2 выбирает выравнивание данных, сохраняемых после преобразования. Данные могут быть выравнены вправо или влево, как показано на рисунках 48 и 49.
Рис. 48. Правое выравнивание 12-битных данных.
Рис. 49. Левое выравнивание 12-битных данных.
Значение преобразованных данных из injected группы каналов уменьшается на определяемое пользователем смещение, записанное в регистры ADC_JOFRx, чтобы результат мог стать отрицательным значением. Бит SEXT представляет расширенное значение со знаком.
Для каналов в группе regular никакое смещение не вычитается, поэтому всегда значащими будут 12 бит.
Специальный случай: при левом выравнивании данные выравниваются на базе половины слова (в 2 байтах), кроме установленной разрядности 6 бит. Для 6-битной разрядности данные выравниваются на базе одного байта, как показано на рис. 50.
Рис. 50. Левое выравнивание 6-битных данных.
[Программируемое время выборки в каждом канале]
ADC оцифровывает входное напряжение за ADCCLK тактов, что может быть изменено битами SMP[2:0] регистров ADC_SMPR1 и ADC_SMPR2. У каждого канала может быть отличающееся время выборки (sampling time).
Общее время преобразования вычисляется следующим образом:
Tconv = время выборки + 12 тактов
Пример: при ADCCLK = 30 MHz и времени выборки 3 такта, Tconv = 3 + 12 = 15 тактов = 0.5 мкс при APB2 на частоте 60 МГц.
[Преобразование по внешнему триггеру и полярность триггера]
Преобразование может быть запущено от внешнего события (например timer capture, линия EXTI). Если быты управления EXTEN[1:0] (для regular-преобразования) или биты JEXTEN[1:0] (для injected-преобразования) отличаются от 0b00, то внешние события с выбранной полярностью могут запустить преобразование. Таблица 67 предоставляет соответствие между значениями EXTEN[1:0] и JEXTEN[1:0] и полярностью триггера.
Таблица 67. Конфигурирование полярности триггера.
Источник
EXTEN[1:0] / JEXTEN[1:0]
Детектирование триггера запрещено
00
Детектирование по фронту нарастания уровня
01
Детектирование по спаду уровня
10
Детектирование и по фронту, и по спаду уровня
11
Примечание: полярность внешнего триггера можно менять на лету.
Биты управления EXTSEL[3:0] и JEXTSEL[3:0] используются для выбора, какое из 16 возможных событий может запустить преобразование для regular или injected группы.
В таблице 68 приведен возможный внешний триггер для regular-преобразования.
Таблица 68. Внешний триггер для каналов regular.
Источник события
Тип
EXTSEL[3:0]
TIM1_CH1
Внутренние сигналы от таймеров микроконтроллера
0000
TIM1_CH2
0001
TIM1_CH3
0010
TIM2_CH2
0011
TIM2_CH3
0100
TIM2_CH4
0101
TIM2_TRGO
0110
TIM3_CH1
0111
TIM3_TRGO
1000
TIM4_CH4
1001
TIM5_CH1
1010
TIM5_CH2
1011
TIM5_CH3
1100
TIM8_CH1
1101
TIM8_TRGO
1110
EXTI line11
Внешний вывод
1111
В таблице 69 приведен возможный внешний триггер для injected-преобразования.
Источник события
Тип
JEXTSEL[3:0]
TIM1_CH4
Внутренние сигналы от таймеров микроконтроллера
0000
TIM1_TRGO
0001
TIM2_CH1
0010
TIM2_TRGO
0011
TIM3_CH2
0100
TIM3_CH4
0101
TIM4_CH1
0110
TIM4_CH2
0111
TIM4_CH3
1000
TIM4_TRGO
1001
TIM5_CH4
1010
TIM5_TRGO
1011
TIM8_CH2
1100
TIM8_CH3
1101
TIM8_CH4
1110
EXTI line15
Внешний вывод
1111
Программно инициируемый триггер может быть сгенерирован установкой бита SWSTART (для regular-преобразования) или бита JSWSTART (для injected-преобразования) в регистре ADC_CR2.
Преобразование группы regular может быть прервано injected-триггером.
Примечание: выбор триггера может быть осуществлен на лету. Однако при смене выбора есть окно времени 1 такт APB, в течение которого детектирование триггера запрещено. Это сделано для того, чтобы избежать случайного детектирования во время изменений.
Есть возможность ускорить преобразование путем уменьшение разрешающей способности (разрядности) ADC. Биты RES используются для выбора количества бит, доступных в регистре данных. Минимальное время преобразования для каждого варианта разрядности следующее:
Использование DMA. Поскольку преобразованные значения regular-канала сохраняются в одном уникальном регистре данных, полезно использовать DMA для преобразования больше одного regular-канала. Это позволит избежать потери данных, которые уже сохранены в регистре ADC_DR.
Когда разрешен режим DMA (бит DMA в регистре ADC_CR2 установлен в лог. 1), после каждого преобразования regular-канала генерируется запрос DMA. Это позволяет передать преобразованные данные из регистра ADC_DR в место назначения, выбранное программой.
Несмотря на это, в случае потери данных (переполнения) устанавливается бит OVR в регистре ADC_SR, и генерируется прерывание (если установлен бит разрешения прерывания OVRIE). Тогда передачи DMA запрещаются, и запросы DMA больше не принимаются. В этом случае, если делается запрос DMA, regular-преобразования обрываются, и дальнейшие regular-триггеры игнорируются. Необходимо очистить флаг OVR и бит DMAEN в используемом потоке DMA (DMA stream), и заново инициализировать и DMA, и ADC, чтобы преобразованные желаемые данные передавались в правильную ячейку памяти. Только после этого преобразование может быть возобновлено, и передача данных снова разрешена. Преобразования injected-канала не чувствительны к ошибкам overrun.
Когда OVR = 1 в режиме DMA, запросы DMA блокируются после последних достоверных переданных данных. Это означает, что все данные, переданные в RAM, можно считать достоверными.
После окончания последней передачи DMA (количество передач конфигурируется в регистре DMA_SxNTR контроллера DMA):
• Новые запросы DMA не выдаются в контроллер DMA, если бит DDS в регистре ADC_CR2 сброшен в 0 (это позволяет избежать ошибки overrun). Однако бит DMA не очищается аппаратно. В него должен быть записан 0, затем 1 для запуска новой передачи. • Запросы могут продолжать генерироваться, если бит DDS установлен в 1. Это позволяет сконфигурировать DMA в режиме кольцевого буфера с двойной буферизацией.
Для восстановления ADC из состояния OVR, когда используется DMA, выполните следующие шаги:
1. Переинициализируйте DMA (настройте адрес назначения и счетчик NDTR). 2. Очистите бит OVR в регистре ADC_SR. 3. Запустите ADC (триггер) для запуска преобразования.
Управление последовательностью преобразований без использования DMA. Если преобразования происходят достаточно медленно, то последовательность преобразования можно обрабатывать программно. В этом случае бит EOCS в регистре ADC_CR2 должен быть установлен, чтобы бит статуса EOC устанавливался по окончанию каждого преобразования, не только по окончанию последовательности. Когда EOCS = 1, детектирование overrun автоматически разрешается. Поэтому каждый раз по завершению преобразования бит EOC устанавливается, и можно прочитать регистр данных ADC_DR. Обработка overrun та же самая, как и в ситуации использования DMA.
Для восстановления ADC из состояния OVR, когда установлен бит EOCS, выполните следующие шаги:
1. Очистите бит ADC OVR в регистре ADC_SR. 2. Активируйте триггер ADC для запуска преобразования.
Преобразования без DMA и без детектирования overrun. Может быть полезно позволить ADC преобразовать один или большее число каналов без чтения данных каждый раз по окончании преобразования (например, если используется analog watchdog). Для этого DMA должен быть запрещен (DMA = 0), и бит EOC должен быть установлен только по окончании последовательности (EOCS = 0). В такой конфигурации детектирование overrun запрещено.
[Multi ADC]
В микроконтроллерах, где два ADC или больше, могут использоваться режимы Dual (с двумя ADC) и Triple (с тремя ADC), см. рис. 51.
Рис. 51. Блок-схема Multi ADC.
Примечания к рис. 51:
(1) Хотя внешние триггеры присутствуют на ADC2 и ADC3, на этой диаграмме они не показаны. (2) В режиме Dual ADC компонент ADC3 slave не представлен. (3) В режиме Triple ADC общий регистр данных ADC (ADC_CDR) содержит regular преобразованные данные ADC1, ADC2 и ADC3. Все 32 бита регистра используются в соответствии с выбранным порядком хранения. В режиме Dual ADC общий регистр данных ADC (ADC_CDR) содержит regular преобразованные данные и ADC1, и ADC2. Используются все 32 бита регистра.
В режиме multi ADC запуск преобразования срабатывает альтернативно или одновременно от ADC1 master для slave ADC2 и ADC3, в зависимости от выбранного режима битами MULTI[4:0] в регистре ADC_CCR.
Примечание: в режиме multi ADC, когда конфигурируется триггер преобразования от внешнего события, приложение должно установить триггер только от master, и запретить триггер от slave, чтобы предотвратить случайные триггеры, которые могут запустить нежелательные slave-преобразования.
Примечание: в режиме multi ADC преобразованные данные могут быть прочитаны в регистре данных multi-mode (ADC_CDR). Биты статуса могут быть прочитаны в регистре состояния multi-mode (ADC_CSR).
Запросы DMA в режиме Multi ADC. В режиме Multi ADC блок DMA может быть сконфигурирован для передачи преобразованных данных в трех различных режимах. Во всех случаях используются потоки DMA, подключенные к ADC:
– DMA mode 1: на каждом запросе DMA (доступен один элемент данных) передается половина слова (2 байта), представляющая данные преобразования ADC.
В режиме Triple ADC данные ADC1 передаются на первом запросе, данные ADC2 передаются на втором запросе, и данные ADC3 передаются на третьем запросе; затем последовательность повторяется. Таким образом, DMA сначала передает данные ADC1, затем данные ADC2, затем данные ADC3, и так далее. Режим DMA 1 используется только в режиме simultaneous triple mode.
Пример:
Regular simultaneous triple mode: генерируются 3 последовательных запроса DMA (по одному на каждый преобразованный элемент данных).
1-й запрос: ADC_CDR[31:0] = ADC1_DR[15:0] 2-й запрос: ADC_CDR[31:0] = ADC2_DR[15:0] 3-й запрос: ADC_CDR[31:0] = ADC3_DR[15:0] 4-й запрос: ADC_CDR[31:0] = ADC1_DR[15:0]
– DMA mode 2: на каждом запросе DMA (доступны два элемента данных) 2 полуслова (2 по 2 байта) представляют два преобразованных ADC элемента данных, передаваемых как слово (4 байта).
В режиме Dual ADC, данные обоих ADC2 и ADC1 передаются на первом запросе (ADC2 данные занимают старшее полуслово, и данные ADC1 занимают младшее полуслово), и так далее.
В режиме Triple ADC генерируются три запроса DMA. На первом запросе передаются данные обоих ADC2 и ADC1 (ADC2 данные занимают старшее полуслово, и данные ADC1 занимают младшее полуслово). На втором запросе предаются данные обоих ADC1 и ADC3 (ADC1 данные занимают старшее полуслово, и данные ADC3 занимают младшее полуслово). На третьем запросе передаются данные обоих ADC3 и ADC2 (ADC3 данные занимают старшее полуслово, и данные ADC2 занимают младшее полуслово), и так далее.
DMA mode 2 используется в interleaved mode и в regular simultaneous mode (только режим Dual ADC).
Пример:
a) Interleaved dual mode: запрос DMA генерируется каждый раз, когда доступны 2 элемента данных:
1-й запрос: ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0] 2-й запрос: ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
b) Interleaved triple mode: запрос DMA генерируется каждый раз, когда доступны 2 элемента данных:
1-й запрос: ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0] 2-й запрос: ADC_CDR[31:0] = ADC1_DR[15:0] | ADC3_DR[15:0] 3-й запрос: ADC_CDR[31:0] = ADC3_DR[15:0] | ADC2_DR[15:0] 4-й запрос: ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0]
– DMA mode 3: этот режим подобен DMA mode 2. Единственное различие состоит в том, что в каждом запросе DMA (доступны два элемента данных) два байта, представляющие два элемента данных, преобразованных ADC, передаются в виде полуслова. Порядок передачи данных аналогичен порядку передачи данных в режиме DMA 2.
DMA mode 3 используется в interleaved mode с разрядностями 6 и 8 бит (dual и triple mode).
Пример:
a) Interleaved dual mode: запрос DMA генерируется каждый раз, когда доступны 2 элемента данных.
1-й запрос: ADC_CDR[15:0] = ADC2_DR[7:0] | ADC1_DR[7:0] 2-й запрос: ADC_CDR[15:0] = ADC2_DR[7:0] | ADC1_DR[7:0]
b) Interleaved triple mode: запрос DMA генерируется каждый раз, когда доступны 2 элемента данных.
1-й запрос: ADC_CDR[15:0] = ADC2_DR[7:0] | ADC1_DR[7:0] 2-й запрос: ADC_CDR[15:0] = ADC1_DR[7:0] | ADC3_DR[7:0] 3-й запрос: ADC_CDR[15:0] = ADC3_DR[7:0] | ADC2_DR[7:0] 4-й запрос: ADC_CDR[15:0] = ADC2_DR[7:0] | ADC1_DR[7:0]
Детектирование overrun: если было определено overrun на одном из задействованных ADC (ADC1 и ADC2 в режимах dual и triple, ADC3 только в режиме triple), запросы DMA больше не выдаются, чтобы гарантировать, что все данные, переданные в RAM, достоверны. Может случиться так, что бит EOC, соответствующий одному из ADC, останется установленным, потому что регистр данных этого ADC содержит достоверные данные.
Injected simultaneous mode. Этот режим преобразовывает инжектированную группу каналов. Сигнал внешнего триггера приходит от мультиплексора группы injected ADC1 (выбирается битами JEXTSEL[3:0] в регистре ADC1_CR2). Simultaneous trigger предоставлен для ADC2 и ADC3.
Примечание: не следует преобразовывать один и тот же канал на двух/трех ADC (при преобразовании одного и того же канала нет перекрывающихся периодов дискретизации для двух/трех ADC).
В simultaneous mode один должен преобразовать последовательности с одинаковой длиной, или гарантировать, чтобы интервалы между триггерами были больше, чем 2 последовательности (режим Dual ADC) / 3 последовательности (режим Triple ADC). Иначе ADC с более короткой последовательностью может перезапуститься, пока ADC с более длинной последовательностью завершает предыдущие преобразования.
Regular преобразования можно выполнить на одном или на всех ADC. В этом случае они независимы друг от друга и прерываются при возникновении injected события. Они возобновляются в конце injected-группы преобразования.
Режим Dual ADC. На событии завершения преобразования ADC1 или ADC2:
• Преобразованные данные сохраняются в регистры ADC_JDRx каждого интерфейса ADC. • Генерируется прерывание JEOC (если это разрешено на одном из двух интерфейсов ADC), когда были преобразованы injected-каналы ADC1/ADC2.
Режим Triple ADC. На событии завершения преобразования ADC1, ADC2 или ADC3:
• Преобразованные данные сохраняются в регистрах ADC_JDRx каждого интерфейса ADC. • Генерируется прерывание JEOC (если это разрешено на одном из трех интерфейсов ADC), когда были преобразованы injected-каналы ADC1/ADC2/ADC3.
Этот режим выполняется на regular группе каналов. Сигнал внешнего триггера поступает из мультиплексора группы regular ADC1 (выбирается битами EXTSEL[3:0] в регистре ADC1_CR2). Simultaneous триггер предоставляется для ADC2 и ADC3.
Примечание: не преобразуйте один и тот же канал на двух/трех ADC (при преобразовании одного и того же канала нет перекрывающихся периодов дискретизации для двух/трех ADC).
В режиме regular simultaneous необходимо преобразовать последовательности с одинаковой длиной, или гарантировать, чтобы интервалы между триггерами были больше, чем 2 последовательности (режим Dual ADC) / 3 последовательности (режим Triple ADC). Иначе ADC с более короткой последовательностью может перезапуститься, пока ADC с более длинной последовательностью завершает предыдущие преобразования.
Injected-преобразования должны быть запрещены.
Режим Dual ADC. На событии окончания преобразования ADC1 или ADC2:
• Генерируется 32-битный запрос DMA (если биты DMA[1:0] в регистре ADC_CCR равны 0b10). Этот запрос перемещает данные, преобразованные ADC2, сохраненные в старшем полуслове 32-битного регистра ADC_CDR, в SRAM, и затем преобразованные данные ADC1, сохраненные в младшем полуслове ADC_CDR, в SRAM. • Генерируется прерывание EOC (если это разрешено на одном из двух интерфейсов ADC), когда были преобразованы все regular каналы ADC1/ADC2.
Режим Triple ADC. На событии окончания преобразования ADC1, ADC2 или ADC3:
• Генерируется три 32-битных запроса передачи DMA (если биты DMA[1:0] в регистре ADC_CCR равны 0b01). Происходят 3 перемещения данных из 32-битного регистра ADC_CDR в SRAM: сначала преобразованные данные ADC1, затем преобразованные данные ADC2, и затем преобразованные данные ADC3. Процесс повторяется для каждых трех новых преобразований. • Генерируется прерывание EOC (если это разрешено на одном из трех интерфейсов ADC), когда были преобразованы все regular-каналы ADC1/ADC2/ADC3.
Этот режим может быть запущен только на группе regular (обычно один канал). Сигнал внешнего триггера поступает из мультиплексора regular канала ADC1.
Режим Dual ADC. После внешнего триггера происходит следующее:
• ADC1 стартует немедленно. • ADC2 стартует после задержки из нескольких тактов ADC.
Минимальная задержка, которая разделяет 2 преобразования в режиме interleaved, конфигурируется битами DELAY в регистре ADC_CCR. Однако ADC не может запустить преобразование, если комплементарный ADC все еще оцифровывает свой вход (только один ADC может делать выборку входного сигала в определенное время). В этом случае задержка получается равной времени выборки + 2 такта ADC. Например, если DELAY = 5 тактовых циклов, и выборка занимает 15 тактов на обоих ADC, то 17 тактов будут разделять преобразования ADC1 и ADC2.
Если бит CONT установлен на обоих ADC1 и ADC2, то выбранные regular-каналы обоих ADC непрерывно преобразовываются.
Примечание: если последовательность преобразования прервана (например, когда произошло завершение передачи DMA), multi-ADC секвенсор должен быть сброшен путем предварительного конфигурирования в режиме independent (биты DUAL[4:0] = 00000) перед повторным программированием режима interleaved.
После прерывания EOC, сгенерированного ADC2 (если оно разрешено битом EOCIE), генерируется запрос 32-битной передачи DMA (если биты DMA[1:0] в регистре ADC_CCR равны 0b10). Этот запрос сначала передает преобразованные ADC2 данные, сохраненные в старшей половине 32-битного регистра ADC_CDR, в SRAM, затем передает преобразованные ADC1 данные, сохраненные в младшей половине этого регистра, в SRAM.
Рис. 56. Interleaved mode на канале 1 в режиме continuous conversion: dual ADC mode.
Режим Triple ADC. После поступления сигнала от внешнего триггера:
• Немедленно стартует ADC1, и • ADC2 стартует после задержки из нескольких тактов ADC, • ADC3 стартует после задержки из нескольких тактов ADC относительно преобразования ADC2.
Минимальная задержка, которая разделяет 2 преобразования в interleaved mode конфигурируется битами DELAY регистра ADC_CCR. Однако ADC не может запустить преобразование, если комплементарный ADC все еще оцифровывает свой вход (только один ADC может делать выборку входного сигнала в любой момент времени). В этом случае задержка становится равной времени выборки + 2 такта ADC. Например, если DELAY = 5 тактов и выборка занимает 15 тактов на трех ADC, то преобразования на ADC1, ADC2 и ADC3 будут разделяться 17 тактами).
Если бит CONT установлен на ADC1, ADC2 и ADC3, то выбранные regular-каналы всех ADC непрерывно преобразуют сигнал.
Примечание: если последовательность преобразования прервана (например, когда произойдет окончание передачи DMA), то секвенсор multi-ADC должен быть сброшен путем предварительного конфигурирования его в independent-режиме (биты DUAL[4:0] = 00000) перед повторным программированием interleaved-режима.
В этом режиме запрос DMA генерируется каждый раз, когда доступно 2 элемента данных (если биты DMA[1:0] регистра ADC_CCR равны 0b10). Запрос сначала передает в SRAM первые преобразованные данные, сохраненные в младшем полуслове 32-битного регистра ADC_CDR, затем передает в SRAM вторые преобразованные данные, сохраненные в старшем полуслове ADC_CDR. Последовательность следующая:
1-й запрос: ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0] 2-й запрос: ADC_CDR[31:0] = ADC1_DR[15:0] | ADC3_DR[15:0] 3-й запрос: ADC_CDR[31:0] = ADC3_DR[15:0] | ADC2_DR[15:0] 4-й запрос: ADC_CDR[31:0] = ADC2_DR[15:0] | ADC1_DR[15:0], ...
Рис. 57. Interleaved mode на 1 канале в continuous conversion mode: triple ADC mode.
Режим alternate trigger. Этот режим может быть запущен только на injected-группе. Сигнал внешнего триггера приходит от мультиплексора injected-группы ADC1.
Примечание: regular преобразование может быть разрешено на одном или всех ADC. В этом случае regular преобразования не зависят друг от друга. Преобразование regular прерывается, когда ADC должен выполнить injected преобразование. Преобразование regular возобновится, когда injected преобразование завершится.
Если последовательность преобразования была прервана (например, когда произойдет окончание передачи DMA), то секвенсор multi-ADC должен быть сброшен путем предварительного конфигурирования его в independent-режиме (биты DUAL[4:0] = 00000) перед повторным программированием interleaved-режима.
Интервал времени между двумя событиями триггера должен быть больше или равен 1 периоду тактов ADC. Минимальный интервал времени между двумя событиями триггера, которые запускают преобразования на том же самом ADC такое же, как в single ADC mode.
Режим Dual ADC. Алгоритм следующий:
• Когда срабатывает 1-й триггер, преобразуются все injected каналы ADC1 в группе • Когда срабатывает 2-й триггер, преобразуются все injected каналы ADC2 в группе • и так далее.
Прерывание JEOC, если разрешено, генерируется после того, как преобразуются все injected каналы ADC1 в группе.
Прерывание JEOC, если разрешено, генерируется после того, как преобразуются все injected каналы ADC2 в группе.
Если сработает другой внешний триггер после преобразования всех injected-каналов в группе, то процесс alternate-триггера перезапустится преобразованием injected каналов ADC1 в группе.
Рис. 58. Триггер alternate: injected группа каждого ADC.
Если для обоих ADC1 и ADC2 разрешен прерывистый инжектированный режим (injected discontinuous mode):
• Когда сработает 1-й триггер, преобразуется первый injected канал ADC1 • Когда сработает 2-й триггер, преобразуется первый injected канал ADC2 • и так далее.
Прерывание JEOC, если разрешено, генерируется после того, как преобразуются все injected каналы ADC1 в группе.
Прерывание JEOC, если разрешено, генерируется после того, как преобразуются все injected каналы ADC2 в группе.
Если сработает другой внешний триггер после преобразования всех injected-каналов в группе, то процесс alternate-триггера перезапустится.
Рис. 59. Триггер alternate: 4 injected канала (каждого ADC) в discontinuous mode.
Режим Triple ADC. Алгоритм следующий:
• Когда срабатывает 1-й триггер, преобразуются все injected каналы ADC1 в группе • Когда срабатывает 2-й триггер, преобразуются все injected каналы ADC2 в группе • Когда срабатывает 3-й триггер, преобразуются все injected каналы ADC3 в группе • и так далее.
Прерывание JEOC, если разрешено, генерируется после того, как преобразуются все injected каналы ADC1 в группе.
Прерывание JEOC, если разрешено, генерируется после того, как преобразуются все injected каналы ADC2 в группе.
Прерывание JEOC, если разрешено, генерируется после того, как преобразуются все injected каналы ADC3 в группе.
Если сработает другой внешний триггер после преобразования всех injected-каналов в группе, то процесс alternate-триггера перезапустится преобразованием injected каналов ADC1 в группе.
Рис. 60. Триггер alternate: группа injected каждого ADC.
[Комбинированный режим regular/injected simultaneous]
Есть возможность прервать одновременное (simultaneous) преобразование regular-группы, чтобы запустить simultaneous преобразование injected-группы.
Примечание: в комбинированном режиме regular/injected simultaneous необходимо преобразовать последовательность с той же длиной, или гарантировать, что интервал между триггерами больше, чем большое время преобразования 2 последовательностей (режим Dual ADC) / 3 последовательностей (режим Triple ADC). Иначе ADC с самой короткой последовательностью может перезапуститься, когда ADC с самой длинной последовательностью завершает предыдущие преобразования.
[Комбинированный режим regular simultaneous + alternate триггер]
Есть возможность прервать simultaneous-преобразование regular группы для запуска преобразования alternate-триггера группы injected. Рис. 61 показывает поведение, когда alternate прерывает преобразование simultaneous regular.
Рис. 61. Alternate + regular simultaneous.
Преобразование injected alternate немедленно запускается после injected-события. Если regular преобразование уже работает, то чтобы гарантировать синхронизацию после injected преобразования, преобразование regular всех (master/slave) ADC останавливается и синхронно возобновляется по окончании injected-преобразования.
Примечание: в комбинированном режиме regular simultaneous + alternate триггер необходимо преобразовывать последовательности одинаковой длины, или гарантировать, что интервал между триггерами больше, чем длинное время преобразования 2 последовательностей (режим Dual ADC) / 3 последовательностей (режим Triple ADC). Иначе ADC с самой короткой последовательностью может перезапуститься, когда ADC с самой длинной последовательностью завершает предыдущие преобразования.
Если последовательность преобразования была прервана (например, когда произойдет окончание передачи DMA), то секвенсор multi-ADC должен быть сброшен путем предварительного конфигурирования его в independent-режиме (биты DUAL[4:0] = 00000) перед повторным программированием interleaved-режима.
Если триггер сработает во время преобразования injected, которое прервало преобразование regular, то триггер игнорируется. Рис. 62 показывает поведение для этого случая (2-й триггер игнорируется).
Рис. 62. Случай, когда сработал триггер во время преобразования injected.
[Датчик температуры]
Датчик температуры можно использовать для измерения температуры окружающей среды (ambient temperature, TA) микроконтроллера. Датчик температуры позволяет измерять значения от –40 до 125 °C с точностью ±1.5 °C.
• На чипах STM32F40x и STM32F41x датчик температуры подключен внутри кристалла к каналу ADC1_IN16, который используется для преобразования напряжения выхода датчика в цифровое значение. • На чипах STM32F42x и STM32F43x датчик температуры подключен внутри кристалла к тому же каналу, что и VBAT: ADC1_IN18. Таким образом, ADC1_IN18 используется либо для оцифровки выхода датчика температуры, либо VBAT. Одновременно можно использовать либо датчик температуры, либо VBAT, но не одновременно. Когда одновременно установлено преобразование и датчика температуры, и VBAT, то оцифровывается только VBAT.
Рис. 63 показывает блок-схему датчика температуры.
Рис. 63. Блок-схема датчика температуры и канала VREFINT.
Примечание (1). VSENSE это вход ADC1_IN16 для микроконтроллеров STM23F40x и STM32F41x, и ADC1_IN18 для микроконтроллеров STM32F42x и STM32F43x.
Когда датчик температуры не используется, его можно перевести в режим отключения (power down mode).
Примечание: бит TSVREFE должен быть установлен, чтобы разрешить преобразование двух внутренних каналов: ADC1_IN16 или ADC1_IN18 (датчик температуры) и ADC1_IN17 (VREFINT).
Чтение температуры. Для использования датчика:
1. Выберите входной канал ADC1_IN16 или ADC1_IN18 (в зависимости от используемого микроконтроллера). 2. Выберите время выборки больше, чем минимальное время выборки, указанное в даташите. 3. Установите бит TSVREFE в регистре ADC_CCR, чтобы вывести датчик температуры из режима power down. 4. Запустите преобразование ADC установкой бита SWSTART (или от внешнего триггера). 5. Прочитайте данные VSENSE в регистре данных ADC. 6. Вычислите температуру по следующей формуле:
Температура (°C) = {(VSENSE – V25) / Avg_Slope} + 25
Здесь V25 равно значению VSENSE для 25° C, Avg_Slope равно среднему наклону температуры по отношению к кривой VSENSE (в единицах mV/°C или mkV/°C). См. секцию электрических характеристик даташита для получения актуальных значений V25 и Avg_Slope.
Примечание: у этого датчика есть время запуска (startup time) после выхода его из режима power down перед тем, как он может выводить VSENSE с корректным уровнем. У ADC также есть время старта после power-on, поэтому для минимизации задержки биты ADON и TSVREFE должны быть установлены одновременно.
Напряжение на выходе датчика температуры линейно меняется с изменением температуры. Смещение этой линейной функции зависит от каждого чипа из-за изменений условий техпроцесса (один чип от другого может отличаться на смещение до 45°C).
Внутренний датчик температуры больше подходит для приложений, которые детектируют изменения температуры вместо регистрации абсолютных температур. Если требуется точное измерение температуры, то должен использоваться внешний датчик температуры.
[Мониторинг заряда батареи]
Бит VBATE в регистре ADC_CCR используется для переключения к измерению напряжения батареи. Поскольку напряжение VBAT может быть выше напряжения VDDA, то для гарантии правильной работы ADC ножка VBAT подключена внутри кристалла к мостовому делителю.
Когда установлен бит VBATE мост автоматически разрешается для подключения:
• VBAT/2 для входного канала ADC1_IN18 на кристаллах STM32F40xx и STM32F41xx. • VBAT/4 для входного канала ADC1_IN18 на кристаллах STM32F42xx и STM32F43xx.
Примечание: на кристаллах STM32F42xx и STM32F43xx сигналы VBAT и датчика температуры подключены к одному и тому же внутреннему каналу ADC (ADC1_IN18). Одновременно можно измерять только один из сигналов, VBAT или датчик температуры. Если оба этих сигнала выбраны одновременно, то будет измеряться только VBAT.
[Прерывания ADC]
Может быть сгенерировано прерывание по окончанию преобразования групп regular и injected, когда установлен бит статуса analog watchdog, и когда установлен бит статуса overrun. Для гибкости доступны отдельные биты для разрешения прерывания от этих событий.
В регистре ADC_SR имеются 2 других флага, но с ними не связаны прерывания:
• JSTRT (старт преобразования для каналов группы injected). • STRT (старт преобразования для каналов группы regular).
Таблица 70. Прерывания ADC.
Событие прерывания
Флаг события
Бит разрешения
Окончание преобразования группы regular
EOC
EOCIE
Окончание преобразования группы injected
JEOC
JEOCIE
Установился бит статуса Analog Watchdog
AWD
AWDIE
Overrun (программа не успела прочитать данные)
OVR
OVRIE
[Регистры ADC]
Карта памяти регистров ADC. Регистры ADC1, ADC2, ADC3 микроконтроллеров STM32F4xx находятся в диапазоне абсолютных адресов 0x40012000 .. 0x400123FF.
[Рис. 19 из stm32f429zi.pdf]
Таблица 71. Глобальная карта регистров ADC.
Смещение
Регистр
0x000 - 0x04C
ADC1
0x050 - 0x0FC
зарезервировано
0x100 - 0x14C
ADC2
0x118 - 0x1FC
зарезервировано
0x200 - 0x24C
ADC3
0x250 - 0x2FC
зарезервировано
0x300 - 0x308
Общие регистры
Таблица 72. Карта регистров ADC и значения после сброса для каждого ADC.
Таблица 73. Карта регистров ADC и значения после сброса (общие регистры ADC).
В описании функций регистров используются следующие сокращения:
read/write (rw) Программа может читать и записывать эти биты.
read-only (r) Программа может только читать эти биты.
write-only (w) Программа может только записывать в этот бит. Чтение бита вернет значение сброса.
read/clear (rc_w1) Программа может прочитать бит, а также сбросить его путем записью 1. Запись 0 не дает никакого эффекта.
read/clear (rc_w0) Программа может прочитать бит, а также сбросить его путем записью 0. Запись 1 не дает никакого эффекта.
read/clear by read (rc_r) Программа может прочитать этот бит. Чтение этого бита автоматически сбросит его в 0. Запись 0 в бит не дает никакого эффекта.
read/set (rs) Программа может прочитать, а также установить этот бит. Запись 0 в бит не дает никакого эффекта.
read-only write trigger (rt_w) Программа может прочитать этот бит. Запись 0 или 1 вызовет появление события (триггер), но не окажет никакого влияния на значение бита.
toggle (t) Программа может только переключить этот бит записью 1. Запись 0 не дает никакого эффекта.
Reserved (Res.) Зарезервированный бит, его значение должно сохраняться на значении сброса.
Регистры периферийного устройства ADC должны записываться на уровне полного слова (32 бита). Доступ на чтение может осуществляться побайтно (8 бит), на половине слова (16 бит) или как слово (32 бита).
Смещение адреса 0x00, значение после сброса 0x00000000.
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
зарезервировано
OVR rc_wo
STRT rc_w0
JSTRT rc_w0
JEOC rc_w0
EOC rc_w0
AWD rc_w0
Биты 31:6 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
OVR: Overrun. Этот бит устанавливается аппаратно, когда была потеря данных (либо в single mode, либо в dual/triple mode). Бит очищается программно. Детектирование overrun разрешено только когда DMA = 1 или EOCS = 1.
0: не было overrun. 1: произошел overrun.
STRT: флаг запуска regular-канала. Этот бит устанавливается аппаратно, когда запускается преобразование regular-канала. Бит очищается программно.
0: не было запуска преобразования regular-канала. 1: произошел запуск преобразования regular-канала.
JSTRT: флаг запуска injected-канала. Этот бит устанавливается аппаратно, когда запускается преобразование группы injected. Бит очищается программно.
0: не было запуска преобразования группы injected. 1: произошел запуск преобразования группы injected.
JEOC: завершение преобразования канала injected. Этот бит устанавливается аппаратно, когда завершается преобразование всех каналов группы injected. Бит очищается программно.
0: преобразование не завершено. 1: преобразование завершено.
EOC: завершение преобразования канала regular. Этот бит устанавливается аппаратно по окончании преобразования группы каналов regular. Бит очищается программно, или аппаратно после чтения регистра ADC_DR.
0: преобразование не завершено (EOCS=0), или не завершена последовательность преобразований (EOCS=1). 1: преобразование завершено (EOCS=0), или завершена последовательность преобразований (EOCS=1).
AWD: флаг Analog Watchdog. Этот бит установится аппаратно, когда преобразованное напряжение пересекает предельные значения, запрограммированные в регистрах ADC_LTR и ADC_HTR. Бит очищается программно.
0: не было события analog watchdog. 1: произошло событие analog watchdog.
AWDEN: разрешение сторожевика аналогового сигнала (Analog WatchDog Enable) каналов regular. Этот бит устанавливается и очищается программно.
0: Analog Watchdog на regular-каналах запрещен. 1: Analog Watchdog на regular-каналах разрешен.
JAWDEN: разрешение сторожевика аналогового сигнала (Analog WatchDog Enable) каналов injected. Этот бит устанавливается и очищается программно.
0: Analog Watchdog на injected-каналах запрещен. 1: Analog Watchdog на injected-каналах разрешен.
Биты 21:16 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
DISCNUM[2:0]: количество преобразуемых каналов прерывистого режима (discontinuous mode). Эти биты записываются программой, чтобы определить количество преобразуемых regular-каналов в прерывистом режиме, после получения сигнала от внешнего триггера.
000: 1 канал. 001: 2 канала. ...
111: 8 каналов.
JDISCEN: прерывистый режим (discontinuous mode) на injected-каналах. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить прерывистый режим группы injected-каналов.
0: прерывистый режим на injected-каналах запрещен. 1: прерывистый режим на injected-каналах разрешен.
DISCEN: прерывистый режим (discontinuous mode) на regular-каналах. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить прерывистый режим на regular-каналах.
0: прерывистый режим на regular-каналах запрещен. 1: прерывистый режим на regular-каналах разрешен.
JAUTO: автоматическое преобразование injected-группы. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить автоматическое преобразование группы injected после преобразования группы regular.
AWDSGL: разрешение сторожевика аналогового сигнала (analog watchdog) на одном канале в режиме сканирования. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить analog watchdog канала, идентифицированного битами AWDCH[4:0].
0: analog watchdog разрешен на всех каналах. 1: analog watchdog разрешен на одном канале.
SCAN: режим сканирования. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить режим сканирования. В режиме сканирования преобразуются входы, выбранные через регистры ADC_SQRx или ADC_JSQRx.
0: режим сканирования запрещен. 1: режим сканирования разрешен.
Примечание: прерывание EOC генерируется, если установлен бит EOCIE:
– по окончании преобразования последовательности каждой группы regular, если бит EOCS сброшен в 0. – по окончании преобразования каждого regular-канала, если бит EOCS установлен в 1.
Прерывание JEOC генерируется только по окончании преобразования последнего канала, если установлен бит JEOCIE.
JEOCIE: разрешение прерывания для injected-каналов. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить прерывание по окончанию преобразования для injected-каналов.
0: прерывание JEOC запрещено. 1: прерывание JEOC разрешено. Будет сгенерировано прерывание, когда установлен бит JEOC.
AWDIE: разрешение прерывания Analog Watchdog. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить прерывание сторожевика аналогового сигнала.
0: прерывание analog watchdog запрещено. 1: прерывание analog watchdog разрешено.
EOCIE: разрешение прерывания по окончанию преобразования (End Of Conversion, EOC). Этот бит устанавливается и очищается программой, чтобы разрешить/запретить прерывание EOC.
0: EOC прерывание EOC запрещено. 1: EOC прерывание EOC разрешено. Будет сгенерировано прерывание, когда установлен бит EOC.
AWDCH[4:0]: выбор канала для Analog Watchdog. Эти биты устанавливаются и очищаются программой. Они выбирают входной канал, который обслуживает analog watchdog.
00000: канал 0 ADC. 00001: канал 1 ADC. ... 01111: канал 15 ADC. 10000: канал 16 ADC. 10001: канал 17 ADC. 10010: канал 18 ADC.
Смещение адреса 0x08, значение после сброса 0x00000000.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезерв.
SWSTART rw
EXTEN rw
EXTSEL[3:0] rw
зарезерв.
JSWSTART rw
JEXTEN rw
JEXTSEL[3:0] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезервировано
ALIGN rw
EOCS rw
DDS rw
DMA rw
зарезервировано
CONT rw
ADON rw
Бит 31 зарезервирован, его значение должно сохраняться на значении сброса (0).
SWSTART: запуск преобразования на regular-каналах. Этот бит устанавливается программно для старта преобразования, и очищается аппаратно, как только преобразование запустилось.
0: состояние сброса. 1: запускает преобразование regular-каналов.
Примечание: этот бит можно установить только когда ADON = 1, иначе никакое преобразование не запустится.
EXTEN: разрешение внешнего триггера для regular-каналов. Эти биты устанавливаются и сбрасываются программой для выбора полярности внешнего триггера и разрешения триггера группы regular.
00: детектирование триггера запрещено. 01: триггер срабатывает по фронту нарастания. 10: триггер срабатывает по срезу спада. 11: триггер срабатывает по обоим перепадам.
EXTSEL[3:0]: выбор внешнего события для группы regular. Биты выбирают внешнее событие, используемое как триггер для запуска преобразования группы regular:
Бит 23 зарезервирован, его значение должно сохраняться на значении сброса (0).
JSWSTART: запуск преобразования injected-каналов. Этот бит устанавливается программно и сбрасывается аппаратно, как только запустится преобразование.
0: состояние сброса. 1: запускает преобразование injected-каналов.
Примечание: этот бит можно установить только когда ADON = 1, иначе никакое преобразование не запустится.
JEXTEN: разрешение внешнего триггера для injected-каналов. Эти биты устанавливаются и сбрасываются программой для выбора полярности внешнего триггера и разрешения триггера группы injected.
00: детектирование триггера запрещено. 01: триггер срабатывает по фронту нарастания. 10: триггер срабатывает по срезу спада. 11: триггер срабатывает по обоим перепадам.
JEXTSEL[3:0]: выбор внешнего события для группы injected. Биты выбирают внешнее событие, используемое как триггер для запуска преобразования группы injected:
Биты 15:12 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
ALIGN: выравнивание выходных данных. Этот бит устанавливается и очищается программой, см. рисунки 48 и 49.
0: выравнивание вправо. 1: выравнивание влево.
EOCS: выбор завершения преобразования (End Of Conversion Selection). Этот бит устанавливается и очищается программой.
0: бит EOC устанавливается по окончании каждой последовательности regular-преобразований. Детектирование overrun разрешено только если DMA=1. 1: бит EOC установится по окончании каждого regular-преобразования. Детектирование overrun разрешено.
DDS: выбор запрета DMA (только для режима single ADC). Этот бит устанавливается и очищается программой.
0: не выдается новый запрос DMA после последней передачи (как сконфигурировано в контроллера DMA). 1: запросы DMA выдаются, пока преобразуются данные, и пока DMA=1.
DMA: режим прямого доступа к памяти (для режима single ADC). Этот бит устанавливается и очищается программой. Для получения подробной информации см. описание контролера DMA в даташите.
0: режим DMA запрещен. 1: режим DMA разрешен.
Биты 7:2 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
CONT: непрерывное преобразование (continuous conversion). Этот бит устанавливается и очищается программой. Если он установлен, то преобразования работают до тех пор, пока этот бит не будет очищен.
0: режим одиночного преобразования (single conversion mode). 1: режим непрерывного преобразования (continuous conversion mode).
ADON: включение/выключение аналого-цифрового преобразователя. Этот бит устанавливается и очищается программой.
0: запрещает преобразование ADC и переводит аппаратуру ADC в режим выключения (power down mode). 1: разрешает работу ADC.
Смещение адреса 0x0C, значение после сброса 0x00000000.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
SMP18[2:0] rw
SMP17[2:0] rw
SMP16[2:0] rw
SMP15[2:1] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
SMP15[0] rw
SMP14[2:0] rw
SMP13[2:0] rw
SMP12[2:0] rw
SMP11[2:0] rw
SMP10[2:0] rw
Биты 31:27 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
SMPx[2:0]: установка времени выборки (sampling time) канала x. Эти биты записываются программой для выбора времени оцифровки индивидуально для каждого канала. Во время циклов выборки биты выбора канала должны оставаться неизменными.
Смещение адреса 0x10, значение после сброса 0x00000000.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезерв.
SMP9[2:0] rw
SMP8[2:0] rw
SMP7[2:0] rw
SMP6[2:0] rw
SMP5[2:1] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
SMP5[0] rw
SMP4[2:0] rw
SMP3[2:0] rw
SMP2[2:0] rw
SMP1[2:0] rw
SMP0[2:0] rw
Биты 31:30 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
SMPx[2:0]: установка времени выборки (sampling time) канала x. Эти биты записываются программой для выбора времени оцифровки индивидуально для каждого канала. Во время циклов выборки биты выбора канала должны оставаться неизменными.
Здесь x может меняться от 1 до 4, давая соответственно имена регистров ADC_JOFR1, ADC_JOFR2, ADC_JOFR3, ADC_JOFR4.
Смещение адреса 0x14 .. 0x20, значение после сброса 0x00000000.
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
зарезервировано
JOFFSETx[11:0] rw
Биты 31:12 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
JOFFSETx[11:0]: смещение данных для injected канала x. Эти биты записываются программой, чтобы определить смещение, вычитаемое из сырых преобразованных данных, когда преобразуются injected-каналы. Результат преобразования может быть прочитан в регистрах ADC_JDRx.
Смещение адреса 0x24, значение после сброса 0x00000FFF.
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
зарезервировано
HT[11:0] rw
Биты 31:12 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
HT[11:0]: верхний порог сторожевика аналогового сигнала (analog watchdog). Эти биты записываются программно, чтобы определить верхний порог уровня для analog watchdog.
Программа может записать в этот регистр, когда выполняется операция преобразования ADC. Запрограммированное значение вступит в силу, когда завершится следующее преобразование. Запись в этот регистр выполнится с задержкой записи, которая может создать неопределенность для эффективного времени преобразования, на котором значение было записано.
Смещение адреса 0x28, значение после сброса 0x00000000.
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
зарезервировано
LT[11:0] rw
Биты 31:12 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
LT[11:0]: нижний порог сторожевика аналогового сигнала (analog watchdog). Эти биты записываются программно, чтобы определить нижний порог уровня для analog watchdog.
Программа может записать в этот регистр, когда выполняется операция преобразования ADC. Запрограммированное значение вступит в силу, когда завершится следующее преобразование. Запись в этот регистр выполнится с задержкой записи, которая может создать неопределенность для эффективного времени преобразования, на котором значение было записано.
Смещение адреса 0x2C, значение после сброса 0x00000000.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
L[3:0] rw
SQ16[4:1] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
SQ16[0] rw
SQ15[4:0] rw
SQ14[4:0] rw
SQ13[4:0] rw
Биты 31:24 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
L[3:0]: длина последовательности regular каналов. Эти биты записываются программой, чтобы определить общее количество преобразований в последовательности преобразований каналов regular.
SQ16[4:0]: 16-е преобразование в regular-последовательности. Эти биты записываются программой в номер канала (0..18), назначенный в качестве 16-го в последовательности преобразования.
SQ15[4:0]: 15-е преобразование в regular-последовательности.
SQ14[4:0]: 14-е преобразование в regular-последовательности.
SQ13[4:0]: 13-е преобразование в regular-последовательности.
Смещение адреса 0x30, значение после сброса 0x00000000.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
SQ12[4:0] rw
SQ11[4:0] rw
SQ10[4:1] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
SQ10[0] rw
SQ9[4:0] rw
SQ8[4:0] rw
SQ7[4:0] rw
Биты 31:30 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
SQ12[4:0]: 12-е преобразование в regular-последовательности. Эти биты записываются программой в номер канала (0..18), назначенный в качестве 12-го в последовательности преобразования.
SQ11[4:0]: 11-е преобразование в regular-последовательности.
SQ10[4:0]: 10-е преобразование в regular-последовательности.
SQ9[4:0]: 9-е преобразование в regular-последовательности.
SQ8[4:0]: 8-е преобразование в regular-последовательности.
SQ7[4:0]: 7-е преобразование в regular-последовательности.
Смещение адреса 0x34, значение после сброса 0x00000000.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
SQ6[4:0] rw
SQ5[4:0] rw
SQ4[4:1] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
SQ4[0] rw
SQ3[4:0] rw
SQ2[4:0] rw
SQ1[4:0] rw
Биты 31:30 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
SQ6[4:0]: 6-е преобразование в regular-последовательности. Эти биты записываются программой в номер канала (0..18), назначенный в качестве 6-го в последовательности преобразования.
SQ5[4:0]: 5-е преобразование в regular-последовательности.
SQ4[4:0]: 4-е преобразование в regular-последовательности.
SQ3[4:0]: 3-е преобразование в regular-последовательности.
SQ2[4:0]: 2-е преобразование в regular-последовательности.
SQ1[4:0]: 1-е преобразование в regular-последовательности.
Смещение адреса 0x38, значение после сброса 0x00000000.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
JL[1:0] rw
JSQ4[4:1] rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
JSQ4[0] rw
JSQ3[4:0] rw
JSQ2[4:0] rw
JSQ1[4:0] rw
Биты 31:22 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
JL[1:0]: длина injected-последовательности. Эти биты записываются программой, чтобы определить общее количество преобразований в последовательности преобразований injected канала.
JSQ4[4:0]: 4-е преобразование в injected-последовательности (когда JL[1:0]=3, см. примечание далее). В эти биты программа записывает номер канала (0..18), назначенный в качестве 4-го в последовательности преобразований.
JSQ3[4:0]: 3-е преобразование в injected-последовательности (когда JL[1:0]=3, см. примечание далее).
JSQ2[4:0]: 2-е преобразование в injected-последовательности (когда JL[1:0]=3, см. примечание далее).
JSQ1[4:0]: 1-е преобразование в injected-последовательности (когда JL[1:0]=3, см. примечание далее).
Примечание: когда JL[1:0]=3 (4 injected-преобразования в секвенсоре), ADC преобразует каналы в следующем порядке: JSQ1[4:0], JSQ2[4:0], JSQ3[4:0], JSQ4[4:0]. Когда JL=2 (3 injected-преобразования в секвенсоре), ADC преобразует каналы в следующем порядке: JSQ2[4:0], JSQ3[4:0], JSQ4[4:0]. Когда JL=1 (2 injected-преобразования в секвенсоре), ADC преобразует каналы, начиная с JSQ3[4:0], и затем JSQ4[4:0]. Когда JL=0 (1 injected-преобразование в секвенсоре), ADC преобразует только канал JSQ4[4:0].
Здесь x может меняться от 1 до 4, давая соответственно имена регистров ADC_JDR1, .., ADC_JDR4.
Смещение адреса 0x3C .. 0x48, значение после сброса 0x00000000.
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
JDATA[15:0] r
Биты 31:16 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
JDATA[15:0]: данные injected. Эти биты только для чтения, они содержат результат преобразования injected-канала x. Данные могут получать правое или левое выравнивание, как показано на рисунках 48 и 49.
Смещение адреса 0x4C, значение после сброса 0x00000000.
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[15:0] r
Биты 31:16 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
DATA[15:0]: regular данные преобразования. Эти биты только для чтения. Они содержат результат преобразования каналов regular. Данные результата могут получать правое или левое выравнивание, как показано на рисунках 48 и 49.
Смещение адреса 0x00 относительно базового адреса ADC1+0x300, значение после сброса 0x00000000.
Этот регистр предоставляет образ бит статуса различных ADC. Тем не менее, эти биты только для чтения, и их нельзя очистить напрямую. Вместо этого каждый бит статуса должен быть очищен записью 0 в соответствующий регистр ADC_SR.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
ADC3
OVR3 r
STRT3 r
JSTRT3 r
JEOC3 r
EOC3 r
AWD3 r
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
зарезерв.
ADC2
зарезерв.
ADC1
OVR2 r
STRT2 r
JSTRT2 r
JEOC2 r
EOC2 r
AWD2 r
OVR1 r
STRT1 r
JSTRT1 r
JEOC1 r
EOC1 r
AWD1 r
Биты 31:22 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
OVR3: флаг overrun ADC3. Этот бит - копия бита OVR в регистре ADC3_SR.
STRT3: флаг старта regular-канала ADC3. Этот бит - копия бита STRT в регистре ADC3_SR.
JSTRT3: флаг старта injected-канала ADC3. Этот бит - копия бита JSTRT в регистре ADC3_SR.
JEOC3: завершение преобразования injected-канала ADC3. Этот бит - копия бита JEOC в регистре ADC3_SR.
EOC3: завершение преобразования ADC3. Этот бит - копия бита EOC в регистре ADC3_SR.
AWD3: флаг analog watchdog ADC3. Этот бит - копия бита AWD в регистре ADC3_SR.
Биты 15:14 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
OVR2: флаг overrun ADC2. Этот бит - копия бита OVR в регистре ADC2_SR.
STRT2: флаг старта regular-канала ADC2. Этот бит - копия бита STRT в регистре ADC2_SR.
JSTRT2: флаг старта injected-канала ADC2. Этот бит - копия бита JSTRT в регистре ADC2_SR.
JEOC2: завершение преобразования injected-канала ADC2. Этот бит - копия бита JEOC в регистре ADC2_SR.
EOC2: завершение преобразования ADC2. Этот бит - копия бита EOC в регистре ADC2_SR.
AWD2: флаг analog watchdog ADC2. Этот бит - копия бита AWD в регистре ADC2_SR.
Биты 7:6 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
OVR1: флаг overrun ADC1. Этот бит - копия бита OVR в регистре ADC1_SR.
STRT1: флаг старта regular-канала ADC1. Этот бит - копия бита STRT в регистре ADC1_SR.
JSTRT1: флаг старта injected-канала ADC1. Этот бит - копия бита JSTRT в регистре ADC1_SR.
JEOC1: завершение преобразования injected-канала ADC1. Этот бит - копия бита JEOC в регистре ADC1_SR.
EOC1: завершение преобразования ADC1. Этот бит - копия бита EOC в регистре ADC1_SR.
AWD1: флаг analog watchdog ADC1. Этот бит - копия бита AWD в регистре ADC1_SR.
Смещение адреса 0x04 относительно базового адреса ADC1+0x300, значение после сброса 0x00000000.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
зарезервировано
TSVREFE rw
VBATE rw
зарезервировано
ADCPRE rw
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
DMA[1:0] rw
DDS rw
зарезерв.
DELAY[3:0] rw
зарезервировано
MULTI[4:0] rw
Биты 31:24 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
TSVREFE: разрешение датчика температуры и VREFINT. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить датчик температуры и канал VREFINT.
0: датчик температуры и канал VREFINT запрещены. 1: датчик температуры и канал VREFINT разрешены.
Примечание: на микроконтроллерах STM32F42x и STM32F43x должен быть запрещен (сброшен) бит VBATE, когда установлен TSVREFE. Если же оба этих бита установлены, то будет выполняться только преобразование VBAT.
VBATE: разрешение VBAT. Этот бит устанавливается и очищается программой, чтобы разрешить/запретить канал VBAT.
0: канал VBAT запрещен. 1: канал VBAT разрешен.
Биты 21:18 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
ADCPRE: прескалер ADC. Эти биты устанавливаются и очищается программой, чтобы выбрать частоту тактов ADC. Частота тактов одинаковая для всех ADC.
00: PCLK2, поделенная на 2. 01: PCLK2, поделенная на 4. 10: PCLK2, поделенная на 6. 11: PCLK2, поделенная на 8.
DMA: режим прямого доступа к памяти для режима multi ADC. Это поле бит устанавливается и очищается программой. Для получения дополнительной информации см. секцию даташита с описанием контроллера DMA.
00: режим DMA запрещен. 01: разрешен DMA mode 1 (2 / 3 полуслова друг за другом - 1, затем 2, затем 3). 10: разрешен DMA mode 2 (2 / 3 полуслова попарно - 2 и 1, затем 1 и 3, затем 3 и 2). 11: разрешен DMA mode 3 (2 / 3 байта попарно - 2 и 1, затем 1 и 3, затем 3 и 2).
DDS: выбор запрета DMA (для режима multi-ADC). Этот бит устанавливается и очищается программно.
0: не выдается новый запрос DMA после последней передачи (как было сконфигурировано в контроллере DMA). Биты DMA не очищаются аппаратно, однако они должны быть очищены и установлены программной в желаемый режим перед тем, как могут быть сгенерированы новые запросы DMA. 1: запросы DMA продолжают выдаваться, пока преобразуются данные и DMA = 01, 10 или 11.
Биты 12 зарезервирован, его значение должно сохраняться на значении сброса (0).
DELAY: задержка между двумя фазами выборки. Эти биты устанавливаются и сбрасываются программой. Они используются в режимах dual interleaved или triple interleaved.
Биты 7:5 зарезервированы, их значение должно сохраняться на значении сброса (все нули).
MULTI[4:0]: выбор режима Multi ADC. Эти биты записываются программой, чтобы выбрать рабочий режим.
Режим, когда все ADC не зависят друг от друга:
00000: independent mode
Значения от 00001 до 01001: Dual mode, ADC1 и ADC2 работают совместно, ADC3 работает независимо.
00001: комбинация режимов regular simultaneous + injected simultaneous. 00010: комбинация режимов regular simultaneous + alternate trigger. 00011: зарезервировано. 00101: только режим injected simultaneous. 00110: только режим regular simultaneous. 00111: только режим interleaved. 01001: только режим alternate trigger.
Значения от 10001 до 11001: Triple mode: ADC1, 2 и 3 работают совместно.
10001: комбинация режимов regular simultaneous + injected simultaneous. 10010: комбинация режимов regular simultaneous + alternate trigger. 10011: зарезервировано. 10101: только режим injected simultaneous. 10110: только режим regular simultaneous. 10111: только режим interleaved. 11001: только режим alternate trigger.
Все другие комбинации зарезервированы и не должны программироваться.
Примечание: в multi-режиме изменение конфигурации канала генерирует аборт, что может привести к потере синхронизации. Рекомендуется запретить режим multi ADC перед любым изменением конфигурации.
Смещение адреса 0x08 относительно базового адреса ADC1+0x300, значение после сброса 0x00000000.
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
DATA1[15:0] r
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
DATA2[15:0] r
DATA2[15:0]: второй элемент данных пары regular-преобразований.
– В режиме dual эти биты содержат regular-данные ADC2. См. выше описание режима Dual ADC. – В режиме triple эти биты альтернативно содержат regular-данные ADC2, ADC1 и ADC3. См. выше описание режима Triple ADC.
DATA1[15:0]: первый элемент данных пары regular-преобразований.
- В режиме dual эти биты содержат regular-данные ADC1. См. выше описание режима Dual ADC. – В режиме triple эти биты альтернативно содержат regular-данные ADC1, ADC3 and ADC2. См. выше описание режима Triple ADC.
Power Scale 3 (биты VOS[1:0] в регистре PWR_CR равны 01), регулятор ON, over-drive OFF
0
-
120
МГц
Power Scale 2 (биты VOS[1:0] в регистре PWR_CR равны 10), регулятор ON
Over-drive OFF
0
-
144
Over-drive ON
-
168
Power Scale 1 (биты VOS[1:0] в регистре PWR_CR равны 11), регулятор ON
Over-drive OFF
0
-
168
Over-drive ON
-
180
fPCLK1
Внутренняя тактовая частота APB1
Over-drive OFF
0
-
42
Over-drive ON
0
-
45
fPCLK2
Внутренняя тактовая частота APB2
Over-drive OFF
0
-
84
Over-drive ON
0
-
90
VDD
Стандартное рабочее напряжение
1.7(2)
-
3.6
V
VDDA(3)(4)
Аналоговое рабочее напряжение (частота преобразований ограничена на 1.2M выборок)
Должен быть одинаковый потенциал с VDD(5)
1.7(2)
-
2.4
Аналоговое рабочее напряжение (частота преобразований ограничена на 2.4M выборок)
2.4
-
3.6
VBAT
Рабочее напряжения батареи бэкапа
1.65
3.6
V12
Регулятор ON: внутреннее напряжение 1.2V на ножках VCAP_1/VCAP_2
Power Scale 3 (биты VOS[1:0] в регистре PWR_CR равны 01), 120 МГц максимальная частота HCLK
1.08
1.14
1.20
V
Power Scale 3 (биты VOS[1:0] в регистре PWR_CR равны 01), 120 МГц максимальная частота HCLK
1.20
1.26
1.32
Power Scale 3 (биты VOS[1:0] в регистре PWR_CR равны 01), 120 МГц максимальная частота HCLK
1.26
1.32
1.40
Регулятор OFF: должно быть подано внешнее стабилизированное напряжение напряжение 1.2V на ножки VCAP_1/VCAP_2(6)
Максимальная частота 120 МГц
1.10
1.14
1.20
Максимальная частота 144 МГц
1.20
1.26
1.32
Максимальная частота 168 МГц
1.26
1.32
1.38
VIN
Входное напряжение на ножках RST и FT(7)
2V ≤ VDD ≤ 3.6V
-0.3
-
5.5
V
VDD ≤ 2V
-0.3
-
5.2
Входное напряжение на ножках TTa
-0.3
-
VDDA+0.3
Входное напряжение на ножке BOOT0
0
-
9
PD
Рассеиваемая мощность при TA=85°C для суффикса 6 или TA=105°C для суффикса 7(8)
LQFP100
-
-
465
мВт
WLCSP143
-
-
641
LQFP144
-
-
500
UFBGA169
-
-
385
LQFP176
-
-
526
UFBGA176
-
-
513
LQFP208
-
-
1053
TFBGA216
-
-
690
TA
Температура окружающей среды для версии с суффиксом 6
Максимальная рассеиваемая мощность
-40
85
°C
Низкая рассеиваемая мощность(9)
-40
105
Температура окружающей среды для версии с суффиксом 7
Максимальная рассеиваемая мощность
-40
105
Низкая рассеиваемая мощность(9)
-40
125
TJ
Диапазон температуры кристалла (junction temperature)
Версия с суффиксом 6
-40
105
°C
Версия с суффиксом 7
-40
125
Примечания:
(1) Режим over-drive не поддерживается в диапазоне напряжений от 1.7 до 2.1 V. (2). Минимальное значение VDD/VDDA 1.7V получено с использованием внешнего супервизора источника питания (см. секцию 3.17.2: Internal reset OFF даташита [1]). (3) Когда используется ADC, см. таблицу 74 с характеристиками ADC[]. (4) Если на корпусе присутствует вывод VREF+, он должен удовлетворять следующим условиям: VDDA - VREF+ < 1.2 V. (5) Рекомендуется подавать питание на VDD и VDDA от одного и того же источника напряжения. Во время включения и выключения питания допускается максимальная разница 300 mV между VDD и VDDA. (6) Режим over-drive не поддерживается, когда внутренний регулятор выключен. (7) Когда переносимое напряжение больше VDD+0.3, должны быть запрещены внутренние резисторы pull-up и pull-down. (8) Если TA ниже, то допускаются увеличенные значения PD, пока TJ не превышает TJmax. (9) В состоянии низкой рассеиваемой мощности, TA может быть в более широком диапазоне, пока TJ не превышает TJmax.
Таблица 18. Ограничения, накладываемые в зависимости от рабочего напряжения источника питания VDD.
VDD
Работа ADC
fFlashMAX(6)
HCLK(1)(2)(7)
Работа I/O
Возможные операции с FLASH
1.7V .. 2.1V(3)
Время преобразования до 1.2 Msps
20 МГц(4)
168 МГц с 8 wait state и over-drive OFF
Без компрессии I/O
Только 8-битное стирание и программирование
2.1V .. 2.4V
22 МГц
180 МГц с 8 wait state и over-drive ON
16-битное стирание и программирование
2.4V .. 2.7V
Время преобразования до 2.4 Msps
24 МГц
180 МГц с 7 wait state и over-drive ON
Компрессия I/O работает
2.7V .. 3.6V
30 МГц
180 МГц с 5 wait state и over-drive ON
32-битное стирание и программирование
Примечания:
(1) Применяется только когда код выполняется из памяти FLASH. Когда код выполняется из RAM, не требуется циклов ожидания (no wait state). (2) Благодаря ART акселератору и 128-битной памяти FLASH количество wait state, приведенное здесь, не влияет на скорость выполнения кода из памяти FLASH, поскольку ART акселератор позволяет достичь производительности выполнения кода, эквивалентной отсутствию циклов ожидания (0 wait state) работающей программы. (3) Минимальное значение VDD/VDDA 1.7V получено с использованием внешнего супервизора источника питания (см. секцию 3.17.2: Internal reset OFF даташита [1]). (4). Предварительная выборка инструкций (prefetch) недоступна. (5) Диапазон напряжений для USB full speed PHY может падать до 2.7V. Однако между 2.7V и 3V электрические характеристики ножек D- и D+ ухудшатся. (6) Частота максимального доступа к FLASH без циклов ожидания (0 wait state). (7) Максимальная частота HCLK и циклы ожидания при доступе к FLASH (wait state).
Таблица 35. Токи потребления периферии. Здесь приведена только часть таблицы 35 даташита [1], касающаяся периферийных устройств ADC1, ADC2, ADC3.
Периферийное устройство
Типовой ток потребления IDD(1)
Ед.
Scale 1
Scale 2
Scale 3
APB2 (до 90 МГц)
ADC1(5)
4.67
4.31
3.83
мкА/МГц
ADC2(5)
4.78
4.44
4.00
ADC3(5)
4.56
4.17
3.67
Примечания:
(1) Когда ячейка компенсации I/O включена, типовое значение IDD увеличивается на 0.22 мА.2. (5) Когда ADC включен (установлен бит ADON в регистре ADC_CR2), добавляется дополнительное потребление тока 1.6 мА на периферийное устройство ADC (ток потребления аналоговых схем).
Параметры в таблице 83 получены из результатов тестов при окружающей температуре и VDD, приведенных в таблице 17, если не указано что-то другое.
Таблица 83. Внутреннее опорное напряжение.
Символ
Параметр
Условия
MIN
Typ
MAX
Ед.
VREFINT
Внутреннее опорное напряжение
–40°C < TA < +105°C
1.18
1.21
1.24
V
TS_vrefint(1)
Время выборки ADC при чтении внутреннего опорного напряжения
10
-
-
мкс
VRERINT_s(2)
Разброс опорного напряжения в рабочем диапазоне температур
VDD = 3V ± 10mV
-
3
5
mV
TCoeff(1)
Температурный коэффициент
-
30
50
ppm/°C
tSTART(2)
Время запуска
-
6
10
мкс
Примечания:
(1) Самое короткое время выборки может быть определено в приложении путем выполнения нескольких итераций. (2) Гарантируется дизайном, не тестировалось в производстве.
Таблица 84. Значения калибровки внутреннего опорного напряжения.
Символ
Параметр
Адрес памяти
VREFIN_CAL
Сырые значения данных ADC, снятые при температуре 30°C, VDDA = 3.3V.
0x1FFF7A2A - 0x1FFF7A2B
[Характеристики 12-битного ADC]
Если не указано что-то иное, приведенные в таблице 74 параметры получены из результатов тестов, выполненных при окружающей температуре, частоте fPCLK2 и напряжении питания VDDA из таблицы 17.
Потребление постоянного тока ADC VREF в режиме преобразования
-
300
500
мкА
IVDDA(2)
Потребление постоянного тока ADC VDDA в режиме преобразования
-
1.6
1.8
мА
Примечания:
(1) Минимальное значение VDDA 1.7V получено с использованием внешнего супервизора питания (см. секцию 3.17.2: Internal reset OFF даташита [1]). (2) Гарантировано результатами испытаний характеристик. (3) VREF+ внутри соединен с VDDA, и VREF- внутри соединен с VSSA. (4) Максимальное значение RADC дано для VDD = 1.7V, и минимальное для VDD = 3.3V. (5) Для внешних триггеров должна быть добавлена задержка 1/fPCLK2 для латентности, указанной в таблице 74.
Формула 1 для максимального значения RAIN:
(k - 0.5) RAIN = ----------------------- - RADC fADC x CADC x ln(2N+2)
Эта формула используется для определения максимального внешнего допустимого сопротивления, чтобы гарантировалась ошибка не выше 1/4 от LSB. N = 12 (для 12-разрядной разрешающей способности), и k это количество период выборок, определенных в регистре ADC_SMPR1.
В этом примере ADC2 измеряет уровень напряжения на ножке порта PC3 процессора STM32F429 (контакт 15 разъема P2 платы разработчика 32F429IDISCAVERY). Это вход ADC123_IN13, т. е. канал 13, который можно привязать к любому блоку АЦП - ADC1, ADC2 или ADC3.
[Функция инициализации в stm32f4xx_hal_msp.c]
/**
* @brief Инициализация ADC
* Эта функция конфигурирует аппаратные ресурсы ADC.
Этом модуле реализован код потока FreeRTOS, который инициализирует АЦП и периодически опрашивает его. Если вычисленное в процентах значение напряжения батареи поменялось, то запускается обновление на экране индикатора состояния батареи.
#include < stdint.h>
#include < stdbool.h>
#include "battadc.h"
#include "screenthread.h"
#include "errors.h"
#include "stm32f4xx_hal.h"
// АЦП сконфигурирован в 12 битном режиме, поэтому при выравнивании
// вправо максимальное считанное значение из регистра результата
// ADC2_DR будет равно 4095:
#define BATT_ADC_MAX_SAMPLE_VALUE ((1 < < 12)-1)
// Максимальное значение счетчика для усреднения 244, подогнанное
// для удобства расчета процентов заряда батареи. Здесь за 100%
В этом примере АЦП используется для оцифровки звука с частотой выборок 12000 Гц. Преобразования запускает таймер TIM3 в своем обработчике прерывания TIM3_IRQHandler, который имеет максимальный приоритет. Данные из АЦП считывает обработчик прерывания ADC_IRQHandler, у которого установлен меньший приоритет. В нем считанные из АЦП данные преобразуются в формат short и накапливаются в половинке буфера adcbuf. Как только половинка заполняется, её данные с помощью очереди dataQueue передаются потоку обработки (он здесь не показан), и происходит переключение на заполнение другой половинки буфера.
Функция инициализации HAL_ADC_MspInit модуля stm32f4xx_hal_msp.c такая же, как в примере 1 выше. Обратите внимание, что оба блока ADC2 (Пример 1) и ADC3 (Пример 2) могут работать одновременно, не влияя друг на друга.
* @brief Функция преобразует unsigned int32 в signed int16 (short).
* @param Результат ADC, сдвинутый влево, до 16 разрядов.
* Этот алгоритм преобразования описан в AN5012 "Analog-to-digital
* audio conversion example using STM32L4 Series microcontroller
* peripherals"
*/
staticint16_tADC_to_USB_Dataformat(uint32_t ADC_sample)
{
int32_t temp_val=0x0;
// Изменение формата данных из 32-битного беззнакового// (где используется 16 бит), в формат 16 бит со знаком:
temp_val = (int32_t)(ADC_sample-32768);
return (int16_t)temp_val;
}