Категории:

  • Программирование


  • Изобразительное искусство


  • Программирование встраиваемых систем


  • Компьютерная графика


  • WEB Разработка


  • Музыка


  • Инженерия


  • iVARIOUS


  • Mobil App


  • STM32. ADC (АЦП)

    ADC, он же АЦП - превращает аналоговый электрический сигнал в его числовой эквивалент. Максимальная разрядность АЦП в STM32F407VG - 12 бит, чего достаточно даже для неплохой записи звука. Например для диапазона измерений в 3V, шаг его шкалы будет равен:
    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)


    Читайте больше в категории: Программирование встраиваемых систем

    2016-06-09 08:21:16



    Другие статьи:

    JavaScript. Введение

    Maya. Insert Edge Loop Tool и Lattice

    STM32. SPI интерфейс

    Maya. Нормали и Системы координат

    Середнянський замок. 3D реконструкція

    JavaScript. innerHTML

    Android. Button

    STM32. Контроллеры прерываний NVIC и EXTI

    Maya. Текстуры

    Линии и пятна