Программирование ARM STM32F429: аналого-цифровые преобразователи (АЦП) Fri, March 29 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

STM32F429: аналого-цифровые преобразователи (АЦП) Печать
Добавил(а) microsin   

В микроконтроллер 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.

STM32F4xx ADC LQFP144

Таблица 10. Нумерация и функции выводов микроконтроллеров STM32F427xx и STM32F429xx.

Pin Имя(1) Тип Альтернативная функция Дополнительные функции
6 VBAT S(5)    
13 PF3 I/O, FT(5) FMC_A3, EVENTOUT ADC3_IN9
14 PF4 I/O, FT(5) FMC_A4, EVENTOUT ADC3_IN14
15 PF5 I/O, FT(5) FMC_A5, EVENTOUT ADC3_IN15
16 VSS S(5)
   
17 VDD    
18 PF6 I/O, FT(5) TIM10_CH1, SPI5_NSS, SAI1_SD_B, UART7_Rx, FMC_NIORD, EVENTOUT ADC3_IN4
19 PF7 I/O, FT(5) TIM11_CH1, SPI5_SCK, SAI1_MCLK_B, UART7_Tx, FMC_NREG, EVENTOUT ADC3_IN5
20 PF8 I/O, FT(5) SPI5_MISO, SAI1_SCK_B, TIM13_CH1, FMC_NIOWR, EVENTOUT ADC3_IN6
21 PF9 I/O, FT(5) SPI5_MOSI, SAI1_FS_B, TIM14_CH1, FMC_CD, EVENTOUT ADC3_IN7
22 PF10 I/O, FT(5) FMC_INTR, DCMI_D11, LCD_DE, EVENTOUT ADC3_IN8
26 PC0 I/O, FT(5) OTG_HS_ULPI_STP, FMC_SDNWE, EVENTOUT ADC123_IN10
27 PC1 I/O, FT(5) ETH_MDC, EVENTOUT ADC123_IN11
28 PC2 I/O, FT(5) SPI2_MISO, I2S2ext_SD, OTG_HS_ULPI_DIR, ETH_MII_TXD2, FMC_SDNE0, EVENTOUT ADC123_IN12
29 PC3 I/O, FT(5) SPI2_MOSI/I2S2_SD, OTG_HS_ULPI_NXT, ETH_MII_TX_CLK, FMC_SDCKE0, EVENTOUT ADC123_IN13
30 VDD S(5)
   
31 VSSA    
32 VREF+    
33 VDDA    
34 PA0-WKUP (PA0) I/O, FT(6) TIM2_CH1/TIM2_ETR, TIM5_CH1, TIM8_ETR, USART2_CTS, UART4_TX, ETH_MII_CRS, EVENTOUT ADC123_IN0/WKUP(5)
35 PA1 I/O, FT(5) TIM2_CH2, TIM5_CH2, USART2_RTS, UART4_RX, ETH_MII_RX_CLK/ETH_RMII_REF_CLK, EVENTOUT ADC123_IN1
36 PA2 I/O, FT(5) TIM2_CH3, TIM5_CH3, TIM9_CH1, USART2_TX, ETH_MDIO, EVENTOUT ADC123_IN2
37 PA3 I/O, FT(5) TIM2_CH4, TIM5_CH4, TIM9_CH2, USART2_RX, OTG_HS_ULPI_D0, ETH_MII_COL, LCD_B5, EVENTOUT ADC123_IN3
38 VSS S(5)
   
39 VDD    
40 PA4 I/O, TTa(5) SPI1_NSS, SPI3_NSS/I2S3_WS, USART2_CK, OTG_HS_SOF, DCMI_HSYNC, LCD_VSYNC, EVENTOUT ADC12_IN4/DAC_OUT1
41 PA5 I/O, TTa(5) TIM2_CH1/TIM2_ETR, TIM8_CH1N, SPI1_SCK, OTG_HS_ULPI_CK, EVENTOUT ADC12_IN5/DAC_OUT2
42 PA6 I/O, FT(5) TIM1_BKIN, TIM3_CH1, TIM8_BKIN, SPI1_MISO, TIM13_CH1, DCMI_PIXCLK, LCD_G2, EVENTOUT ADC12_IN6
43 PA7 I/O, FT(5) TIM1_CH1N, TIM3_CH2, TIM8_CH1N, SPI1_MOSI, TIM14_CH1, ETH_MII_RX_DV/ETH_RMII_CRS_DV, EVENTOUT ADC12_IN7
44 PC4 I/O, FT(5) ETH_MII_RXD0/ETH_RMII_RXD0, EVENTOUT ADC12_IN14
45 PC5 I/O, FT(5) ETH_MII_RXD1/ETH_RMII_RXD1, EVENTOUT ADC12_IN15
46 PB0 I/O, FT(5) TIM1_CH2N, TIM3_CH3, TIM8_CH2N, LCD_R3, OTG_HS_ULPI_D1, ETH_MII_RXD2, EVENTOUT ADC12_IN8
47 PB1 I/O, FT(5) TIM1_CH3N, TIM3_CH4, TIM8_CH3N, LCD_R6, OTG_HS_ULPI_D2, ETH_MII_RXD3, EVENTOUT ADC12_IN9
51 VSS S(5)    
52 VDD    
61 VSS    
62 VDD    
71 VCAP_1    
72 VDD    
83 VSS    
84 VDD    
94 VSS    
95 VDD    
106 VCAP_2    
107 VSS    
108 VDD    
120 VSS    
121 VDD    
130 VSS    
131 VDD    
144 VDD    

Примечания:

(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, и на основе их создавать собственные приложения.

STM32F4xx single ADC block diagram fig44

Рис. 44. Блок-схема одного из ADC.

Таблица 65. Выводы ADC.

Имя Тип сигнала Примечания
VREF+ Вход, положительное напряжение аналогового опорного напряжения. Самое высокое положительное напряжение для ADC, 1.8V ≤ VREF+ ≤ VDDA
VDDA Вход, плюс напряжения питания аналоговых схем. Напряжение питания аналоговых схем, равное VDD, и:
2.4V ≤ VDDA ≤ VDD (3.6V) для полной скорости
1.8V ≤ VDDA ≤ VDD (3.6V) для сниженной скорости
VREF– Вход, отрицательное напряжение аналогового опорного напряжения(1). Самое нижнее/отрицательное опорное напряжение 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 появится результат преобразования.

STM32F4xx ADC timing diagram fig45

Рис. 45. Диаграмма времени работы ADC.

Analog watchdog. Бит статуса AWD для analog watchdog установится, если аналоговое напряжение, преобразуемое ADC, окажется ниже нижнего порога или выше верхнего порога. Эти пороги программируются в 12 младших битах 16-битных регистров ADC_HTR и ADC_LTR. Прерывание может быть разрешено битом AWDIE в регистре ADC_CR1.

Значение порога не зависит от выравнивания, выбранного битом ALIGN в регистре ADC_CR2. Аналоговое напряжение сравнивается с нижним и верхним порогами перед выравниванием.

STM32F4xx ADC Analog Watchdog guarded area fig46

Рис. 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.

STM32F4xx ADC injected conversion latency fig47

Рис. 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.

STM32F4xx ADC right alignment 12 bit fig48

Рис. 48. Правое выравнивание 12-битных данных.

STM32F4xx ADC left alignment 12 bit fig49

Рис. 49. Левое выравнивание 12-битных данных.

Значение преобразованных данных из injected группы каналов уменьшается на определяемое пользователем смещение, записанное в регистры ADC_JOFRx, чтобы результат мог стать отрицательным значением. Бит SEXT представляет расширенное значение со знаком.

Для каналов в группе regular никакое смещение не вычитается, поэтому всегда значащими будут 12 бит.

Специальный случай: при левом выравнивании данные выравниваются на базе половины слова (в 2 байтах), кроме установленной разрядности 6 бит. Для 6-битной разрядности данные выравниваются на базе одного байта, как показано на рис. 50.

STM32F4xx ADC left alignment 6 bit fig50

Рис. 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, в течение которого детектирование триггера запрещено. Это сделано для того, чтобы избежать случайного детектирования во время изменений.

[Режим быстрого преобразования (fast conversion mode)]

Есть возможность ускорить преобразование путем уменьшение разрешающей способности (разрядности) ADC. Биты RES используются для выбора количества бит, доступных в регистре данных. Минимальное время преобразования для каждого варианта разрядности следующее:

12 бит: 3 + 12 = 15 тактов ADCCLK
10 бит: 3 + 10 = 13 тактов ADCCLK
8 бит: 3 + 8 = 11 тактов ADCCLK
6 бит: 3 + 6 = 9 тактов ADCCLK

[Управление данными]

Использование 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.

STM32F4xx Multi ADC block diagram fig51

Рис. 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-преобразования.

Реализованы 4 возможных режима:

• Injected simultaneous mode
• Regular simultaneous mode
• Interleaved mode
• Alternate trigger mode

Также можно использовать предыдущие режимы, сконфигурированные следующими способами:

• Injected simultaneous mode + Regular simultaneous mode
• Regular simultaneous mode + Alternate trigger mode

Примечание: в режиме 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.

STM32F4xx ADC injected simultaneous mode on 4 channels dual ADC mode fig52

Рис. 52. Injected simultaneous mode на 4 каналах: dual ADC mode.

Режим Triple ADC. На событии завершения преобразования ADC1, ADC2 или ADC3:

• Преобразованные данные сохраняются в регистрах ADC_JDRx каждого интерфейса ADC.
• Генерируется прерывание JEOC (если это разрешено на одном из трех интерфейсов ADC), когда были преобразованы injected-каналы ADC1/ADC2/ADC3.

STM32F4xx ADC injected simultaneous mode on 4 channels triple ADC mode fig53

Рис. 53. Injected simultaneous mode на 4 каналах: triple ADC mode.

[Regular simultaneous mode]

Этот режим выполняется на 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.

STM32F4xx ADC regular simultaneous mode on 16 channels dual ADC mode fig54

 Рис. 54. Regular simultaneous mode на 16 каналах: dual ADC mode.

Режим 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.

STM32F4xx ADC regular simultaneous mode on 16 channels triple ADC mode fig55

Рис. 55. Regular simultaneous mode на 16 каналах: triple ADC mode.

[Interleaved mode]

Этот режим может быть запущен только на группе 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.

STM32F4xx ADC interleaved mode on 1 channel in continuous conversion mode dual ADC fig56

Рис. 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], ...

STM32F4xx ADC interleaved mode on 1 channel in continuous conversion mode triple ADC fig57

Рис. 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 в группе.

STM32F4xx ADC alternate trigger injected group of each ADC fig58

Рис. 58. Триггер alternate: injected группа каждого ADC.

Если для обоих ADC1 и ADC2 разрешен прерывистый инжектированный режим (injected discontinuous mode):

• Когда сработает 1-й триггер, преобразуется первый injected канал ADC1
• Когда сработает 2-й триггер, преобразуется первый injected канал ADC2
• и так далее.

Прерывание JEOC, если разрешено, генерируется после того, как преобразуются все injected каналы ADC1 в группе.

Прерывание JEOC, если разрешено, генерируется после того, как преобразуются все injected каналы ADC2 в группе.

Если сработает другой внешний триггер после преобразования всех injected-каналов в группе, то процесс alternate-триггера перезапустится.

STM32F4xx ADC alternate trigger 4 injected channels each ADC in discontinuous mode fig59

Рис. 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 в группе.

STM32F4xx ADC alternate trigger injected group of each ADC fig60

Рис. 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.

STM32F4xx ADC alternate plus regular simultaneous fig61

Рис. 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-й триггер игнорируется).

STM32F4xx ADC case of trigger occurring during injected conversion fig62

Рис. 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 показывает блок-схему датчика температуры.

STM32F4xx ADC temperature sensor and VREFINT channel block diagram fig63

Рис. 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.

STM32F4xx ADC register map and reset values for each ADC tbl72

Таблица 73. Карта регистров ADC и значения после сброса (общие регистры ADC).

STM32F4xx ADC register map and reset values common ADC registers tbl73

В описании функций регистров используются следующие сокращения:

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.

Смещение адреса 0x04, значение после сброса 0x00000000.

   31      30       29       28       27       26       25       24       23       22       21       20       19       18       17       16   
зарезервировано
OVRIE
rw
RES
rw
AWDEN
rw
JAWDEN
rw
зарезервировано
   15       14       13       12       11       10       9       8       7       6       5       4       3       2       1       0   
DISCNUM[2:0]
rw

JDISCE
rw
DISCEN
rw
JAUTO
rw
AWDSGL
rw
SCAN
rw
JEOCIE
rw
AWDIE
rw
EOCIE
rw
AWDCH[4:0]
rw

Биты 31:27 зарезервированы, их значение должно сохраняться на значении сброса (все нули).

OVRIE: разрешение прерывания overrun. Этот бит устанавливается и очищается программно, чтобы разрешить или запретить прерывание overrun.

0: запрещено прерывание overrun.
1: прерывание overrun разрешено. Когда установится бит OVR, будет сгенерировано прерывание.

RES[1:0]: Resolution (разрешающая способность АЦП). Эти биты записываются программно, чтобы выбрать разрядность данных преобразования ADC.

00: 12-бит (время преобразования 15 тактов ADCCLK).
01: 10-бит (время преобразования 13 тактов ADCCLK).
10: 8-бит (время преобразования 11 тактов ADCCLK).
11: 6-бит (время преобразования 9 тактов ADCCLK).

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.

0: автоматическое преобразование injected-группы запрещено.
1: автоматическое преобразование injected-группы разрешено.

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:

0000: событие Timer 1 CC1
0001: событие Timer 1 CC2
0010: событие Timer 1 CC3
0011: событие Timer 2 CC2
0100: событие Timer 2 CC3
0101: событие Timer 2 CC4
0110: событие Timer 2 TRGO
0111: событие Timer 3 CC1
1000: событие Timer 3 TRGO
1001: событие Timer 4 CC4
1010: событие Timer 5 CC1
1011: событие Timer 5 CC2
1100: событие Timer 5 CC3
1101: событие Timer 8 CC1
1110: событие Timer 8 TRGO
1111: EXTI line11

Бит 23 зарезервирован, его значение должно сохраняться на значении сброса (0).

JSWSTART: запуск преобразования injected-каналов. Этот бит устанавливается программно и сбрасывается аппаратно, как только запустится преобразование.

0: состояние сброса.
1: запускает преобразование injected-каналов.

Примечание: этот бит можно установить только когда ADON = 1, иначе никакое преобразование не запустится.

JEXTEN: разрешение внешнего триггера для injected-каналов. Эти биты устанавливаются и сбрасываются программой для выбора полярности внешнего триггера и разрешения триггера группы injected.

00: детектирование триггера запрещено.
01: триггер срабатывает по фронту нарастания.
10: триггер срабатывает по срезу спада.
11: триггер срабатывает по обоим перепадам.

JEXTSEL[3:0]: выбор внешнего события для группы injected. Биты выбирают внешнее событие, используемое как триггер для запуска преобразования группы injected:

0000: событие Timer 1 CC4
0001: событие Timer 1 TRGO
0010: событие Timer 2 CC1
0011: событие Timer 2 TRGO
0100: событие Timer 3 CC2
0101: событие Timer 3 CC4
0110: событие Timer 4 CC1
0111: событие Timer 4 CC2
1000: событие Timer 4 CC3
1001: событие Timer 4 TRGO
1010: событие Timer 5 CC4
1011: событие Timer 5 TRGO
1100: событие Timer 8 CC2
1101: событие Timer 8 CC3
1110: событие Timer 8 CC4
1111: EXTI line15

Биты 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. Эти биты записываются программой для выбора времени оцифровки индивидуально для каждого канала. Во время циклов выборки биты выбора канала должны оставаться неизменными.

000: 3 такта
001: 15 тактов
010: 28 тактов
011: 56 тактов
100: 84 такта
101: 112 тактов
110: 144 такта
111: 480 тактов

Смещение адреса 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. Эти биты записываются программой для выбора времени оцифровки индивидуально для каждого канала. Во время циклов выборки биты выбора канала должны оставаться неизменными.

000: 3 такта
001: 15 тактов
010: 28 тактов
011: 56 тактов
100: 84 такта
101: 112 тактов
110: 144 такта
111: 480 тактов

Здесь 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.

0000: 1 преобразование.
0001: 2 преобразования.
...
1111: 16 преобразований.

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 канала.

00: 1 преобразование.
01: 2 преобразования.
10: 3 преобразования.
11: 4 преобразования.

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.

0000: 5 * TADCCLK
0001: 6 * TADCCLK
0010: 7 * TADCCLK
...
1111: 20 * TADCCLK

Биты 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.

Таблица 17. Основные рабочие условия [1].

Символ Параметр Условия(1)
MIN Typ MAX Ед.
fHCLK

Внутренняя тактовая частота AHB

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.

Таблица 74. Характеристики ADC.

Символ Параметр Условия MIN Typ MAX Ед.
VDDA Напряжение питания VDDA − VREF+ < 1.2V 1.7(1) - 3.6 V
VREF+ Положительное опорное напряжение 1.7(1) - VDDA
VREF- Отрицательное опорное напряжение   - 0 -
fADC Тактовая частота АЦП VDDA = от 1.7V(1) до 2.4V 0.6 15 18 МГц
VDDA = от 2.4V до 3.6V 0.6 30 36  
fTRIG(2) Частота внешнего триггера fADC = 30 МГц, разрядность 12 бит - - 1764 кГц
  - - 17 1/fADC
VAIN Диапазон преобразуемых входных напряжений(3)   0 (VSSA или VREF-, подтянутые к GND) - VREF+ V
RAIN(2) Внешнее входное сопротивление См. формулу 1 ниже - - 50 кОм
RADC(2)(4) Сопротивление ключа выборки   1.5 - 6
CADC(2) Внутренняя емкость выборки и хранения   - 4 7 пФ
tlat(2) Латентность (задержка) триггера инжектированного bпреобразования fADC = 30 МГц - - 0.100 мкс
      3(5) 1/fADC
tlatr(2) Латентность триггера regular преобразования fADC = 30 МГц - - 0.067 мкс
  - - 2(5) 1/fADC
tS(2) Время выборки fADC = 30 МГц 0.100 - 16 мкс
  3 - 480 1/fADC
tSTAB(2) Время включения (стабилизации)   - 2 3 мкс
tCONV(2)    Общее время преобразования (включая время выборки) fADC = 30 МГц, разрядность 12 бит 0.50 - 16.40 мкс
fADC = 30 МГц, разрядность 10 бит 0.43 - 16.34  
fADC = 30 МГц, разрядность 8 бит 0.37 - 16.27  
fADC = 30 МГц, разрядность 6 бит 0.30 - 16.20  
От 9 до 492 (tS для выборки +n-бит разрядности преобразования последовательного приближения) 1/fADC
fS(2) Частота выборки (fADC = 30 МГц, и tS = 3 такта ADC) Single ADC, разрядность 12-бит - - 2 Msps
Interleave Dual ADC, разрядность 12-бит - - 3.75
Interleave Triple ADC, разрядность 12-бит - - 6
IVREF+(2) Потребление постоянного тока 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.

[Простые примеры использования АЦП STM32]

В этом примере ADC2 измеряет уровень напряжения на ножке порта PC3 процессора STM32F429 (контакт 15 разъема P2 платы разработчика 32F429IDISCAVERY). Это вход ADC123_IN13, т. е. канал 13, который можно привязать к любому блоку АЦП - ADC1, ADC2 или ADC3.

[Функция инициализации в stm32f4xx_hal_msp.c]

/**
* @brief Инициализация ADC
* Эта функция конфигурирует аппаратные ресурсы ADC.
* @param hadc: указатель на дескриптор ADC.
*/
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)
{
   GPIO_InitTypeDef GPIO_InitStruct = {0};
   if(hadc->Instance==ADC2)
   {
      /* Разрешение тактов периферийного устройства */
      __HAL_RCC_ADC2_CLK_ENABLE();
  
      __HAL_RCC_GPIOC_CLK_ENABLE();
      /** Конфигурация ножек ADC2:      PC3     ------> ADC123_IN13      */
      GPIO_InitStruct.Pin = ADC123_IN13;
      GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      HAL_GPIO_Init(BATT_ADC_PORT, &GPIO_InitStruct);
   }
   else if(hadc->Instance==ADC3)
   {
      /* Разрешение тактов периферийного устройства */
      __HAL_RCC_ADC3_CLK_ENABLE();
  
      __HAL_RCC_GPIOF_CLK_ENABLE();
      /** Конфигурация ножек ADC3:      PF6     ------> ADC3_IN4      */
      GPIO_InitStruct.Pin = ADC3_IN4;
      GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      HAL_GPIO_Init(ADC_PORT, &GPIO_InitStruct);
   }
}

[Модуль battadc.c]

Этом модуле реализован код потока 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%
// условно принято измеряемое напряжение 3.3V:
#define BATTMAXCNT (1000000/BATT_ADC_MAX_SAMPLE_VALUE)
 
__no_init static ADC_HandleTypeDef hbattadc @ "SDRAM_DATA";
static uint8_t battpercent;
 
static void MX_ADC2_Init(void)
{
   memset(&hbattadc, 0, sizeof(ADC_HandleTypeDef));
   ADC_ChannelConfTypeDef sConfig = {0};
 
   /** Конфигурирование глобальных функций ADC (такты, разрешение,
     * выравнивание данных и количество преобразований) */
   hbattadc.Instance = ADC2;
   hbattadc.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV4;
   hbattadc.Init.Resolution            = ADC_RESOLUTION_12B;
   hbattadc.Init.ScanConvMode          = DISABLE;
   hbattadc.Init.ContinuousConvMode    = DISABLE;
   hbattadc.Init.DiscontinuousConvMode = DISABLE;
   hbattadc.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;
   hbattadc.Init.ExternalTrigConv      = ADC_SOFTWARE_START;
   hbattadc.Init.DataAlign             = ADC_DATAALIGN_RIGHT;
   hbattadc.Init.NbrOfConversion       = 1;
   hbattadc.Init.EOCSelection          = ADC_EOC_SINGLE_CONV;
   hbattadc.Init.EOCSelection          = DISABLE;
   if (HAL_ADC_Init(&hbattadc) != HAL_OK)
      HALerrorHandler(__FILE__, __LINE__);
   /** Конфигурирование выбранного обычного канала ADC его соответствующим
     * рангом в секвенсоре и его временем выборки. */
   sConfig.Channel      = ADC_CHANNEL_13;
   sConfig.Rank         = 1;
   sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
   sConfig.Offset       = 0;
   if (HAL_ADC_ConfigChannel(&hbattadc, &sConfig) != HAL_OK)
      HALerrorHandler(__FILE__, __LINE__);
}
 
void battmeastask (void const * argument)
{
   uint8_t battbuffcnt = 0;
   uint32_t battsumm = 0;
   uint8_t battpercent_old;
   
   MX_ADC2_Init();
   battpercent_old = 101;
   while(1)
   {
      if(HAL_ADC_Start(&hbattadc) != HAL_OK)
      {
         /* Ошибка запуска преобразования */
         HALerrorHandler(__FILE__, __LINE__);
      }
      HAL_ADC_PollForConversion(&hbattadc, 10);
      if(HAL_ADC_GetState(&hbattadc) & HAL_ADC_STATE_EOC_REG)
      {
         // Усреднение результата измерения напряжения:
         battsumm += HAL_ADC_GetValue(&hbattadc);
         if (BATTMAXCNT == battbuffcnt)
         {
            battpercent = battsumm/10000;
            if (battpercent>100)
               battpercent = 100;
            if (battpercent_old != battpercent)
            {
               battpercent_old = battpercent;
               UpdateAtScreen(SCR_UPDATE_BATT);
            }
            battsumm = 0;
            battbuffcnt = 0;
         }
         else
            battbuffcnt++;
      }
      osDelay(3);
   }
}

В этом примере АЦП используется для оцифровки звука с частотой выборок 12000 Гц. Преобразования запускает таймер TIM3 в своем обработчике прерывания TIM3_IRQHandler, который имеет максимальный приоритет. Данные из АЦП считывает обработчик прерывания ADC_IRQHandler, у которого установлен меньший приоритет. В нем считанные из АЦП данные преобразуются в формат short и накапливаются в половинке буфера adcbuf. Как только половинка заполняется, её данные с помощью очереди dataQueue передаются потоку обработки (он здесь не показан), и происходит переключение на заполнение другой половинки буфера.

Функция инициализации HAL_ADC_MspInit модуля stm32f4xx_hal_msp.c такая же, как в примере 1 выше. Обратите внимание, что оба блока ADC2 (Пример 1) и ADC3 (Пример 2) могут работать одновременно, не влияя друг на друга.

#define SNDBUFLEN 512
 
TIM_HandleTypeDef adctim;
ADC_HandleTypeDef hadc3;
int16_t adcbuf[2][SNDBUFLEN];
uint8_t adcbufidx = 0;
TSoundBuf soundbuf;
 
void TIM3_IRQHandler (void)
{
   HAL_TIM_IRQHandler(&adctim);
   HAL_ADC_Start_IT(&hadc3);
}
 
void ADC_IRQHandler (void)
{
   HAL_ADC_IRQHandler(&hadc3);
}
 
/**
* @brief Функция преобразует unsigned int32 в signed int16 (short).
* @param Результат ADC, сдвинутый влево, до 16 разрядов.
*        Этот алгоритм преобразования описан в AN5012 "Analog-to-digital
*        audio conversion example using STM32L4 Series microcontroller
*        peripherals"
*/
static int16_t ADC_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;
}
 
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
   static uint16_t adcidx = 0;
   TSoundBuf *psndbuf;
   static uint32_t period;
   
   if (adcidx < SNDBUFLEN)
   {
      adcbuf[adcbufidx][adcidx]
            = ADC_to_USB_Dataformat((uint32_t)HAL_ADC_GetValue(&hadc3));
      adcidx++;
   }
   else
   {
      if (IFSK_receive == ifskmode)
      {
         soundbuf.rawdata = adcbuf[adcbufidx];
         soundbuf.size = SNDBUFLEN;
         psndbuf = &soundbuf;
         xQueueSendFromISR( dataQueue, &psndbuf, NULL );         
      }
      adcidx = 0;
      adcbufidx = adcbufidx?0:1;
      adcbuf[adcbufidx][adcidx]
            = ADC_to_USB_Dataformat((uint32_t)HAL_ADC_GetValue(&hadc3));
      adcidx++;
   }
}
 
void MX_ADC3_Init(void)
{
   ADC_ChannelConfTypeDef sConfig = {0};
 
   /** Конфигурирование глобальных функций ADC (такты, разрешение, выравнивание
     *  данных и количество преобразований) */
   hadc3.Instance = ADC3;
   hadc3.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV4;
   hadc3.Init.Resolution            = ADC_RESOLUTION_12B;
   hadc3.Init.ScanConvMode          = DISABLE;
   hadc3.Init.ContinuousConvMode    = DISABLE;
   hadc3.Init.DiscontinuousConvMode = DISABLE;
   hadc3.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;
   hadc3.Init.ExternalTrigConv      = ADC_SOFTWARE_START;
   hadc3.Init.DataAlign             = ADC_DATAALIGN_LEFT;
   hadc3.Init.NbrOfConversion       = 1;
   hadc3.Init.DMAContinuousRequests = DISABLE;
   hadc3.Init.EOCSelection          = ADC_EOC_SINGLE_CONV;
   if (HAL_ADC_Init(&hadc3) != HAL_OK)
      HALerrorHandler(__FILE__, __LINE__);
   /** Конфигурирование выбранного обычного канала ADC его соответствующим
     * рангом в секвенсоре и его временем выборки. */
   sConfig.Channel = ADC_CHANNEL_4;
   sConfig.Rank = 1;
   sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
   if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
      HALerrorHandler(__FILE__, __LINE__);
   HAL_NVIC_SetPriority(ADC_IRQn, ADC_HW_INTERRUPT_PRIORITY, 0);
   HAL_NVIC_EnableIRQ(ADC_IRQn);
}
 
void TIM3_init (void)
{
  /* -----------------------------------------------------------------------
   Частота входных тактов TIM3 (TIM3CLK) устанавливается на частоту тактов
   2 * APB1 (PCLK1), поскольку прескалер APB1 отличается от 1.
      TIM3CLK = 2 * PCLK1        PCLK1 = HCLK / 4
       => TIM3CLK = HCLK / 2 = SystemCoreClock /2
   Чтобы получить частоту тактов TIM3 10 кГц, прескалер вычисляется следующим
   образом:
   Prescaler = (TIM3CLK / частота тактов счетчика TIM3) - 1
   Prescaler = ((SystemCoreClock /2) / 10 кГц) - 1
 
   Примечание: переменная SystemCoreClock хранит частоту HCLK. Каждый раз, когда
   изменяется частота ядра (HCLK), пользователь должен обновить переменную
   SystemCoreClock. Иначе любая конфигурация, основанная на значении этой
   переменной, будет некорректной. Эта переменная обновляется тремя способами:
      1) Вызовом CMSIS-функции SystemCoreClockUpdate().
      2) Вызовом HAL API-функции HAL_RCC_GetSysClockFreq().
      3) Каждый раз, когда вызывается HAL_RCC_ClockConfig() для конфигурирования
         системной тактовой частоты.
  ----------------------------------------------------------------------- */  
   adctim.Instance = TIM3;
 
   /* Запрет глобального прерывания TIMx */
   __HAL_TIM_DISABLE(&adctim);
   HAL_NVIC_DisableIRQ(TIMx_IRQn);
   __HAL_RCC_TIM3_CLK_DISABLE();
   
   /* Инициализация аппаратуры TIM3:
      + Period = 10000 - 1
      + Prescaler = ((SystemCoreClock/2)/10000) - 1
      + ClockDivision = 0
      + Counter direction = Up
   */
   adctim.Init.Period = (uint32_t)((SystemCoreClock/2) / NOMINAL_SAMPLING_RATE) - 1;
   adctim.Init.Prescaler = 0;
   adctim.Init.ClockDivision = 0;
   adctim.Init.CounterMode = TIM_COUNTERMODE_UP;
   __HAL_RCC_TIM3_CLK_ENABLE();
 
   HAL_NVIC_SetPriority(TIMx_IRQn, TIMADC_HW_INTERRUPT_PRIORITY, 0);
   /* Разрешение глобального прерывания TIMx */
   HAL_NVIC_EnableIRQ(TIMx_IRQn);
   TIM_Base_SetConfig(adctim.Instance, &adctim.Init); 
   __HAL_TIM_ENABLE_IT(&adctim, TIM_IT_UPDATE);
      
   /* Разрешение периферийного устройства таймера */
   __HAL_TIM_ENABLE(&adctim);
}

[Ссылки]

1. STM32F427xx STM32F429xx Datasheet site:st.com.
2. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs site:st.com.
3STM32: аббревиатуры и термины.

 

Добавить комментарий


Защитный код
Обновить

Top of Page