STM32F4. Урок 24 - Робота з ЦАП через DMA
Ця бібліотека дозволяє працювати одним або двома ЦАП мікроконтролера STM32F4 в режимі DMA. Вивід сигналу відбувається циклічно, тому всі його значення повинні бути записані в масив.
На даний момент у бібліотеці реалізовано 4 типи сигналів (синусоїда, пилоподібний, трикутний і прямокутний, а також установка логічного нуля).
Додаткова функція дозволяє коригувати частоту сигналу. Частота встановлюється двома параметрами: дільником і періодом. Ці два значення обчислюються заздалегідь
(частота залежить також від кількості значень кривої вибраного сигналу).
Використовуваний таймер повинен бути вказаний у H-файлі через визначення. В статті використовується Timer7, але також можна застосувати TIM2, TIM4, TIM5.
Приклад використання:
ЦАП жорстко прив'язаний до виводів процесора:
DAC1 до PA4
DAC2 до PA5
Вимоги:
Підключувані модулі CooCox-IDE: GPIO, DAC, TIM, DMA.
Підтримувані бібліотеки: відсутні.
Перерахування:
typedef enum { SINGLE_DAC1_DMA = 0, // використовувати тільки DAC1 на PA4 SINGLE_DAC2_DMA, // використовувати тільки DAC2 на PA5 DUAL_DAC_DMA // використовувати DAC1 (PA4) і DAC2 (PA5) }DAC_DMA_MODE_t;
typedef enum { DAC_WAVE_OFF = 0, // тривалий низький рівень DAC_WAVE1_SINUS = 1, // форма сигналу 1 (синус) DAC_WAVE2_SAEGEZAHN = 2, // форма сигналу 2 (пилоподібний) DAC_WAVE3_DREIECK = 3, // форма сигналу 3 (трикутний) DAC_WAVE4_RECHTECK = 4 // форма сигналу 4 (прямокутний) }DAC_DMA_WAVE_NAME_t;
Функції:
void UB_DAC_DMA_Init(DAC_DMA_MODE_t mode); // ініціалізація налаштувань ЦАП void UB_DAC_DMA_SetWaveform1(DAC_DMA_WAVE_NAME_t wave); // установка форми сигналу для DAC1 void UB_DAC_DMA_SetWaveform2(DAC_DMA_WAVE_NAME_t wave); // установка форми сигналу для DAC2 void UB_DAC_DMA_SetFrq1(uint16_t vorteiler, uint16_t periode); // регулювання частоти DAC1 void UB_DAC_DMA_SetFrq2(uint16_t vorteiler, uint16_t periode); // регулювання частоти DAC2
Приклад використання:
//-------------------------------------------------------------- // Файл : main.c // Дата : 24.03.2013 // Версія : 1.0 // Автор : UB // EMail : mc-4u(@)t-online.de // Веб : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Модуль : CMSIS_BOOT, M4_CMSIS_CORE // Функція : Демонстрація бібліотеки DAC-DMA // Примітка : Ці два файли повинні бути на 8MHz // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_dac_dma.h" int main(void) { SystemInit(); // Ініціалізація налаштувань кварца // ініціалізація ЦАП в режимі DMA (DAC-1 б DAC-2) UB_DAC_DMA_Init(DUAL_DAC_DMA); // вихід синусоїдального сигналу на DAC1 (PA4) UB_DAC_DMA_SetWaveform1(DAC_WAVE1_SINUS); // вихід трикутного сигналу на DAC2 (PA5) UB_DAC_DMA_SetWaveform2(DAC_WAVE3_DREIECK); // Розрахунок частоти синусоїдального сигналу в 1 Гц // Синусоїдальний сигнал має 32 значення // f=84MHz/300/8750/32 = 1 Hz UB_DAC_DMA_SetFrq1(299,8749); // Розрахунок частоти трикутного сигналу в 10 Гц // Пилоподібний сигнал має 32 значення // f=84MHz/30/8750/32 = 10 Hz UB_DAC_DMA_SetFrq2(29,8749); while(1) { } }
В додатку проект CooCox і окрема бібліотека для використання в інших проектах. Автор оригіналу статті просить задавати питання на його сайті німецькою або англійською мовами.
Прикреплені файли:
- ub_stm32f4_dac_dma_v101_rus.rar (5 Кб)
- Demo_24_DAC_DMA_rus.rar (222 Кб)