Данная библиотека позволяет использовать АЦП для циклического считывания данных с применением 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 и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.
Прикрепленные файлы:
- ub_stm32f4_adc_dma_v101_RUS.rar (9 Кб)
- Demo_14_ADC_DMA_RUS.rar (199 Кб)