STM32 TIM DAC и DMA

Я хочу разгрузить ЦП моего STM32G491 с помощью функции DMA. Я хочу использовать таймер 2 (TIM2) для генерации четырех моментов, когда требуется передача DMA. При этом я могу создать два импульса за один период. Период, рабочий цикл и задержка регулируются с помощью функций сравнения выходов таймера.

  int amplitude = 0xFFF;

  uint16_t current[] = {0, amplitude, 0, amplitude};

  HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t*) &current[0], sizeof(uint16_t), DAC_ALIGN_12B_R);
  HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t*) &current[1], sizeof(uint16_t), DAC_ALIGN_12B_R);
  HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t*) &current[2], sizeof(uint16_t), DAC_ALIGN_12B_R);
  HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t*) &current[3], sizeof(uint16_t), DAC_ALIGN_12B_R);

  HAL_TIM_Base_Start_IT(&htim2);
  HAL_TIM_OC_Start_IT(&htim2, TIM_CHANNEL_1);
  HAL_TIM_OC_Start_IT(&htim2, TIM_CHANNEL_2);
  HAL_TIM_OC_Start_IT(&htim2, TIM_CHANNEL_3);

Я не знаю, как подключить свои таймеры, чтобы инициировать передачу данных из памяти в ЦАП. Надеюсь, вы поможете мне указать правильное направление.

Я настроил свои таймеры так, чтобы они отправляли запрос DMA, когда время таймера истекло. Я так настроил все свои таймеры

При этом я могу создать своего рода двухфазный импульс, но только с положительной стороны. Регулируемые параметры - это две ширины импульса, межфазный интервал и период этого импульса. Обратите внимание, что отрицательная фаза будет положительной, поэтому будет выдаваться два положительных импульса.

введите описание изображения здесь


person erwindenboer    schedule 29.05.2021    source источник
comment
Похоже, вы пытаетесь сгенерировать какую-то прямоугольную волну, верно? Какие требования к этому сигналу? Какие параметры вы хотите регулировать?   -  person Tagli    schedule 29.05.2021


Ответы (1)


Вы неправильно его настраиваете.

  1. Настройте триггер DAC (этот триггер заставит DAC запрашивать передачу данных)  введите описание изображения здесь

  2. Настройте DAC DMA  введите описание изображения здесь

  3. Настроить таймер для генерации соответствующего триггера

person 0___________    schedule 29.05.2021
comment
Спасибо за ответ. Как я вижу в раскрывающемся меню, вы можете выбрать только событие тайм-аута. Нет возможности использовать функции сравнения выходных данных для инициирования передачи DMA? На моем изображении четыре функции сравнения выходов используются для запроса передачи DMA. - person erwindenboer; 30.05.2021
comment
@erwindenboer этот вопрос показывает, что вы не читали документацию uC (справочное руководство). Вы пишете разные вещи. Прочтите раздел документации по таймеру. Использование волшебной библиотеки HAL не заменяет знания. - person 0___________; 30.05.2021
comment
Я прочитал документацию uC. Но, возможно, я неправильно истолковал информацию в документации. В документации я прочитал, что выходные каналы сравнения могут генерировать запросы DMA (а также прерывания). Но в STM32CubeMX я вижу, что не могу подключить выходные каналы сравнения к ЦАП, чтобы инициировать передачу. Я не знаю, возможно ли то, что я хочу, в микроконтроллере. Отсюда мой вопрос. - person erwindenboer; 30.05.2021