Данная библиотека позволяет использовать АЦП для циклического считывания данных с применением 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 Кб)
Комментарии (0) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация