ADC, он же АЦП - превращает аналоговый электрический сигнал в его числовой эквивалент. Максимальная разрядность АЦП в
STM32F407VG - 12 бит, чего достаточно даже для неплохой записи звука. Например для диапазона измерений в 3V, шаг его шкалы
будет равен:
3/4095=0.00073V
Это значит, АЦП будет улавливать изменение напряжения всего в 0.00073V. Впрочем, такая детализация измерений не всегда нужна, поэтому есть режимы работы АЦП в 10, 8, и 6 бит.
Есть множество настроек работы преобразователя:
Программирование 16 каналов, которые будут сканироваться по очереди, и выдавать значения каждого измерения. Также есть возможность использовать внешний источник запуска преобразователя. Передача преобразованных данных по DMA, настройки таймингов между преобразованиями и многое другое.
Минимальная настройка АЦП совсем не сложная, я бы даже сказал - проще только генератор случайных чисел RNG, со своими тремя регистрами. Хотя благодаря количеству каналов, и соответственно регистров к ним , настройка АЦП кажется сложной.
Есть еще небольшое различие внутри АЦП, это инжектированные и регулярные каналы.
Прерывание как и везде на "периферии" может срабатывать на некоторых событиях, например таких как достижение заданного минимального или максимального значения на входе АЦП (функция watchdog), ну и конечно при готовности данных после преобразования.
STM32F407VG имеет три ADC, с одинаковыми по названиям и функциям регистрами, а также отдельная группа регистров C_ADC которая сообщает о происходящем на всех ADC в целом.
Как и при работе с любой другой периферией, случае использования внешних источников измерения, нужно сделать общий ноль.
Адреса регистров ADC:
3/4095=0.00073V
Это значит, АЦП будет улавливать изменение напряжения всего в 0.00073V. Впрочем, такая детализация измерений не всегда нужна, поэтому есть режимы работы АЦП в 10, 8, и 6 бит.
Есть множество настроек работы преобразователя:
Программирование 16 каналов, которые будут сканироваться по очереди, и выдавать значения каждого измерения. Также есть возможность использовать внешний источник запуска преобразователя. Передача преобразованных данных по DMA, настройки таймингов между преобразованиями и многое другое.
Минимальная настройка АЦП совсем не сложная, я бы даже сказал - проще только генератор случайных чисел RNG, со своими тремя регистрами. Хотя благодаря количеству каналов, и соответственно регистров к ним , настройка АЦП кажется сложной.
Есть еще небольшое различие внутри АЦП, это инжектированные и регулярные каналы.
Прерывание как и везде на "периферии" может срабатывать на некоторых событиях, например таких как достижение заданного минимального или максимального значения на входе АЦП (функция watchdog), ну и конечно при готовности данных после преобразования.
STM32F407VG имеет три ADC, с одинаковыми по названиям и функциям регистрами, а также отдельная группа регистров C_ADC которая сообщает о происходящем на всех ADC в целом.
Как и при работе с любой другой периферией, случае использования внешних источников измерения, нужно сделать общий ноль.
Адреса регистров ADC:
- //.........ADC1........
- #define RCC_ADC *((uint32_t*)0x40023844)
- #define ADC1_SR *((uint32_t*)0x40012000)
- #define ADC1_CR1 *((uint32_t*)0x40012004)
- #define ADC1_CR2 *((uint32_t*)0x40012008)
- #define ADC1_SMPR1 *((uint32_t*)0x4001200C)
- #define ADC1_SMPR2 *((uint32_t*)0x40012010)
- #define ADC1_JOFR1 *((uint32_t*)0x40012014)
- #define ADC1_JOFR2 *((uint32_t*)0x40012018)
- #define ADC1_JOFR3 *((uint32_t*)0x4001201C)
- #define ADC1_JOFR4 *((uint32_t*)0x40012020)
- #define ADC1_HTR *((uint32_t*)0x40012024)
- #define ADC1_HTR *((uint32_t*)0x40012024)
- #define ADC1_LTR *((uint32_t*)0x40012028)
- #define ADC1_SQR1 *((uint32_t*)0x4001202C)
- #define ADC1_SQR2 *((uint32_t*)0x40012030)
- #define ADC1_SQR3 *((uint32_t*)0x40012034)
- #define ADC1_JSQR *((uint32_t*)0x40012038)
- #define ADC1_JDR1 *((uint32_t*)0x40012048)
- #define ADC1_JDR2 *((uint32_t*)0x4001204C)
- #define ADC1_JDR3 *((uint32_t*)0x40012050)
- #define ADC1_JDR4 *((uint32_t*)0x40012054)
- #define ADC1_DR *((uint32_t*)0x4001204C)
- //.........ADC2.......
- #define ADC2_SR *((uint32_t*)0x40012100)
- #define ADC2_CR1 *((uint32_t*)0x40012104)
- #define ADC2_CR2 *((uint32_t*)0x40012108)
- #define ADC2_SMPR1 *((uint32_t*)0x4001210C)
- #define ADC2_SMPR2 *((uint32_t*)0x40012110)
- #define ADC2_JOFR1 *((uint32_t*)0x40012114)
- #define ADC2_JOFR2 *((uint32_t*)0x40012118)
- #define ADC2_JOFR3 *((uint32_t*)0x4001211C)
- #define ADC2_JOFR4 *((uint32_t*)0x40012120)
- #define ADC2_HTR *((uint32_t*)0x40012124)
- #define ADC2_HTR *((uint32_t*)0x40012124)
- #define ADC2_LTR *((uint32_t*)0x40012128)
- #define ADC2_SQR1 *((uint32_t*)0x4001212C)
- #define ADC2_SQR2 *((uint32_t*)0x40012130)
- #define ADC2_SQR3 *((uint32_t*)0x40012134)
- #define ADC2_JSQR *((uint32_t*)0x40012138)
- #define ADC2_JDR1 *((uint32_t*)0x40012148)
- #define ADC2_JDR2 *((uint32_t*)0x4001214C)
- #define ADC2_JDR3 *((uint32_t*)0x40012150)
- #define ADC2_JDR4 *((uint32_t*)0x40012154)
- #define ADC2_DR *((uint32_t*)0x4001214C)
- //........ADC3......
- #define ADC3_SR *((uint32_t*)0x40012200)
- #define ADC3_CR1 *((uint32_t*)0x40012204)
- #define ADC3_CR2 *((uint32_t*)0x40012208)
- #define ADC3_SMPR1 *((uint32_t*)0x4001220C)
- #define ADC3_SMPR2 *((uint32_t*)0x40012210)
- #define ADC3_JOFR1 *((uint32_t*)0x40012214)
- #define ADC3_JOFR2 *((uint32_t*)0x40012218)
- #define ADC3_JOFR3 *((uint32_t*)0x4001221C)
- #define ADC3_JOFR4 *((uint32_t*)0x40012220)
- #define ADC3_HTR *((uint32_t*)0x40012224)
- #define ADC3_HTR *((uint32_t*)0x40012224)
- #define ADC3_LTR *((uint32_t*)0x40012228)
- #define ADC3_SQR1 *((uint32_t*)0x4001222C)
- #define ADC3_SQR2 *((uint32_t*)0x40012230)
- #define ADC3_SQR3 *((uint32_t*)0x40012234)
- #define ADC3_JSQR *((uint32_t*)0x40012238)
- #define ADC3_JDR1 *((uint32_t*)0x40012248)
- #define ADC3_JDR2 *((uint32_t*)0x4001224C)
- #define ADC3_JDR3 *((uint32_t*)0x40012250)
- #define ADC3_JDR4 *((uint32_t*)0x40012254)
- #define ADC3_DR *((uint32_t*)0x4001224C)
- #define ADC_CSR *((uint32_t*)0x40012300)
- #define ADC_CCR *((uint32_t*)0x40012304)
- #define ADC_CDR *((uint32_t*)0x40012308)
Комментариев нет:
Отправить комментарий