STM32F4. Урок 14 — АЦП с использованием DMA

Данная библиотека позволяет использовать АЦП для циклического считывания данных с применением DMA, что позволяет снизить нагрузку на процессор. Максимальное количество используемых каналов — 16.
Настройка производится (как и в STM32F4. Урок 5 — работа с АЦП) в C-файлы. В нем для каждого канала АЦП должен быть назначен вывод.
К данной статье прикреплено 2 библиотеки, ADC1 и ADC2, которые можно использовать одновременно, если необходимо более 16 каналов АЦП.

Пример работы:

В примере используется лишь три канала АЦП для иллюстрации работы: PA3, PC4, PC5.

Требования:

   Подключаемые модули CooCox-IDE : GPIO, ADC, DMA.
   Поддерживаемые библиотеки: отсутствуют.

Перечисления:

typedef enum {
ADC_PA3 = 0, // PA3
ADC_PC4 = 1, // PC4
ADC_PC5 = 2 // PC5
}ADC1d_NAME_t;

Функции:

void UB_ADC1_DMA_Init(void); // инициализация и запуск
uint16_t UB_ADC1_DMA_Read(ADC1d_NAME_t adc_name); // зачитать данные в канале АЦП

Пример использования:

//—————————————————————
// File : main.c
// Datum : 03.03.2013
// Version : 1.0
// Autor : UB
// EMail : mc-4u(@)t-online.de
// Web : www.mikrocontroller-4u.de
// CPU : STM32F4
// IDE : CooCox CoIDE 1.7.0
// Module : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der ADC-DMA-Library
// Hinweis : Diese zwei Files muessen auf 8MHz stehen
// «cmsis_boot/stm32f4xx.h»
// «cmsis_boot/system_stm32f4xx.c»
//—————————————————————

#include «main.h»
#include «stm32_ub_led.h»
#include «stm32_ub_adc2_dma.h»

int main(void)
{
uint16_t adc_wert;

SystemInit(); // Инициализация настроек кварца

UB_Led_Init(); // Инициализация светодиодов
UB_ADC2_DMA_Init(); // Инициализация ADC2 с режиме DMA

while(1)
{
// Зачитать данные АЦП и зажечь соответствующий светодиод
adc_wert=UB_ADC2_DMA_Read(ADC_PA3);
if(adc_wert>2048) UB_Led_On(LED_GREEN); else UB_Led_Off(LED_GREEN);

// Зачитать данные АЦП и зажечь соответствующий светодиод
adc_wert=UB_ADC2_DMA_Read(ADC_PC4);
if(adc_wert>2048) UB_Led_On(LED_RED); else UB_Led_Off(LED_RED);

// Зачитать данные АЦП и зажечь соответствующий светодиод
adc_wert=UB_ADC2_DMA_Read(ADC_PC5);
if(adc_wert>2048) UB_Led_On(LED_BLUE); else UB_Led_Off(LED_BLUE);
}
}

В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

Прикрепленные файлы:

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

Ваш адрес email не будет опубликован.