STM32F4. Урок 24 — Работа с ЦАП через DMA

Данная библиотека позволяет работать одним или двумя ЦАП микроконтроллера STM32F4 в режиме DMA. Вывод сигнала происходит циклически, поэтому все его значения должны быть записаны в массив.
В данный момент в библиотеке реализовано 4 типа сигналов (синусойда, пилообразный, треугольный и прямоугольный, а также установка логического нуля).
Дополнительная функция позволяет корректировать частоту сигнала. Частота устанавливается двумя параметрами: предделителем и периодом. Эти два значения вычисляются заранее
(частота зависит также от количества значений кривой выбранного сигнала).
Используемый таймер должен быть указан в H-файле через определение. В статье используется Timer7, но так же можно применить TIM2, TIM4, TIM5.

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

dac

ЦАП жестко привязан к выводам процессора:

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

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

 //-------------------------------------------------------------- // File     : main.c // Datum    : 24.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 DAC-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_dac_dma.h"  int main(void) {   SystemInit(); // Инициализация настроек кварца    // инициализация ЦАП в режиме DMA (DAC-1 b 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 и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.