Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

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

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

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

Теги:

Опубликована: 0 0
Я собрал 0 2
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 2 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
USB-реле (2 канала) Макетная плата для пайки (10 шт)
вверх