STM Урок 29. HAL. DAC. Triangle. DMA

 

 

 

 

Урок 29

 

HAL. DAC. Triangle. DMA

 

 

Сегодня мы продолжим работать с треугольными импульсами, которые мы уже формировали на предыдущем занятии. Только формировать данные импульсы мы будем не с помощью аппаратного механизма, встроеенного в ЦАП, а будем формировать их с помощью заранее подготовленного массива, и эти значения уже при помощи технологии DMA мы будем отправлять в наш преобразователь.

Тем самым мы можем добиться более гибких результатов. То есть, например, мы можем убавить разрешение, не изменив амплитуду, а также оставить её в максимальном виде (4096).

Проект создаём из проекта DAC_TRIANGLE. Назовем его DAC_TRIANGLE2. Запустим проект в Cube и перейдём сразу в Configuration, так как всё остальное у нас уже настроено. Отключим в DAC аппаратные треугольники

 

image00

 

Перейдём в настройки DMA и настроим его следующим образом

 

image02

 

В таймере внесем следующие изменения в предделитель и период

 

image01

 

 

Генерируем и запускаем проект. Соберем код, настроим программатор и начнем писать.

Добавим массив значений в main.c

 

/* USER CODE BEGIN PV */

/* Private variables ———————————————————*/

uint16_t buf_tr[64]={

127,255,383,511,639,767,895,1023,

1151,1279,1407,1535,1663,1791,1919,2047,

2175,2303,2431,2559,2687,2815,2943,3071,

3199,3327,3455,3583,3711,3839,3967,4095,

3967,3839,3711,3583,3455,3327,3199,3071,

2943,2815,2687,2559,2431,2303,2175,2047,

1919,1791,1663,1535,1407,1279,1151,1023,

895,767,639,511,383,255,127,0};

/* USER CODE END PV */

 

Уберем лишнюю переменную из файлов stm32f4xx_it.c и main.h

 

/* USER CODE BEGIN 0 */

extern uint8_t tim6_counter;

/* USER CODE END 0 */

 

#include "stm32f4xx.h"

 

uint8_t tim6_counter;

 

Заменим вызов функции запуска ЦАП

 

  /* USER CODE BEGIN 2 */

        HAL_TIM_Base_Start(&htim6);

        HAL_DAC_Start (&hdac, DAC_CHANNEL_1);

        HAL_DAC_Start_DMA (&hdac, DAC_CHANNEL_1,(uint32_t*)buf_tr,64,DAC_ALIGN_12B_R);

  /* USER CODE END 2 */

 

Собираем, прошиваем, смотрим на нашем самодельном осциллографе, организованном теперь на базе платы F746-Discovery

 

image03

 

В данный момент мы наблюдаем колебания с частотой приблизительно 40-50 кГц.

Чтобы убедиться в том, что вполне будут плавные треугольники и на другой частоте, давайте попробуем её изменить. Для этого нам необязательно идти в Cube, так как изменим мы эту частоту на время, поэтому изменим мы её в функции инициализации таймера MX_TIM6_Init

 

  htim6.Init.Period = 10;
 

По идее должно значение частоты удвоиться, чтобы это увидеть, соберём проект и прошьём контроллер. Смотрим результат

 

image04

 

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

 

Предыдущий урок Программирование МК STM32 Следующий урок

 

Исходный код

 

 

Купить отладочную плату можно здесь STM32F4-DISCOVERY

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM HAL. DAC. Triangle. DMA

5 комментариев на “STM Урок 29. HAL. DAC. Triangle. DMA
  1. tmrider:

    Можете мне помочь с функцией HAL_DAC_START_DMA() в NORMAL режиме.

    Требуется воспроизвести звук(семпл) по нажатию на кнопку. Это я реализовал, но функция работает таким образом, что пока семпл не проиграется да конца, он не сможет запуститься сначала.

  2. Seotavr:

    «Собираем, прошиваем, смотрим на нашем самодельном осциллографе, организованном теперь на базе платы F746-Discovery»
    А где этот код? Может не внимательно прочитал этот урок?

    • А нет нигде. Это секретный код (шучу). Такого урока не было, так как это недоработано. Нет синхронизации и ещё много разных неточностей. Сырое не публикую.

  3. Seotavr:

    Простите это про осциллограф на F746-Discovery

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*